Module Name:    src
Committed By:   jruoho
Date:           Fri Jun  3 09:15:02 UTC 2011

Modified Files:
        src/sys/dev/acpi: acpi.c

Log Message:
Flush CPU caches before entering S1, as noted in the specifications.


To generate a diff of this commit:
cvs rdiff -u -r1.241 -r1.242 src/sys/dev/acpi/acpi.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/dev/acpi/acpi.c
diff -u src/sys/dev/acpi/acpi.c:1.241 src/sys/dev/acpi/acpi.c:1.242
--- src/sys/dev/acpi/acpi.c:1.241	Tue May 31 14:27:44 2011
+++ src/sys/dev/acpi/acpi.c	Fri Jun  3 09:15:02 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: acpi.c,v 1.241 2011/05/31 14:27:44 jruoho Exp $	*/
+/*	$NetBSD: acpi.c,v 1.242 2011/06/03 09:15:02 jruoho Exp $	*/
 
 /*-
  * Copyright (c) 2003, 2007 The NetBSD Foundation, Inc.
@@ -100,7 +100,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: acpi.c,v 1.241 2011/05/31 14:27:44 jruoho Exp $");
+__KERNEL_RCSID(0, "$NetBSD: acpi.c,v 1.242 2011/06/03 09:15:02 jruoho Exp $");
 
 #include "opt_acpi.h"
 #include "opt_pcifixup.h"
@@ -1301,12 +1301,17 @@
 		if (state == ACPI_STATE_S1) {
 
 			/*
-			 * Enter the state. Note that interrupts must
-			 * be off before calling AcpiEnterSleepState().
-			 * Conversely, AcpiLeaveSleepState() should
-			 * always be called with interrupts enabled.
+			 * Before the transition to S1, CPU caches
+			 * must be flushed (see ACPI 4.0, 7.3.4.2).
+			 *
+			 * Note that interrupts must be off before
+			 * calling AcpiEnterSleepState(). Conversely,
+			 * AcpiLeaveSleepState() should always be
+			 * called with interrupts enabled.
 			 */
 			acpi_md_OsDisableInterrupt();
+
+			ACPI_FLUSH_CPU_CACHE();
 			rv = AcpiEnterSleepState(state);
 
 			if (ACPI_FAILURE(rv))

Reply via email to