DragonFly bugs List (threaded) for 2007-01
DragonFly BSD
DragonFly bugs List (threaded) for 2007-01
[Date Prev][Date Next]  [Thread Prev][Thread Next]  [Date Index][Thread Index]

Re: [issue531] ACPI bugs on Intel motherboards


From: YONETANI Tomokazu <qhwt+dfly@xxxxxxxxxx>
Date: Tue, 23 Jan 2007 18:22:59 +0900

On Mon, Jan 22, 2007 at 10:59:06PM -0000, eugene wrote:
> Here is the output of "trace":
> lwkt_sendmsg(10,c810bee0,c18af23c,ccbfccc4) at lwkt_sendmsg+0x4a
               ~~
> AcpiOsExecute(2,c0736ab7,c18af23c,102f,0) at AcpiOsExecute+0x6f
> AcpiEvGpeDispatch(c18af23,1d,c1706b15,3,0) at AcpiEvGpeDispatch+0x11f
> AcpiEvGpeDetect(c15a1940,c0614550,ccbfcd1c,c0758a25,c15a1940) at
> AcpiEvGpeDetect+0xd7
> AcpiEvSciXruptHandler(c15a1940,0,ccbfcd84,c02b21d9,c15a1940) at
> AcpiEvSciXruptHandler+0x19
> InterruptWrapper(c15a1940,0,0,0,1) at InterruptWrapper+0x2b
> ithread_handler(9,0,0,0,0) at ithread_handler+0x9d
> lwkt_exit() at lwkt_exit
> db>

Looks to me like acpi_task_thread is used (via AcpiOsExecute())
before the msgport is initialized, but it shouldn't happen since
most part of acpi_attach() is protected by critical section, which
suspends the interrupt.  This is just a shot in the dark, but I wonder
what happens if you move up the call to acpi_task_thread_init()
before the call to AcpiEnableSubsystem(), which installs the interrupt
handler called above (patch attached)?

Cheers.
Index: acpi.c
===================================================================
RCS file: /home/source/dragonfly/cvs/src/sys/dev/acpica5/acpi.c,v
retrieving revision 1.28
diff -u -p -r1.28 acpi.c
--- acpi.c	17 Jan 2007 17:31:19 -0000	1.28
+++ acpi.c	22 Jan 2007 23:56:08 -0000
@@ -429,6 +429,9 @@ acpi_attach(device_t dev)
     sc->acpi_dev = dev;
     callout_init(&sc->acpi_sleep_timer);
 
+    if ((error = acpi_task_thread_init()))
+	goto out;
+
     /*
      * Set the globals from our tunables.  This is needed because ACPI-CA
      * uses UINT8 for some values and we have no tunable_byte.
@@ -658,9 +661,6 @@ acpi_attach(device_t dev)
     }
 #endif
 
-    if ((error = acpi_task_thread_init()))
-	goto out;
-
     if ((error = acpi_machdep_init(dev)))
 	goto out;
 


[Date Prev][Date Next]  [Thread Prev][Thread Next]  [Date Index][Thread Index]