From le@univie.ac.at  Fri Nov 28 03:03:31 2003
Return-Path: <le@univie.ac.at>
Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125])
	by hub.freebsd.org (Postfix) with ESMTP id CEDAF16A4CE
	for <FreeBSD-gnats-submit@freebsd.org>; Fri, 28 Nov 2003 03:03:31 -0800 (PST)
Received: from mailbox.univie.ac.at (mailbox.univie.ac.at [131.130.1.27])
	by mx1.FreeBSD.org (Postfix) with ESMTP id E16F143F93
	for <FreeBSD-gnats-submit@freebsd.org>; Fri, 28 Nov 2003 03:03:29 -0800 (PST)
	(envelope-from le@univie.ac.at)
Received: from korben.in.tern (adslle.cc.univie.ac.at [131.130.102.11])
	by mailbox.univie.ac.at (8.12.10/8.12.10) with ESMTP id hASB3Il4125028
	for <FreeBSD-gnats-submit@freebsd.org>; Fri, 28 Nov 2003 12:03:20 +0100
Received: from korben.in.tern (korben.in.tern [127.0.0.1])
	by korben.in.tern (8.12.10/8.12.10) with ESMTP id hASB3H2W000870
	for <FreeBSD-gnats-submit@freebsd.org>; Fri, 28 Nov 2003 12:03:17 +0100 (CET)
	(envelope-from le@korben.in.tern)
Received: (from le@localhost)
	by korben.in.tern (8.12.10/8.12.10/Submit) id hASB3HVt000869;
	Fri, 28 Nov 2003 12:03:17 +0100 (CET)
	(envelope-from le)
Message-Id: <200311281103.hASB3HVt000869@korben.in.tern>
Date: Fri, 28 Nov 2003 12:03:17 +0100 (CET)
From: Lukas Ertl <l.ertl@univie.ac.at>
Reply-To: Lukas Ertl <l.ertl@univie.ac.at>
To: FreeBSD-gnats-submit@freebsd.org
Cc:
Subject: usb dead after resume
X-Send-Pr-Version: 3.113
X-GNATS-Notify:

>Number:         59747
>Category:       kern
>Synopsis:       usb dead after resume
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    freebsd-bugs
>State:          closed
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Fri Nov 28 03:10:21 PST 2003
>Closed-Date:    Mon May 24 09:51:12 PDT 2004
>Last-Modified:  Mon May 24 09:51:12 PDT 2004
>Originator:     Lukas Ertl
>Release:        FreeBSD 5.2-BETA i386
>Organization:
Vienna University Computer Center
>Environment:
System: FreeBSD korben 5.2-BETA FreeBSD 5.2-BETA #66: Fri Nov 28 11:22:55 CET 2003 le@korben:/usr/obj/usr/src/sys/KORBEN i386


	
>Description:

On a ThinkPad T40, all USB ports are dead after resuming from ACPI
S3 suspend.

USB ports are probed like this:

uhci0: <Intel 82801DB (ICH4) USB controller USB-A> port 0x1800-0x181f irq 3 at device 29.0 on pci0
usb0: <Intel 82801DB (ICH4) USB controller USB-A> on uhci0
usb0: USB revision 1.0
uhub0: Intel UHCI root hub, class 9/0, rev 1.00/1.00, addr 1
uhub0: 2 ports with 2 removable, self powered
uhci1: <Intel 82801DB (ICH4) USB controller USB-B> port 0x1820-0x183f irq 6 at device 29.1 on pci0
usb1: <Intel 82801DB (ICH4) USB controller USB-B> on uhci1
usb1: USB revision 1.0
uhub1: Intel UHCI root hub, class 9/0, rev 1.00/1.00, addr 1
uhub1: 2 ports with 2 removable, self powered
uhci2: <Intel 82801DB (ICH4) USB controller USB-C> port 0x1840-0x185f irq 5 at device 29.2 on pci0
usb2: <Intel 82801DB (ICH4) USB controller USB-C> on uhci2
usb2: USB revision 1.0
uhub2: Intel UHCI root hub, class 9/0, rev 1.00/1.00, addr 1
uhub2: 2 ports with 2 removable, self powered
ehci0: <EHCI (generic) USB 2.0 controller> mem 0xc0000000-0xc00003ff irq 11 at device 29.7 on pci0
ehci_pci_attach: companion usb0
ehci_pci_attach: companion usb1
ehci_pci_attach: companion usb2
usb3: EHCI version 1.0
usb3: companion controllers, 2 ports each: usb0 usb1 usb2
usb3: <EHCI (generic) USB 2.0 controller> on ehci0
usb3: USB revision 2.0
uhub3: (0x8086) EHCI root hub, class 9/0, rev 2.00/1.00, addr 1
uhub3: 6 ports with 6 removable, self powered

