svn commit: r335656 - in stable/11/sys: dev/acpica kern sys
Andriy Gapon
avg at FreeBSD.org
Tue Jun 26 08:31:09 UTC 2018
Author: avg
Date: Tue Jun 26 08:31:08 2018
New Revision: 335656
URL: https://svnweb.freebsd.org/changeset/base/335656
Log:
MFC r333994: stop and restart kernel event timers in the suspend / resume cycle
Modified:
stable/11/sys/dev/acpica/acpi.c
stable/11/sys/kern/kern_clocksource.c
stable/11/sys/sys/systm.h
Directory Properties:
stable/11/ (props changed)
Modified: stable/11/sys/dev/acpica/acpi.c
==============================================================================
--- stable/11/sys/dev/acpica/acpi.c Tue Jun 26 06:18:59 2018 (r335655)
+++ stable/11/sys/dev/acpica/acpi.c Tue Jun 26 08:31:08 2018 (r335656)
@@ -2909,6 +2909,7 @@ acpi_EnterSleepState(struct acpi_softc *sc, int state)
if (sc->acpi_sleep_delay > 0)
DELAY(sc->acpi_sleep_delay * 1000000);
+ suspendclock();
intr = intr_disable();
if (state != ACPI_STATE_S1) {
sleep_result = acpi_sleep_machdep(sc, state);
@@ -2979,6 +2980,8 @@ acpi_EnterSleepState(struct acpi_softc *sc, int state)
* process. This handles both the error and success cases.
*/
backout:
+ if (slp_state >= ACPI_SS_SLP_PREP)
+ resumeclock();
if (slp_state >= ACPI_SS_GPE_SET) {
acpi_wake_prep_walk(state);
sc->acpi_sstate = ACPI_STATE_S0;
Modified: stable/11/sys/kern/kern_clocksource.c
==============================================================================
--- stable/11/sys/kern/kern_clocksource.c Tue Jun 26 06:18:59 2018 (r335655)
+++ stable/11/sys/kern/kern_clocksource.c Tue Jun 26 08:31:08 2018 (r335656)
@@ -692,6 +692,22 @@ cpu_initclocks_ap(void)
spinlock_exit();
}
+void
+suspendclock(void)
+{
+ ET_LOCK();
+ configtimer(0);
+ ET_UNLOCK();
+}
+
+void
+resumeclock(void)
+{
+ ET_LOCK();
+ configtimer(1);
+ ET_UNLOCK();
+}
+
/*
* Switch to profiling clock rates.
*/
Modified: stable/11/sys/sys/systm.h
==============================================================================
--- stable/11/sys/sys/systm.h Tue Jun 26 06:18:59 2018 (r335655)
+++ stable/11/sys/sys/systm.h Tue Jun 26 08:31:08 2018 (r335656)
@@ -318,6 +318,8 @@ void startprofclock(struct proc *);
void stopprofclock(struct proc *);
void cpu_startprofclock(void);
void cpu_stopprofclock(void);
+void suspendclock(void);
+void resumeclock(void);
sbintime_t cpu_idleclock(void);
void cpu_activeclock(void);
void cpu_new_callout(int cpu, sbintime_t bt, sbintime_t bt_opt);
More information about the svn-src-all
mailing list