Re: Regression causes a hang on boot with a Comtrol PCI card

From: Alan Stern
Date: Thu Apr 04 2019 - 15:14:51 EST


On Thu, 4 Apr 2019, Jesse Hathaway wrote:

> On Thu, Apr 4, 2019 at 12:16 PM Alan Stern <stern@xxxxxxxxxxxxxxxxxxx> wrote:
> > > I added debug statements to quirk_usb_early_handoff, quirk_usb_disable_ehci &
> > > ehci_bios_handoff. The box hangs right before calling:
> > >
> > > pci_write_config_byte(pdev, offset + 3, 1);
> >
> > Right _before_ that line? Not _after_ it?
>
> Sorry I should have been more precise, it hangs executing the above
> pci_write_config_function. I get the debug printk immediately preceding
> that line.
>
> > That's surprising because the two preceding lines of code are the
> > condition of an "if" statement and a dev_dbg() call. I don't see how
> > either of them could cause a hang.
> >
> > Maybe the hang is a delayed reaction to something happening somewhere
> > else. But on the assumption that it isn't, you could try commenting
> > out various parts of ehci_bios_handoff to see which ones make a
> > difference.
>
> will do
>
> > > which is in ehci_bios_handoff:
> > >
> > > [ 10.698240] DEBUG: Passed quirk_usb_early_handoff 1300
> > > [ 10.704271] DEBUG: Passed quirk_usb_early_handoff 1308
> > > [ 10.710206] DEBUG: Passed quirk_usb_disable_ehci 939
> > > [ 10.715949] DEBUG: Passed quirk_usb_disable_ehci 945
> > > [ 10.721685] DEBUG: Passed quirk_usb_disable_ehci 950
> > > [ 10.727423] DEBUG: Passed quirk_usb_disable_ehci 958
> > > [ 10.733160] DEBUG: Passed quirk_usb_disable_ehci 964
> > > [ 10.738897] DEBUG: Passed quirk_usb_disable_ehci 968
> > > [ 10.744633] DEBUG: Passed ehci_bios_handoff 849
> > > [ 10.749884] DEBUG: Passed ehci_bios_handoff 884
> > >
> > > I have attached the debug output, and my modified pci-quirks.c file
> > > to the bug report, let me know what else I can do to help.
>
> sorry I attached them to the bug report, but I have attached them to this
> email as well.

Okay. You could try skipping that pci_write_config_byte() call. The
following loop would probably time out, and you might find that the
code crashes later on.

You could also try setting try_handoff to 0 near the start of the
routine. Your system plus the Comtrol PCI card could have the same
sort of bug as reported in Bugzilla #77021.

Alan Stern