From jesse@chortos.wingnet.net Mon Dec 1 10:34:22 2003 Return-Path: Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 6577516A4CE for ; Mon, 1 Dec 2003 10:34:22 -0800 (PST) Received: from chortos.wingnet.net (chortos.wingnet.net [206.30.57.3]) by mx1.FreeBSD.org (Postfix) with SMTP id 113C443FDF for ; Mon, 1 Dec 2003 10:34:16 -0800 (PST) (envelope-from jesse@chortos.wingnet.net) Received: (qmail 17884 invoked by uid 1001); 1 Dec 2003 18:34:14 -0000 Message-Id: <20031201183414.17883.qmail@chortos.wingnet.net> Date: 1 Dec 2003 18:34:14 -0000 From: Jesse D.Guardiani Reply-To: Jesse D.Guardiani To: FreeBSD-gnats-submit@freebsd.org Cc: Subject: APM suspend/resume broken with FreeBSD 5.2-BETA on IBM Thinkpad A30p X-Send-Pr-Version: 3.113 X-GNATS-Notify: >Number: 59876 >Category: misc >Synopsis: APM suspend/resume broken with FreeBSD 5.2-BETA on IBM Thinkpad A30p >Confidential: no >Severity: critical >Priority: high >Responsible: freebsd-bugs >State: closed >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Mon Dec 01 10:40:16 PST 2003 >Closed-Date: Mon Mar 29 09:05:01 PST 2004 >Last-Modified: Mon Mar 29 09:05:01 PST 2004 >Originator: Jesse D. Guardiani >Release: FreeBSD 5.2-BETA i386 >Organization: WingNET Internet Services >Environment: System: FreeBSD trevarthan.int.wingnet.net 5.2-BETA FreeBSD 5.2-BETA #3: Sun Nov 30 14:21:53 EST 2003 jesse@trevarthan.int.wingnet.net:/usr/src/sys/i386/compile/TREVARTHAN i386 >Description: I enable the software watchdog, then suspend the machine and capture output on serial console: Lock GEOM topology not exclusively locked @ ../../. ./geom/geom_subr.c:261 acd0: WARNING - removed from configuration sio4: detached The machine is fully suspended at this point. Now I resume the machine: pci_cfgintr: 0:29 INTA BIOS irq 9 pci_cfgintr: 0:29 INTB BIOS irq 11 pci_cfgintr: 0:29 INTC BIOS irq 9 pci_cfgintr: 0:31 INTB BIOS irq 5 pci_cfgintr: 0:31 INTB BIOS irq 5 pci_cfgintr: 0:31 INTB BIOS irq 5 pci_cfgintr: 1:0 INTA BIOS irq 9 pci_cfgintr: 2:0 INTA BIOS irq 9 pci_cfgintr: 2:0 INTB BIOS irq 5 pci_cfgintr: 2:0 INTC BIOS irq 9 pci_cfgintr: 2:2 INTA BIOS irq 9 pci_cfgintr: 2:8 INTA BIOS irq 10 ata0: resetting devices .. Normally the machine would lock at this point with the hard disk light on. The only way to fix it is to power down and back on. However, since I have enabled the software watchdog, I simply wait a few seconds and I receive this: interrupt total irq0: clk 18254 irq1: atkbd0 9 irq3: sio1 6 irq4: sio0 882 irq6: fdc0 1 irq9: cbb0 wi0++ 37 irq13: npx0 1 irq14: ata0 3524 irq15: ata1 32 Total 22746 watchdog_fire(c073ba80,2,c06d9616,f5,d2a0bca4) at watchdog_fire+0xb5 hardclock(d2a0bca4,0,c06f57a0,bf,c3a6bd00) at hardclock+0x10a clkintr(d2a0bca4,d2a0bc70,c0526125,c07134e0,0) at clkintr+0xa9 intr_execute_handlers(c072c880,d2a0bca4,c07134e0,2bc530c4,c19d2c5c) at intr_exec ute_handlers+0xb8 atpic_handle_intr(0) at atpic_handle_intr+0xbf Xatpic_intr0() at Xatpic_intr0+0x1e --- interrupt, eip = 0xc06925b5, esp = 0xd2a0bce8, ebp = 0xd2a0bce8 --- cpu_idle_default(d2a0bd10,c050b55c,c0739bc0,2,c06da083) at cpu_idle_default+0x5 cpu_idle(c0739bc0,2,c06da083,53,c050b520) at cpu_idle+0x1f idle_proc(0,d2a0bd48,c06d9f44,311,0) at idle_proc+0x3c fork_exit(c050b520,0,d2a0bd48) at fork_exit+0xb4 fork_trampoline() at fork_trampoline+0x8 --- trap 0x1, eip = 0, esp = 0xd2a0bd7c, ebp = 0 --- Debugger("watchdog timeout") Stopped at Debugger+0x54: xchgl %ebx,in_Debugger.0 db> I hope the above information is helpful. I'm not a kernel programmer. I AM familiar with C, but I'm not very good with debuggers. Please let me know if you need additional info. Thanks! >How-To-Repeat: Step 1: Fn + F4 to suspend machine Step 2: Fn to resume machine >Fix: unknown. >Release-Note: >Audit-Trail: From: Jesse Guardiani To: freebsd-gnats-submit@FreeBSD.org Cc: Subject: Re: misc/59876: APM suspend/resume broken with FreeBSD 5.2-BETA on IBM Thinkpad A30p Date: Tue, 9 Dec 2003 09:55:59 -0500 Had a chance to repeat this proceedure last night and panic the kernel at the DDB prompt. Here's the backtrace from my core dump: #0 doadump () at ../../../kern/kern_shutdown.c:240 #1 0xc051fd2c in boot (howto=260) at ../../../kern/kern_shutdown.c:372 #2 0xc05200b7 in panic () at ../../../kern/kern_shutdown.c:550 #3 0xc0527dc5 in mi_switch () at ../../../kern/kern_synch.c:470 #4 0xc051fa18 in boot (howto=256) at ../../../kern/kern_shutdown.c:312 #5 0xc05200b7 in panic () at ../../../kern/kern_shutdown.c:550 #6 0xc044d392 in db_panic () at ../../../ddb/db_command.c:450 #7 0xc044d2f2 in db_command (last_cmdp=0xc07305a0, cmd_table=0x0, aux_cmd_tablep=0xc06fa26c, aux_cmd_tablep_end=0xc06fa270) at ../../../ddb/db_command.c:346 #8 0xc044d435 in db_command_loop () at ../../../ddb/db_command.c:472 #9 0xc0450435 in db_trap (type=3, code=0) at ../../../ddb/db_trap.c:73 #10 0xc068a61c in kdb_trap (type=3, code=0, regs=0xd2a0bb9c) at ../../../i386/i386/db_interface.c:171 #11 0xc069a7c8 in trap (frame= {tf_fs = 24, tf_es = -761266160, tf_ds = 16, tf_edi = 0, tf_esi = 14591, tf_ebp = -761218072, tf_isp = -761218104, tf_ebx = 0, tf_edx = 0, tf_ecx = 32, tf_eax = 29, tf_trapno = 3, tf_err = 0, tf_eip = -1066882860, tf_cs = 8, tf_eflags = 134, tf_esp = -1066453058, tf_ss = -1066559792}) at ../../../i386/i386/trap.c:580 #12 0xc068c018 in calltrap () at {standard input}:94 #13 0xc04fc051 in watchdog_fire () at ../../../kern/kern_clock.c:557 #14 0xc04fba6a in hardclock (frame=0xd2a0bca4) at ../../../kern/kern_clock.c:257 #15 0xc069d8a9 in clkintr (frame=0xd2a0bca4) at ../../../i386/isa/clock.c:193 #16 0xc0690178 in intr_execute_handlers (isrc=0xc072c880, iframe=0xd2a0bca4) at ../../../i386/i386/intr_machdep.c:192 #17 0xc069d3bf in atpic_handle_intr (iframe= {if_vec = 0, if_fs = -1066598376, if_es = 16, if_ds = 1687683088, if_edi = 0, if_esi = -1046550976, if_ebp = -761217816, if_ebx = -1046553508, if_edx = -1066156608, if_ecx = 2, if_eax = 0, if_eip = -1066850891, if_cs = 8, if_eflags = 582, if_esp = -761217808, if_ss = -1066850849}) at ../../../i386/isa/atpic.c:368 #18 0xc069d51e in Xatpic_intr0 () at {standard input}:32 #19 0xc06925df in cpu_idle () at ../../../i386/i386/machdep.c:1074 #20 0xc050b55c in idle_proc (dummy=0x0) at ../../../kern/kern_idle.c:86 #21 0xc050b294 in fork_exit (callout=0xc050b520 , arg=0x0, frame=0x0) at ../../../kern/kern_fork.c:793 I can't make heads or tails of the above, so I'm open to suggestions. -- Jesse Guardiani, Systems Administrator WingNET Internet Services, P.O. Box 2605 // Cleveland, TN 37320-2605 423-559-LINK (v) 423-559-5145 (f) http://www.wingnet.net From: Nate Lawson To: Jesse Guardiani Cc: current@freebsd.org Subject: Re: misc/59876 (5.2-BETA APM broken) Date: Tue, 9 Dec 2003 12:08:09 -0800 (PST) The software watchdog trap is working as expected. It correctly generates a trap once the kernel is no longer poking it because interrupts are being lost. The real problem is that interrupts are being lost after resume. It appears that the ata controller is not properly reseting. I am now experiencing this problem also. However, this behavior appeared before the 1203 import and appears to be a regression. I had the same problem back in the summer but it was fixed by a commit by sos@. It worked for a few months and is back to the original behavior (hanging with the drive light on upon resume). Perhaps he can look into this? -Nate From: Jesse Guardiani To: freebsd-gnats-submit@FreeBSD.org Cc: Subject: Re: misc/59876: APM suspend/resume broken with FreeBSD 5.2-BETA on IBM Thinkpad A30p Date: Sun, 18 Jan 2004 22:30:46 -0500 I'd like to note that I've been using `boot -vD` as a temporary workaround to this problem for more than a month now. This is a reliable workaround. The machine will occasionally still crash on resume from suspend once a week or so (I suspend at least twice per day), but this is the exact same behavior I got with 5.1-RELEASE. I've recommended it to a number of people who have emailed me privately and it works for them too. -- Jesse Guardiani, Systems Administrator WingNET Internet Services, P.O. Box 2605 // Cleveland, TN 37320-2605 423-559-LINK (v) 423-559-5145 (f) http://www.wingnet.net From: Serge Semenenko To: freebsd-gnats-submit@FreeBSD.org, jesse@wingnet.net Cc: Subject: Re: misc/59876: APM suspend/resume broken with FreeBSD 5.2-BETA on IBM Thinkpad A30p Date: Wed, 17 Mar 2004 20:44:21 +0200 On my Thinkpad T20 I use followed patch to 5.2-RELEASE : --- ata-all.c.saved Wed Mar 17 00:39:08 2004 +++ ata-all.c Wed Mar 17 17:22:07 2004 @@ -238,11 +238,20 @@ /* reset the HW */ ata_printf(ch, -1, "resetting devices ..\n"); - ATA_FORCELOCK_CH(ch, ATA_CONTROL); - ch->running = NULL; devices = ch->devices; + /* initialize the softc basics */ + ata_generic_hw(ch); + ch->device[MASTER].channel = ch; + ch->device[MASTER].unit = ATA_MASTER; + ch->device[MASTER].mode = ATA_PIO; + ch->device[SLAVE].channel = ch; + ch->device[SLAVE].unit = ATA_SLAVE; + ch->device[SLAVE].mode = ATA_PIO; + ch->state = ATA_IDLE; + /* initialise device(s) on this channel */ + ch->locking(ch, ATA_LF_LOCK); ch->hw.reset(ch); - ATA_UNLOCK_CH(ch); + ch->locking(ch, ATA_LF_UNLOCK); /* detach what left the channel during reset */ if ((misdev = devices & ~ch->devices)) { Serge From: Jesse Guardiani To: freebsd-gnats-submit@FreeBSD.org Cc: Subject: Re: misc/59876: APM suspend/resume broken with FreeBSD 5.2-BETA on IBM Thinkpad A30p Date: Wed, 17 Mar 2004 14:38:47 -0500 I've been running 5.2.1-RELEASE for about a week now. I ran 5.2.1-RC2 for a few weeks before this. Both versions: a.) Do NOT exhibit the "Crash every time on resume unless booted with `boot -vD`" behavior that I experienced under 5.2-RELEASE. b.) DO crash every fourth or fifth resume. This is a regression from 5.1-RELEASE under which my machine used to crash every 8 or 10 resumes. It's also technically a regression from the reliability I got with `boot -vD` under 5.2-RELEASE, but at least 5.2.1-RELEASE boots without that kind of hackery. I suppose this ticket can be closed now. I'm still having problems, but they're much different in nature from the original reason this ticket was created. -- Jesse Guardiani, Systems Administrator WingNET Internet Services, P.O. Box 2605 // Cleveland, TN 37320-2605 423-559-LINK (v) 423-559-5145 (f) http://www.wingnet.net State-Changed-From-To: open->closed State-Changed-By: linimon State-Changed-When: Mon Mar 29 09:04:24 PST 2004 State-Changed-Why: Closed at submitter's request in misfiled followup misc/64318. http://www.freebsd.org/cgi/query-pr.cgi?pr=59876 >Unformatted: