NetBSD-Bugs archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
kern/39832: sony vaio vgn t250p does not resume
>Number: 39832
>Category: kern
>Synopsis: sony vaio vgn t250p does not resume
>Confidential: no
>Severity: serious
>Priority: medium
>Responsible: kern-bug-people
>State: open
>Class: sw-bug
>Submitter-Id: net
>Arrival-Date: Thu Oct 30 03:05:00 +0000 2008
>Originator: Christos Zoulas
>Release: NetBSD 4.99.73
>Organization:
Belt and Suspenders, Inc.
>Environment:
System: NetBSD shiny.astron.com 4.99.73 NetBSD 4.99.73 (SHINY) #51: Wed Oct 29
22:15:44 EDT 2008
christos%shiny.astron.com@localhost:/usr/src/sys/arch/i386/compile/SHINY i386
Architecture: i386
Machine: i386
>Description:
My vaio suspends but when it resumes it panics with:
cpu_switchto: switching above IPL_SCHED (%d)
>How-To-Repeat:
suspend and resume.
>Fix:
The following patch from jmcneill fixes the problem.
Index: acpi_ec.c
===================================================================
RCS file: /cvsroot/src/sys/dev/acpi/acpi_ec.c,v
retrieving revision 1.52
diff -u -p -r1.52 acpi_ec.c
--- acpi_ec.c 3 Jun 2008 15:12:39 -0000 1.52
+++ acpi_ec.c 30 Oct 2008 00:37:26 -0000
@@ -150,6 +150,7 @@ static void acpiec_common_attach(device_
static bool acpiec_resume(device_t PMF_FN_PROTO);
static bool acpiec_suspend(device_t PMF_FN_PROTO);
+static bool acpiec_shutdown(device_t, int);
static bool acpiec_parse_gpe_package(device_t, ACPI_HANDLE,
ACPI_HANDLE *, uint8_t *);
@@ -170,7 +171,7 @@ CFATTACH_DECL_NEW(acpiecdt, sizeof(struc
acpiecdt_match, acpiecdt_attach, NULL, NULL);
static device_t ec_singleton = NULL;
-static bool acpiec_cold = false;
+bool acpiec_cold = false;
static bool
acpiecdt_find(device_t parent, ACPI_HANDLE *ec_handle,
@@ -380,7 +381,8 @@ acpiec_common_attach(device_t parent, de
ec_singleton = self;
- if (!pmf_device_register(self, acpiec_suspend, acpiec_resume))
+ if (!pmf_device_register1(self,
+ acpiec_suspend, acpiec_resume, acpiec_shutdown))
aprint_error_dev(self, "couldn't establish power handler\n");
return;
@@ -412,6 +414,14 @@ acpiec_resume(device_t dv PMF_FN_ARGS)
}
static bool
+acpiec_shutdown(device_t dv, int how)
+{
+ acpiec_cold = true;
+
+ return true;
+}
+
+static bool
acpiec_parse_gpe_package(device_t self, ACPI_HANDLE ec_handle,
ACPI_HANDLE *gpe_handle, uint8_t *gpebit)
{
Index: acpica/OsdSchedule.c
===================================================================
RCS file: /cvsroot/src/sys/dev/acpi/acpica/OsdSchedule.c,v
retrieving revision 1.8
diff -u -p -r1.8 OsdSchedule.c
--- acpica/OsdSchedule.c 31 May 2008 21:38:02 -0000 1.8
+++ acpica/OsdSchedule.c 30 Oct 2008 00:37:26 -0000
@@ -61,6 +61,8 @@ __KERNEL_RCSID(0, "$NetBSD: OsdSchedule.
#define _COMPONENT ACPI_OS_SERVICES
ACPI_MODULE_NAME("SCHEDULE")
+extern bool acpiec_cold;
+
static kcondvar_t acpi_osd_sleep_cv;
static kmutex_t acpi_osd_sleep_mtx;
@@ -163,7 +165,7 @@ AcpiOsSleep(ACPI_INTEGER Milliseconds)
{
ACPI_FUNCTION_TRACE(__func__);
- if (cold)
+ if (cold || acpiec_cold)
DELAY(Milliseconds * 1000);
else {
mutex_enter(&acpi_osd_sleep_mtx);
Index: acpica/OsdSynch.c
===================================================================
RCS file: /cvsroot/src/sys/dev/acpi/acpica/OsdSynch.c,v
retrieving revision 1.10
diff -u -p -r1.10 OsdSynch.c
--- acpica/OsdSynch.c 15 Dec 2007 00:39:25 -0000 1.10
+++ acpica/OsdSynch.c 30 Oct 2008 00:37:26 -0000
@@ -85,6 +85,8 @@ MALLOC_DECLARE(M_ACPI);
#define _COMPONENT ACPI_OS_SERVICES
ACPI_MODULE_NAME("SYNCH")
+extern bool acpiec_cold;
+
/*
* Simple counting semaphore implemented using a mutex. This is
* subsequently used in the OSI code to implement a mutex. Go figure.
@@ -181,7 +183,7 @@ AcpiOsWaitSemaphore(ACPI_SEMAPHORE Handl
if (as == NULL)
return_ACPI_STATUS(AE_BAD_PARAMETER);
- if (cold)
+ if (cold || acpiec_cold)
return_ACPI_STATUS(AE_OK);
/* A timeout of 0xFFFF means "forever". */
Home |
Main Index |
Thread Index |
Old Index