--- a/kernel/kthread.c +++ b/kernel/kthread.c @@ -623,6 +623,8 @@ void kthread_unpark(struct task_struct * { struct kthread *kthread = to_kthread(k); + if (!test_bit(KTHREAD_SHOULD_PARK, &kthread->flags)) + return; /* * Newly created kthread was parked when the CPU was offline. * The binding was lost and we need to set it again. --- l/drivers/input/misc/yealink.c +++ y/drivers/input/misc/yealink.c @@ -438,7 +438,7 @@ static void urb_irq_callback(struct urb yealink_do_idle_tasks(yld); - if (!yld->shutdown) { + if (!yld->shutdown && status != -EPROTO) { ret = usb_submit_urb(yld->urb_ctl, GFP_ATOMIC); if (ret && ret != -EPERM) dev_err(&yld->intf->dev, @@ -460,13 +460,13 @@ static void urb_ctl_callback(struct urb case CMD_KEYPRESS: case CMD_SCANCODE: /* ask for a response */ - if (!yld->shutdown) + if (!yld->shutdown && status != -EPROTO) ret = usb_submit_urb(yld->urb_irq, GFP_ATOMIC); break; default: /* send new command */ yealink_do_idle_tasks(yld); - if (!yld->shutdown) + if (!yld->shutdown && status != -EPROTO) ret = usb_submit_urb(yld->urb_ctl, GFP_ATOMIC); break; }