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
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <Pine.LNX.4.44L0.1003301329160.1634-100000@iolanthe.rowland.org>
Date:	Tue, 30 Mar 2010 13:40:56 -0400 (EDT)
From:	Alan Stern <stern@...land.harvard.edu>
To:	Justin Piszcz <jpiszcz@...idpixels.com>
cc:	Kernel development list <linux-kernel@...r.kernel.org>,
	USB list <linux-usb@...r.kernel.org>,
	Alan Piszcz <ap@...arrain.com>
Subject: Re: 2.6.33: Xorg+khubd lockup (D-state) BUG / ioctl EVIOCGNAME
 failed: Inappropriate ioctl for device / PreInit returned NULL

On Tue, 30 Mar 2010, Justin Piszcz wrote:

> Hello!
> 
> I have all the data you asked for:
> 
> 1. # cat 0u > /tmp/0u.mon.out
> 2. The kernel log file.

I prefer to get dmesg output rather than log files.  Logging programs
sometimes drop or skip lines.  But this was okay.

Also, I'd like to see the contents of your /proc/interrupts.  It looks 
like the OHCI controller shares an IRQ line with some other device.

> Also 3.
> # date; cat 0u > /tmp/0u_after_disconnect_usb.mon.out
> Tue Mar 30 08:50:45 EDT 2010
> 
> Here, I ran this, disconnected the mouse and re-connected it.
> 
> All files are here:
> 
> http://home.comcast.net/~jpiszcz/20100330/0u.mon.out.bz2
> http://home.comcast.net/~jpiszcz/20100330/0u_after_disconnect_usb.mon.out.bz2
> http://home.comcast.net/~jpiszcz/20100330/kern.log.bz2
> 
> Hopefully something can be found!

Well, I'm making progress.  Below is a new debugging patch to try in
place of the first one.  This time the dmesg log alone will be
sufficient, no need for a usbmon trace.  And the output should be a lot
smaller, since the new patch doesn't print something every time an
interrupt occurs, but rather only when you unplug the mouse.

In fact, you might try unplugging the mouse while it still works and
then plugging it back in.  The difference between the debugging
messages while everything is working and the same thing after the mouse
fails should be informative.

(By the way, these tests are meant to find out why your Xorg and khubd
processes hang when the mouse fails, not for finding the original cause
behind the mouse failure.  That can be addressed later.)

> It has happened again, in addition, this is a LONG outstanding bug since
> 2006 or 2007, see below research:
...

Some of those reports indicate that a BIOS update could fix the
problem.  Have you checked your BIOS version?

Alan Stern



Index: usb-2.6/drivers/usb/host/ohci-hcd.c
===================================================================
--- usb-2.6.orig/drivers/usb/host/ohci-hcd.c
+++ usb-2.6/drivers/usb/host/ohci-hcd.c
@@ -292,6 +292,8 @@ static int ohci_urb_dequeue(struct usb_h
 		if (urb_priv) {
 			if (urb_priv->ed->state == ED_OPER)
 				start_ed_unlink (ohci, urb_priv->ed);
+			ohci_info(ohci, "start unlink urb %p, ed %p tick %u\n",
+					urb, urb_priv->ed, urb_priv->ed->tick);
 		}
 	} else {
 		/*
@@ -324,6 +326,9 @@ ohci_endpoint_disable (struct usb_hcd *h
 
 	if (!ed)
 		return;
+	ohci_info(ohci, "disable ed %p (#%02x) state %d%s\n",
+			ed, ep->desc.bEndpointAddress, ed->state,
+			list_empty(&ed->td_list) ? "" : " (has tds)");
 
 rescan:
 	spin_lock_irqsave (&ohci->lock, flags);
Index: usb-2.6/drivers/usb/host/ohci-q.c
===================================================================
--- usb-2.6.orig/drivers/usb/host/ohci-q.c
+++ usb-2.6/drivers/usb/host/ohci-q.c
@@ -912,6 +912,9 @@ rescan_all:
 		 * frame counter wraps and EDs with partially retired TDs
 		 */
 		if (likely (HC_IS_RUNNING(ohci_to_hcd(ohci)->state))) {
+			ohci_info(ohci, "finish_unlinks: tick %u, ed %p %u, %d\n",
+					tick, ed, ed->tick,
+					tick_before(tick, ed->tick));
 			if (tick_before (tick, ed->tick)) {
 skip_ed:
 				last = &ed->ed_next;
@@ -928,6 +931,8 @@ skip_ed:
 								TD_MASK;
 
 				/* INTR_WDH may need to clean up first */
+				ohci_info(ohci, "dma %llx head %x\n",
+					(unsigned long long) td->td_dma, head);
 				if (td->td_dma != head) {
 					if (ed == ohci->ed_to_check)
 						ohci->ed_to_check = NULL;
@@ -990,6 +995,8 @@ rescan_this:
 			/* HC may have partly processed this TD */
 			td_done (ohci, urb, td);
 			urb_priv->td_cnt++;
+			ohci_info(ohci, "td_cnt %d length %d\n",
+					urb_priv->td_cnt, urb_priv->length);
 
 			/* if URB is done, clean up */
 			if (urb_priv->td_cnt == urb_priv->length) {

--
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

Powered by Openwall GNU/*/Linux Powered by OpenVZ