Skip to contentSkip to conversation

usb-uhci.c: fix for PCI-lockups/IRQ problems

PATCH In review Georg Acher 4 participants 4 messages Nov 30, 2000 – Dec 12, 2000 USB

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 usb-uhci.c: fix for PCI-lockups/IRQ problems

Hi,
test12-pre3 had a large set of patches to usb-uhci.c. One small detail of this patch can make the driver to lockup the PCI bus with certain UHCI-chips (only Intel but not VIA, of course not on my machines...). This patch should fix that.
It also includes Linus' patch for the IRQ-setup.

Signature · 3 lines
         Georg Acher, [email protected]         
         http://www.in.tum.de/~acher/
          "Oh no, not again !" The bowl of petunias          
drivers/usb/usb-uhci.c +7 -3
diff -u linux/drivers/usb/usb-uhci.c linux.afs/drivers/usb/usb-uhci.c
@@ -16,7 +16,7 @@
  * (C) Copyright 1999 Randy Dunlap
  * (C) Copyright 1999 Gregory P. Smith
  *
- * $Id: usb-uhci.c,v 1.249 2000/11/21 12:03:34 acher Exp $
+ * $Id: usb-uhci.c,v 1.251 2000/11/30 09:47:54 acher Exp $
  */
 
 #include <linux/config.h>
@@ -52,7 +52,7 @@
 /* This enables an extra UHCI slab for memory debugging */
 #define DEBUG_SLAB
 
-#define VERSTR "$Revision: 1.249 $ time " __TIME__ " " __DATE__
+#define VERSTR "$Revision: 1.251 $ time " __TIME__ " " __DATE__
 
 #include <linux/usb.h>
 #include "usb-uhci.h"
@@ -582,6 +582,7 @@
 	
 	fill_td (td, 0 * TD_CTRL_IOC, 0, 0); // generate 1ms interrupt (enabled on demand)
 	insert_td (s, qh, td, 0);
+	qh->hw.qh.element &= ~UHCI_PTR_TERM; // remove TERM bit
 	s->td1ms=td;
 
 	dbg("allocating qh: bulk_chain");
@@ -2916,6 +2917,9 @@
 		return -1;
 	}
 
+	/* Enable PIRQ */
+	pci_write_config_word (dev, USBLEGSUP, USBLEGSUP_DEFAULT);
+
 	s->irq = irq;
 
 	if(uhci_start_usb (s) < 0) {
@@ -2951,7 +2955,7 @@
 		if (check_region (io_addr, io_size))
 			break;
 		/* disable legacy emulation */
-		pci_write_config_word (dev, USBLEGSUP, USBLEGSUP_DEFAULT);
+		pci_write_config_word (dev, USBLEGSUP, 0);
 	
 		return alloc_uhci(dev, dev->irq, io_addr, io_size);
 	}
#1 lore raw
Quoted 6 lines · Georg Acher

Hi,
test12-pre3 had a large set of patches to usb-uhci.c. One small detail of this patch can make the driver to lockup the PCI bus with certain UHCI-chips (only Intel but not VIA, of course not on my machines...). This patch should fix that. It also includes Linus' patch for the IRQ-setup.

I am testing with this patch applied.

Here's an OOPS I got when plugging and unplugging my USB mouse multiple times.

Unable to handle kernel paging request at virtual address 01cc0035
c589352c
*pde = 00000000
Oops: 0000
CPU:    0
EIP:    0010:[<c589352c>]

Using defaults from ksymoops -t elf32-i386 -a i386
EFLAGS: 00010206
eax: 01cc0011 ebx: 5508ec83 ecx: c4d39ef4 edx: c4a22b20
esi: c4a22b20 edi: c4d39f18 ebp: 00000064 esp: c4d39eb4
ds: 0018 es: 0018 ss: 0018
Process khubd (pid: 104, stackpage=c4d39000)

Stack: c4d39f08 c4a22b20 c4d39f18 00000064 00000000 00000286 c5825f46 c4a22b20
       c582605a c4a22b20 c1fbd400 80000180 c1d39600 c4d39fdc c4d38000 
c4d39f08
       c4d39f08 00000000 00000000 c4d39f0c c4d39f0c 00000000 c4d39f20 
c4d39f20
Call Trace: [<c5825f46>] [<c582605a>] [<c5826183>] [<c5826210>] [<c582855d>] [<c5829324>] [<c582fcc8>]
       [<c58310cc>] [<c5829515>] [<c0108f0f>] [<c5825000>] [<c5827dbc>]
