On Saturday 19 May 2007, Alan Stern wrote: > On Sat, 19 May 2007, David Brownell wrote: > > > > Absolutely right, I'm being an idiot here. I think I looked at root > > > hub code in the rush to the FreedomHEC preparations. We do not have > > > local_irq_save in the giveback routine. So, when Alan wrote "USB > > > callbacks cannot be interrupted", he meant normal no-reentrancy > > > guarantees, and not that the interrupts are disabled. > > No, I really meant that interrupts are disabled. It's possible that I > was wrong... > > > And by "normal no-reentrancy" you mean the normal guarantee that > > each IRQ handler won't be re-entered while it's running. > > > > I observe that we don't register PCI IRQ handlers with IRQF_DISABLED, > > so it's possible that some *other* IRQ happens while it's running; > > but most of the non-PCI irq handlers are registered with that flag set. > > > > That seems potentially buglike to me; it's legit for any IRQ handler > > to submit an URB. Which would then cause them to try grabbing the > > spinlock held by the HCD's IRQ handler, if that "other" IRQ handler > > happened to fire when the HCD's IRQ handler was running. > > > > So maybe we should always register with IRQF_DISABLED, unattractive > > though that could be in terms of latencies ... or, somehow try to > > define a rule whereby URBs can't be submitted in certain IRQ contexts. > > Or better still, always acquire the HCD's spinlock with > spin_lock_irqsave(). That's what uhci-hcd does, even though ehci-hcd > and ohci-hcd don't.
That's because they were written to assume IRQF_DISABLED was set. I don't know when that irq request mode was changed. > Of course, if we don't use IRQF_DISABLED then we would have to verify > that none of the callbacks rely on interrupts being disabled. AFAIK they've always been allowed to assume that. - Dave ------------------------------------------------------------------------- This SF.net email is sponsored by DB2 Express Download DB2 Express C - the FREE version of DB2 express and take control of your XML. No limits. Just data. Click to get it now. http://sourceforge.net/powerbar/db2/ _______________________________________________ linux-usb-devel@lists.sourceforge.net To unsubscribe, use the last form field at: https://lists.sourceforge.net/lists/listinfo/linux-usb-devel