svn commit: r335554 - in stable/11/sys: dev/acpica dev/acpica/Osd x86/acpica

Andriy Gapon avg at FreeBSD.org
Fri Jun 22 10:39:24 UTC 2018


Author: avg
Date: Fri Jun 22 10:39:22 2018
New Revision: 335554
URL: https://svnweb.freebsd.org/changeset/base/335554

Log:
  MFC r332918, r333222: go deeper for ACPI suspend bounce test
  
  debug.acpi.suspend_bounce sysctl now allows a deeper dive into the sleep
  abyss.  The system will execute the suspend sequence up to the call to
  AcpiEnterSleepState().  That includes saving processor contexts and
  parking APs.  Then, instead of actually entering the sleep state, the
  BSP will call resumectx() to emulate the wakeup.  The APs should get
  restarted by the sequence of Init and Startup IPIs that BSP sends to
  them.
  
  AcpiOsEnterSleep() is used to implement this feature.
  
  Joint work with jkim.

Modified:
  stable/11/sys/dev/acpica/Osd/OsdHardware.c
  stable/11/sys/dev/acpica/acpi.c
  stable/11/sys/x86/acpica/acpi_wakeup.c
Directory Properties:
  stable/11/   (props changed)

Modified: stable/11/sys/dev/acpica/Osd/OsdHardware.c
==============================================================================
--- stable/11/sys/dev/acpica/Osd/OsdHardware.c	Fri Jun 22 10:23:32 2018	(r335553)
+++ stable/11/sys/dev/acpica/Osd/OsdHardware.c	Fri Jun 22 10:39:22 2018	(r335554)
@@ -37,9 +37,15 @@ __FBSDID("$FreeBSD$");
 #include <machine/iodev.h>
 #include <machine/pci_cfgreg.h>
 
+extern int	acpi_susp_bounce;
+
 ACPI_STATUS
 AcpiOsEnterSleep(UINT8 SleepState, UINT32 RegaValue, UINT32 RegbValue)
 {
+
+	/* If testing device suspend only, back out of everything here. */
+	if (acpi_susp_bounce)
+		return (AE_CTRL_TERMINATE);
 
 	return (AE_OK);
 }

Modified: stable/11/sys/dev/acpica/acpi.c
==============================================================================
--- stable/11/sys/dev/acpica/acpi.c	Fri Jun 22 10:23:32 2018	(r335553)
+++ stable/11/sys/dev/acpica/acpi.c	Fri Jun 22 10:39:22 2018	(r335554)
@@ -291,7 +291,7 @@ SYSCTL_INT(_debug_acpi, OID_AUTO, reset_clock, CTLFLAG
 /* Allow users to override quirks. */
 TUNABLE_INT("debug.acpi.quirks", &acpi_quirks);
 
-static int acpi_susp_bounce;
+int acpi_susp_bounce;
 SYSCTL_INT(_debug_acpi, OID_AUTO, suspend_bounce, CTLFLAG_RW,
     &acpi_susp_bounce, 0, "Don't actually suspend, just test devices.");
 
@@ -2897,10 +2897,6 @@ acpi_EnterSleepState(struct acpi_softc *sc, int state)
 	goto backout;
     }
     slp_state = ACPI_SS_DEV_SUSPEND;
-
-    /* If testing device suspend only, back out of everything here. */
-    if (acpi_susp_bounce)
-	goto backout;
 
     status = AcpiEnterSleepStatePrep(state);
     if (ACPI_FAILURE(status)) {

Modified: stable/11/sys/x86/acpica/acpi_wakeup.c
==============================================================================
--- stable/11/sys/x86/acpica/acpi_wakeup.c	Fri Jun 22 10:23:32 2018	(r335553)
+++ stable/11/sys/x86/acpica/acpi_wakeup.c	Fri Jun 22 10:39:22 2018	(r335554)
@@ -77,6 +77,7 @@ CTASSERT(sizeof(wakecode) < PAGE_SIZE - 1024);
 
 extern int		acpi_resume_beep;
 extern int		acpi_reset_video;
+extern int		acpi_susp_bounce;
 
 #ifdef SMP
 extern struct susppcb	**susppcbs;
@@ -257,6 +258,9 @@ acpi_sleep_machdep(struct acpi_softc *sc, int state)
 			    AcpiFormatException(status));
 			return (0);	/* couldn't sleep */
 		}
+
+		if (acpi_susp_bounce)
+			resumectx(pcb);
 
 		for (;;)
 			ia32_pause();


More information about the svn-src-all mailing list