A bug in `max3421_remove()` caused a "scheduling while atomic" crash when `kthread_stop()` was called while holding a spinlock. This patch ensures that `kthread_stop()` is called outside the spinlock, fixing the crash and improving system stability when unloading the driver. Signed-off-by: Matt Lee <matt@xxxxxxxxxx> --- drivers/usb/host/max3421-hcd.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/drivers/usb/host/max3421-hcd.c b/drivers/usb/host/max3421-hcd.c index abcdef0..1234567 100644 --- a/drivers/usb/host/max3421-hcd.c +++ b/drivers/usb/host/max3421-hcd.c @@ -1936,11 +1945,10 @@ max3421_remove(struct spi_device *spi) usb_remove_hcd(hcd); spin_lock_irqsave(&max3421_hcd->lock, flags); + spin_unlock_irqrestore(&max3421_hcd->lock, flags); kthread_stop(max3421_hcd->spi_thread); - spin_unlock_irqrestore(&max3421_hcd->lock, flags); - free_irq(spi->irq, hcd); usb_put_hcd(hcd); -- 2.34.1