Re: [PATCH 12/14] scsi: NCR5380: Remove in_interrupt().

Finn Thain
2020-11-30T00:16:50Z

[-- Attachment #1: Type: text/plain, Size: 1571 bytes --]

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
>
>