Re: PPS parport boot lockup: INFO: HARDIRQ-READ-safe ->HARDIRQ-READ-unsafe lock order detected

From: Alexander Gordeev
Date: Mon Jan 24 2011 - 18:28:55 EST


Ð Fri, 21 Jan 2011 20:43:17 +0100
Ingo Molnar <mingo@xxxxxxx> ÐÐÑÐÑ:

>
> * Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx> wrote:
>
> > HOWEVER, even then I think you should see the lockdep message as a
> > problem. The automated toolchain is great because it shows problems
> > that it thinks might happen - not when they happen, but based on a
> > simpler theoretical model. Ignoring the error because there is some
> > rule in place that is hard to explain to the automated toolchain is
> > the wrong thing to do, because it makes the lockdep automation less
> > reliable.
>
> Yeah. Also, inevitably the false positives have a higher likelyhood
> of making it into a released kernel, often because the bugs where
> there was a real lockup as well got noticed via other means.
>
> It's similar with compiler warnings as well: the questionable ones where
> GCC is wrong or at least confused accumulate.
>
> Also note that here there's a real lockup here as well, shortly after the lockdep
> message - the boot never continues, the box keep spewing the PPS debug messages:
>
> [ 76.240020] pps pps0: PPS event at 4294911356
> [ 76.244380] pps pps0: PPS event at 1295471377.240018362
> [ 76.249608] pps pps0: capture assert seq #2
> [ 77.252019] pps pps0: PPS event at 4294911609
> [ 77.256379] pps pps0: PPS event at 1295471378.252017372
> [ 77.261604] pps pps0: capture assert seq #3
> [ 78.264021] pps pps0: PPS event at 4294911862
> [ 78.268387] pps pps0: PPS event at 1295471379.264018619
> [ 78.273621] pps pps0: capture assert seq #4
> [ 79.276018] pps pps0: PPS event at 4294912115
> [ 79.280384] pps pps0: PPS event at 1295471380.276016791
> [ 79.285619] pps pps0: capture assert seq #5
>
> But nothing happens, the boot never continues.

I think I was able to reproduce the lockup by compiling parport,
parport_pc, pps_parport and pps_gen_parport into the kernel. Both
pps_parport and pps_gen_parport use parport_claim_or_block() to claim
the parallel port. They compete for the parallel port at bootup. One
of them gets it. The other one then lockups the system.

After reading the docs I decided to just add PARPORT_FLAG_EXCL and it
worked. The patch follows. Does it help with the lockup you experience?

--
Alexander

Attachment: signature.asc
Description: PGP signature