On Mon, Oct 15, 2012 at 05:31:01PM -0400, Alan Stern wrote:
> >
> > uhci_scan_schedule->
> > uhci_clear_next_interrupt->
> > uhci->term_td->status &= ~cpu_to_hc32(uhci, TD_CTRL_IOC);
> >
> > This panics becase term_td is not allocated yet.
> >
> > Now I could be wrong about the interrupts and the uhci_start routine and
> > perhaps this is prevented somehow. This is why I am asking what is the
> > expectation for the above scenario.
>
> > I was just wondering if you had a quick thought about this or not.
Hi Alan,
Thanks for your respone.
>
> I suspect you're getting a shared interrupt, that is, one generated by
> another device using the same IRQ line and not by the UHCI controller
> itself. Can you check the IRQ assignments to see if that's possible?
A box in our lab (which should have similar hardware) shows
(only first cpu shown, other 159 snipped)
17: 183 IR-IO-APIC-fasteoi uhci_hcd:usb6, ata_piix, hpilo
20: 3 IR-IO-APIC-fasteoi ehci_hcd:usb1, uhci_hcd:usb2
22: 0 IR-IO-APIC-fasteoi uhci_hcd:usb4
23: 53 IR-IO-APIC-fasteoi uhci_hcd:usb3, uhci_hcd:usb5, radeon
So yes, you are probably correct with regards to shared interrupt.
>
> I'm reasonably sure that the controller didn't generate the bad
> interrupt, because it's not allowed to generate any IRQs until the
> USBINTR register is set to a nonzero value. That doesn't happen until
> start_rh() is called near the end of uhci_start().
>
> Since uhci_irq() doesn't check to see whether the uhci->is_initialized
> flag has been set, a shared interrupt arriving too early could cause
> exactly the sort of problem you see here.
>
> I dislike adding an extra test to a hot path, but there doesn't seem to
> be any way around it. Some of the other HCDs may need a similar
> change.
I understand your concern. I was curious in uhci_irq, I see the following
fragment:
status = uhci_readw(uhci, USBSTS);
if (!(status & ~USBSTS_HCH)) /* shared interrupt, not mine */
return IRQ_NONE;
uhci_writew(uhci, status, USBSTS); /* Clear it */
Should that be helping in filtering out shared interrupts or not in this
case?
I did not get a chance to test the patch yet.
Cheers,
Don
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html