--- x/kernel/workqueue.c +++ y/kernel/workqueue.c @@ -2679,7 +2679,8 @@ static void worker_attach_to_pool(struct worker->flags |= WORKER_UNBOUND; } else { WARN_ON_ONCE(pool->flags & POOL_BH); - kthread_set_per_cpu(worker->task, pool->cpu); + if (!worker->rescue_wq) + kthread_set_per_cpu(worker->task, pool->cpu); } if (worker->rescue_wq) --- x/drivers/input/misc/yealink.c +++ y/drivers/input/misc/yealink.c @@ -438,6 +438,8 @@ static void urb_irq_callback(struct urb yealink_do_idle_tasks(yld); + if (status == -EPROTO) + return; if (!yld->shutdown) { ret = usb_submit_urb(yld->urb_ctl, GFP_ATOMIC); if (ret && ret != -EPERM) @@ -452,9 +454,12 @@ static void urb_ctl_callback(struct urb struct yealink_dev *yld = urb->context; int ret = 0, status = urb->status; - if (status) + if (status) { dev_err(&yld->intf->dev, "%s - urb status %d\n", __func__, status); + if (status == -EPROTO) + return; + } switch (yld->ctl_data->cmd) { case CMD_KEYPRESS: