The submitted patch fixes a crash we are experiencing on every shutdown. Perhaps the better solution is to remove the spin_lock_irqsave/restore? I tested removing the spin_lock completely and the crash issue was eliminated. Happy to update the patch if this is the preferred method. Kind regards, Matt On Mon, Feb 10, 2025 at 8:12 AM Greg KH <gregkh@xxxxxxxxxxxxxxxxxxx> wrote: > > On Mon, Feb 10, 2025 at 07:48:29AM -0600, Matt Lee wrote: > > 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); > > - > > So now the lock does nothing? Are you sure this change is correct? > > thanks, > > greg k-h