Re: [PATCH] panic: Ensure preemption is disabled during panic()

From: Will Deacon
Date: Fri Oct 04 2019 - 06:49:55 EST


On Fri, Oct 04, 2019 at 10:29:17AM +0100, Russell King - ARM Linux admin wrote:
> On Fri, Oct 04, 2019 at 11:11:42AM +0200, Petr Mladek wrote:
> > On Thu 2019-10-03 21:56:34, Will Deacon wrote:
> > > I've deliberately left the irq part alone, since I think
> > > having magic sysrq work via the keyboard interrupt is desirable from the
> > > panic loop.
> >
> > I agree that we should keep sysrq working.
> >
> > One pity thing is that led_panic_blink() in
> > leds/drivers/trigger/ledtrig-panic.c uses workqueues:
> >
> > + led_panic_blink()
> > + led_trigger_event()
> > + led_set_brightness()
> > + schedule_work()
> >
> > It means that it depends on the scheduler. I guess that it
> > does not work in many panic situations. But this patch
> > will always block it.
> >
> > I agree that it is strange that userspace still works at
> > this stage. But does it cause any real problems?
>
> Yes, there are watchdog drivers that continue to pat their watchdog
> after the kernel has panic'd. It makes watchdogs useless (which is
> exactly how this problem was discovered.)

Indeed, and I think the LED blinking is already unreliable if the
brightness operation needs to sleep. For example, if the kernel isn't
preemptible or the work gets queued up on a different CPU which is
sitting in panic_smp_self_stop().

Will