When resuming, I get these errors:

usb0: cannot start
usb1: cannot start
usb2: cannot start
usb2: host system error
usb2: host controller process error
usb2: host controller halted
uhub0: port 1 reset failed
uhub0: illegal enable change, port 2
uhub1: port 1 reset failed
uhub1: illegal enable change, port 2
uhub2: port 1 reset failed
uhub0: port 2 reset failed
uhub0: illegal enable change, port 1
uhub1: port 2 reset failed
uhub1: illegal enable change, port 1
uhub0: port 1 reset failed
uhub0: illegal enable change, port 2
uhub1: port 1 reset failed
uhub1: illegal enable change, port 2
uhub0: port 2 reset failed
uhub0: illegal enable change, port 1
uhub1: port 2 reset failed
uhub1: illegal enable change, port 1
uhub0: port 1 reset failed
uhub0: illegal enable change, port 2
uhub1: port 1 reset failed
uhub1: illegal enable change, port 2

(These last messages loop forever...).

It might be DSDT related, the ASL file I use can be found at 
<http://mailbox.univie.ac.at/~le/thinkpadt40/t40.asl>.

>How-To-Repeat:

Enter S3 state on a ThinkPad T40 and resume again.

>Fix:

	


>Release-Note:
>Audit-Trail:

From: Lukas Ertl <l.ertl@univie.ac.at>
To: FreeBSD-gnats-submit@FreeBSD.org, freebsd-bugs@FreeBSD.org,
	current@FreeBSD.org
