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);
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to