Code: 8b 40 24 89 44 24 14 83 78 10 00 75 0a b8 ed ff ff ff e9 4f
Quoted 1 line
Quoted 1 line

EIP; c589352c <[usb-uhci]uhci_submit_urb+1c/28c> <=====

Trace; c5825f46 <[usbcore]usb_submit_urb+1e/30> Trace; c582605a <[usbcore]usb_start_wait_urb+aa/174> Trace; c5826183 <[usbcore]usb_internal_control_msg+5f/74> Trace; c5826210 <[usbcore]usb_control_msg+78/98> Trace; c582855d <[usbcore]usb_get_port_status+35/3c> Trace; c5829324 <[usbcore]usb_hub_events+b0/27c> Trace; c582fcc8 <[usbcore]usb_bandwidth_option+26e0/271c> Trace; c58310cc <[usbcore]khubd_wait+4/c>
Trace; c5829515 <[usbcore]usb_hub_thread+25/4c> Trace; c0108f0f <kernel_thread+23/30>
Trace; c5825000 <[nls_iso8859-1].data.end+15e5/1645> Trace; c5827dbc <[usbcore]init_module+0/0>
Code; c589352c <[usb-uhci]uhci_submit_urb+1c/28c> 00000000 <_EIP>:
Code; c589352c <[usb-uhci]uhci_submit_urb+1c/28c> <=====
0: 8b 40 24 mov 0x24(%eax),%eax <=====
Code; c589352f <[usb-uhci]uhci_submit_urb+1f/28c>
3: 89 44 24 14 mov %eax,0x14(%esp,1)
Code; c5893533 <[usb-uhci]uhci_submit_urb+23/28c>
7: 83 78 10 00 cmpl $0x0,0x10(%eax)
Code; c5893537 <[usb-uhci]uhci_submit_urb+27/28c>
b: 75 0a jne 17 <_EIP+0x17> c5893543
<[usb-uhci]uhci_submit_urb+33/28c>
Code; c5893539 <[usb-uhci]uhci_submit_urb+29/28c>
d: b8 ed ff ff ff mov $0xffffffed,%eax
Code; c589353e <[usb-uhci]uhci_submit_urb+2e/28c>
12: e9 4f 00 00 00 jmp 66 <_EIP+0x66> c5893592
<[usb-uhci]uhci_submit_urb+82/28c>

I hope this helps,

Miles

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [email protected]
Please read the FAQ at http://www.tux.org/lkml/

#2 lore raw

linux-2.4.0-test12 problem with init

In reply to Georg Acher

Hi

I reported a problem with using 'init 1' with 2.4.0-test12-pre8 and was told it wasn't a kernel problem. I beg to differ, as it still happens with 2.4.0-test12 but not with 2.4.0-test12-pre7. What changed between pre7 and pre8 to make 'init 1' behave like 'init 5'? 'init 3' works correctly. The only change I've made is to build the new kernel.

The screen messages say it is going into single user mode, but it just doesn't.

Have I missed something that should be changed in the configuration?

Signature · 23 lines
Regards

Bill Maidment
Computer Systems Consultant

_________________________________________

      Maidment Enterprises Pty Ltd      
      42 Woy Woy Bay Road
      Woy Woy Bay  NSW  2256 
_________________________________________
                                         
  Home Phone 02 4342 6716                
  Work Phone 02 9927 3234                
  Mobile     0418 682 993                
  Home Email [email protected]        
  Work Email [email protected]  
  Web Page   www.maidment.com.au         
_________________________________________
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
Please read the FAQ at http://www.tux.org/lkml/
#3 lore raw

Re: linux-2.4.0-test12 problem with init

Quoted 10 lines · Bill Maidment

Hi

I reported a problem with using 'init 1' with 2.4.0-test12-pre8 and was told it wasn't a kernel problem. I beg to differ, as it still happens with 2.4.0-test12 but not with 2.4.0-test12-pre7. What changed between pre7 and pre8 to make 'init 1' behave like 'init 5'? 'init 3' works correctly. The only change I've made is to build the new kernel.

The screen messages say it is going into single user mode, but it just doesn't.

Ding. Plz send me ps lawx output at failure time via private mail.

-Mike

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [email protected]
Please read the FAQ at http://www.tux.org/lkml/