Cc:  
Subject: Re: kern/59747: usb dead after resume
Date: Sat, 6 Dec 2003 02:05:25 +0100 (CET)

 >
 > >Category:       kern
 > >Responsible:    freebsd-bugs
 > >Synopsis:       usb dead after resume
 > >Arrival-Date:   Fri Nov 28 03:10:21 PST 2003
 
 This is probably related: I'm now able to trigger a reproducable panic
 when having USB support compiled as a module and going through these
 steps:
 
 *) boot up
 *) suspend/resume
 *) kldload usb
 
 After a few seconds, I drop into ddb, at usb_softschedintr+0xf.
 
 This is the backtrace from kgdb:
 
 Script started on Fri Dec  5 23:55:04 2003
 GNU gdb 5.2.1 (FreeBSD)
 Copyright 2002 Free Software Foundation, Inc.
 GDB is free software, covered by the GNU General Public License, and you ar=
 e
 welcome to change it and/or distribute copies of it under certain condition=
 s.
 Type "show copying" to see the conditions.
 There is absolutely no warranty for GDB.  Type "show warranty" for details.
 This GDB was configured as "i386-undermydesk-freebsd"...
 panic messages:
 ---
 Fatal trap 12: page fault while in kernel mode
 fault virtual address=09=3D 0x4
 fault code=09=09=3D supervisor read, page not present
 instruction pointer=09=3D 0x8:0xc639025f
 stack pointer=09        =3D 0x10:0xd77bbcbc
 frame pointer=09        =3D 0x10:0xd77bbcc0
 code segment=09=09=3D base 0x0, limit 0xfffff, type 0x1b
 =09=09=09=3D DPL 0, pres 1, def32 1, gran 1
 processor eflags=09=3D interrupt enabled, resume, IOPL =3D 0
 current process=09=09=3D 22 (irq11: cbb0 cbb1+++)
 Dumping 511 MB
  16 32 48 64 80 96 112 128 144 160 176 192 208 224 240 256 272 288 304 320 =
 336 352 368 384 400 416 432 448 464 480 496
 ---
 Reading symbols from /usr/obj/usr/src/sys/KORBEN/modules/usr/src/sys/module=
 s/acpi/acpi.ko.debug...done.
 Loaded symbols for /usr/obj/usr/src/sys/KORBEN/modules/usr/src/sys/modules/=
 acpi/acpi.ko.debug
 Reading symbols from /usr/obj/usr/src/sys/KORBEN/modules/usr/src/sys/module=
 s/linux/linux.ko.debug...done.
 Loaded symbols for /usr/obj/usr/src/sys/KORBEN/modules/usr/src/sys/modules/=
 linux/linux.ko.debug
 Reading symbols from /usr/obj/usr/src/sys/KORBEN/modules/usr/src/sys/module=
 s/usb/usb.ko.debug...done.
 Loaded symbols for /usr/obj/usr/src/sys/KORBEN/modules/usr/src/sys/modules/=
 usb/usb.ko.debug
 #0  doadump () at /usr/src/sys/kern/kern_shutdown.c:240
 240=09=09dumping++;
 (kgdb) l *usb_schedsoftintr+0xf
 0xc639025f is in usb_schedsoftintr (/usr/src/sys/dev/usb/usb.c:840).
 835=09=09=09=09callout_reset(&bus->softi, 0, bus->methods->soft_intr,
 836=09=09=09=09    bus);
 837=09#endif /* __HAVE_GENERIC_SOFT_INTERRUPTS */
 838=09=09}
 839=09#else
 840=09       bus->methods->soft_intr(bus);
 841=09#endif /* USB_USE_SOFTINTR */
 842=09}
 843
 844=09#if defined(__NetBSD__) || defined(__OpenBSD__)
 (kgdb) where
 #0  doadump () at /usr/src/sys/kern/kern_shutdown.c:240
 #1  0xc044bf95 in db_fncall (dummy1=3D0, dummy2=3D0, dummy3=3D0,
     dummy4=3D0xd77bbac4 "=A0At=C0\f") at /usr/src/sys/ddb/db_command.c:548
 #2  0xc044bce2 in db_command (last_cmdp=3D0xc0743840, cmd_table=3D0x0,
     aux_cmd_tablep=3D0xc06f9f70, aux_cmd_tablep_end=3D0xc06f9f74)
     at /usr/src/sys/ddb/db_command.c:346
 #3  0xc044be25 in db_command_loop () at /usr/src/sys/ddb/db_command.c:472
 #4  0xc044ee45 in db_trap (type=3D12, code=3D0) at /usr/src/sys/ddb/db_trap=
 =2Ec:73
 #5  0xc0694bac in kdb_trap (type=3D12, code=3D0, regs=3D0xd77bbc7c)
     at /usr/src/sys/i386/i386/db_interface.c:171
 #6  0xc06a5b66 in trap_fatal (frame=3D0xd77bbc7c, eva=3D0)
     at /usr/src/sys/i386/i386/trap.c:816
 #7  0xc06a5832 in trap_pfault (frame=3D0xd77bbc7c, usermode=3D0, eva=3D4)
     at /usr/src/sys/i386/i386/trap.c:735
 #8  0xc06a538d in trap (frame=3D
       {tf_fs =3D -1043267560, tf_es =3D -1043202032, tf_ds =3D 16, tf_edi =
 =3D 31, tf_esi =3D -988827648, tf_ebp =3D -679756608, tf_isp =3D -679756632=
 , tf_ebx =3D 63, tf_edx =3D 0, tf_ecx =3D -1056882688, tf_eax =3D -98882764=
 8, tf_trapno =3D 12, tf_err =3D 0, tf_eip =3D -969342369, tf_cs =3D 8, tf_e=
 flags =3D 66194, tf_esp =3D -988827648, tf_ss =3D -679756580}) at /usr/src/=
 sys/i386/i386/trap.c:420
 #9  0xc0696558 in calltrap () at {standard input}:94
 #10 0xc6395a32 in uhci_intr1 (sc=3D0xc50fb000)
     at /usr/src/sys/dev/usb/uhci.c:1257
 #11 0xc639587a in uhci_intr (arg=3D0xc50fb000)
     at /usr/src/sys/dev/usb/uhci.c:1172
 #12 0xc0526448 in ithread_loop (arg=3D0xc1d1a800)
     at /usr/src/sys/kern/kern_intr.c:544
 #13 0xc05250c0 in fork_exit (callout=3D0xc0526270 <ithread_loop>, arg=3D0x0=
 ,
     frame=3D0x0) at /usr/src/sys/kern/kern_fork.c:793
 (kgdb) fr 10
 #10 0xc6395a32 in uhci_intr1 (sc=3D0xc50fb000)
     at /usr/src/sys/dev/usb/uhci.c:1257
 1257=09=09usb_schedsoftintr(&sc->sc_bus);
 (kgdb) p sc
 $1 =3D (uhci_softc_t *) 0xc50fb000
 (kgdb) p sc->sc_bus
 $2 =3D {bdev =3D 0xc4d1eb00, methods =3D 0x0, pipe_size =3D 0, root_hub =3D=
  0x0,
   devices =3D {0x0 <repeats 128 times>}, needs_explore =3D 0 '\0',
   use_polling =3D 0 '\0', usbctl =3D 0x0, stats =3D {uds_requests =3D {0, 0=
 , 0, 0}},
   intr_context =3D 0, no_intrs =3D 1, usbrev =3D 2, dmatag =3D 0x0}
 (kgdb) p *sc
 $3 =3D {sc_bus =3D {bdev =3D 0xc4d1eb00, methods =3D 0x0, pipe_size =3D 0,
     root_hub =3D 0x0, devices =3D {0x0 <repeats 128 times>},
     needs_explore =3D 0 '\0', use_polling =3D 0 '\0', usbctl =3D 0x0, stats=
  =3D {
       uds_requests =3D {0, 0, 0, 0}}, intr_context =3D 0, no_intrs =3D 1,
     usbrev =3D 2, dmatag =3D 0x0}, iot =3D 0, ioh =3D 6176, sc_size =3D 0,
   ih =3D 0xc4d72680, io_res =3D 0xc4e8ff40, irq_res =3D 0xc4d169c0,
   sc_pframes =3D 0x0, sc_dma =3D {block =3D 0x0, offs =3D 0, len =3D 0}, sc=
 _vframes =3D {{
       htd =3D 0x0, etd =3D 0x0, hqh =3D 0x0, eqh =3D 0x0,
       bandwidth =3D 0} <repeats 128 times>}, sc_lctl_start =3D 0x0,
   sc_lctl_end =3D 0x0, sc_hctl_start =3D 0x0, sc_hctl_end =3D 0x0,
   sc_bulk_start =3D 0x0, sc_bulk_end =3D 0x0, sc_last_qh =3D 0x0, sc_loops =
 =3D 0,
   sc_freetds =3D 0x0, sc_freeqhs =3D 0x0, sc_free_xfers =3D {stqh_first =3D=
  0x0,
     stqh_last =3D 0x0}, sc_addr =3D 0 '\0', sc_conf =3D 0 '\0',
   sc_saved_sof =3D 0 '\0', sc_saved_frnum =3D 0, sc_isreset =3D 0 '\0',
   sc_suspend =3D 0 '\0', sc_dying =3D 1 '\001', sc_intrhead =3D {lh_first =
 =3D 0x0},
   sc_ival =3D 0, sc_intr_xfer =3D 0x0, sc_poll_handle =3D {c_links =3D {sle=
  =3D {
         sle_next =3D 0x0}, tqe =3D {tqe_next =3D 0x0, tqe_prev =3D 0x0}}, c=
 _time =3D 0,
     c_arg =3D 0x0, c_func =3D 0, c_flags =3D 0},
   sc_vendor =3D "Intel\0\0\0\0\0\0\0\0\0\0", sc_id_vendor =3D 0, sc_child =
 =3D 0x0}
 (kgdb) quit
 
 Script done on Fri Dec  5 23:56:06 2003
 
 --=20
 Lukas Ertl                             eMail: l.ertl@univie.ac.at
 UNIX Systemadministrator               Tel.:  (+43 1) 4277-14073
 Vienna University Computer Center      Fax.:  (+43 1) 4277-9140
 University of Vienna                   http://mailbox.univie.ac.at/~le/
State-Changed-From-To: open->closed 
State-Changed-By: le 
State-Changed-When: Mon May 24 09:50:05 PDT 2004 
State-Changed-Why:  
Close one of my own PRs.  It is known that USB doesn't cope well with 
suspend/resume, there's no need to have this PR lying around. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=59747 
>Unformatted:
