On Sun, 29 Nov 2020, Michael Schmitz wrote: > Am 28.11.20 um 10:48 schrieb Finn Thain: > > On Sat, 28 Nov 2020, Finn Thain wrote: > > > >> diff --git a/drivers/scsi/NCR5380.c b/drivers/scsi/NCR5380.c > >> index d654a6cc4162..739def70cffb 100644 > >> --- a/drivers/scsi/NCR5380.c > >> +++ b/drivers/scsi/NCR5380.c > >> @@ -223,7 +223,10 @@ static int NCR5380_poll_politely2(struct NCR5380_hostdata *hostdata, > >> cpu_relax(); > >> } while (n--); > >> > >> - if (irqs_disabled() || in_interrupt()) > >> + /* We can't sleep when local irqs are disabled and callers ensure > >> + * that local irqs are disabled whenever we can't sleep. > >> + */ > >> + if (irqs_disabled()) > >> return -ETIMEDOUT; > >> > >> /* Repeatedly sleep for 1 ms until deadline */ > >> > > Michael, Andreas, would you please confirm that this is workable on > > Atari? The driver could sleep when IPL == 2 because > > arch_irqs_disabled_flags() would return false (on Atari). I'm > > wondering whether that would deadlock. > > Pretty sure this would deadlock when in interrupt context here. When in interrupt context, irqs_disabled() is true due to spinlock_irqsave/restore() in NCR5380_intr(). My question was really about what would happen if we sleep with IPL == 2. > Otherwise, IPL 2 is perfectly OK (which is why > arch_irqs_disabled_flags() returns false in that case). > > If you want to be 100% certain, I can give this one a spin. > Please only test it if you think it will work. > Cheers, > > Michael > >