lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Tue, 26 Aug 2008 14:43:46 -0700 From: David Brownell <david-b@...bell.net> To: Alan Stern <stern@...land.harvard.edu> Cc: Karsten Wiese <fzu@...gehoertderstaat.de>, amruth <amruth_pv@...oo.com>, Oliver Neukum <oliver@...kum.org>, USB list <linux-usb@...r.kernel.org>, Kernel development list <linux-kernel@...r.kernel.org>, Greg KH <greg@...ah.com> Subject: Re: USB Serial device disconnect causes IRQ disable after using ehci controller halted On Tuesday 26 August 2008, Alan Stern wrote: > While it certainly would be a good idea to prevent the handshake > failures from occurring in the first place -- Dave, aren't you working > on a patch for that? -- we should also make sure that when they do > occur, the controller gets reset properly. And an error message should > be printed in the log. Like this? Greg, please queue for 2.6.27 unless someone finds a problem with this patch. ========= SNIP! SNIP! SNIPPITY SNIP! From: David Brownell <dbrownell@...rs.sourceforge.net> I noticed that the "Refactor "if (handshake()) state = HC_STATE_HALT" patch from earlier this year perpetuated a potential problem: it can mark the controller as halted when it's still running (but not acting as, perhaps wrongly, expected). That caused some hangs and crashes, rather than more polite failure modes of a truly halted controller. This patch forces a true halt, and emits a (previously missing) diagnostic. Signed-off-by: David Brownell <dbrownell@...rs.sourceforge.net> --- drivers/usb/host/ehci-hcd.c | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) --- a/drivers/usb/host/ehci-hcd.c 2008-08-15 14:04:27.000000000 -0700 +++ b/drivers/usb/host/ehci-hcd.c 2008-08-15 14:04:36.000000000 -0700 @@ -145,16 +145,6 @@ static int handshake (struct ehci_hcd *e return -ETIMEDOUT; } -static int handshake_on_error_set_halt(struct ehci_hcd *ehci, void __iomem *ptr, - u32 mask, u32 done, int usec) -{ - int error = handshake(ehci, ptr, mask, done, usec); - if (error) - ehci_to_hcd(ehci)->state = HC_STATE_HALT; - - return error; -} - /* force HC to halt state from unknown (EHCI spec section 2.3) */ static int ehci_halt (struct ehci_hcd *ehci) { @@ -173,6 +163,22 @@ static int ehci_halt (struct ehci_hcd *e STS_HALT, STS_HALT, 16 * 125); } +static int handshake_on_error_set_halt(struct ehci_hcd *ehci, void __iomem *ptr, + u32 mask, u32 done, int usec) +{ + int error; + + error = handshake(ehci, ptr, mask, done, usec); + if (error) { + ehci_halt(ehci); + ehci_to_hcd(ehci)->state = HC_STATE_HALT; + ehci_err(ehci, "force halt; handhake %p %08x %08x -> %d\n", + ptr, mask, done, error); + } + + return error; +} + /* put TDI/ARC silicon into EHCI mode */ static void tdi_reset (struct ehci_hcd *ehci) { -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@...r.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists