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-stable
mailing list