Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 24 Feb 2017 16:11:56 +0000 (UTC)
From:      Konstantin Belousov <kib@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r314211 - in head/sys: dev/acpica kern sys x86/x86
Message-ID:  <201702241611.v1OGBu3B036457@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: kib
Date: Fri Feb 24 16:11:55 2017
New Revision: 314211
URL: https://svnweb.freebsd.org/changeset/base/314211

Log:
  Remove cpu_deepest_sleep variable.
  
  On Core2 and older Intel CPUs, where TSC stops in C2, system does not
  allow C2 entrance if timecounter hardware is TSC.  This is done by
  tc_windup() which tests for TC_FLAGS_C2STOP flag of the new
  timecounter and increases cpu_disable_c2_sleep if flag is set.  Right
  now init_TSC_tc() only sets the flag if cpu_deepest_sleep >= 2, but
  TSC is initialized too early for this variable to be set by
  acpi_cpu.c.
  
  There is no reason to require that ACPI reported C2 and deeper states
  to set TC_FLAGS_C2STOP, so remove cpu_deepest_sleep test from
  init_TSC_tc() condition.  And since this is the only use of the
  variable, remove it at all.
  
  Reported and submitted by:	Jia-Shiun Li <jiashiun@gmail.com>
  Suggested by:	jhb
  MFC after:	2 weeks

Modified:
  head/sys/dev/acpica/acpi_cpu.c
  head/sys/kern/kern_clocksource.c
  head/sys/sys/systm.h
  head/sys/x86/x86/tsc.c

Modified: head/sys/dev/acpica/acpi_cpu.c
==============================================================================
--- head/sys/dev/acpica/acpi_cpu.c	Fri Feb 24 16:02:01 2017	(r314210)
+++ head/sys/dev/acpica/acpi_cpu.c	Fri Feb 24 16:11:55 2017	(r314211)
@@ -703,7 +703,6 @@ acpi_cpu_generic_cx_probe(struct acpi_cp
     sc->cpu_non_c2 = sc->cpu_cx_count;
     sc->cpu_non_c3 = sc->cpu_cx_count;
     sc->cpu_cx_count++;
-    cpu_deepest_sleep = 1;
 
     /* 
      * The spec says P_BLK must be 6 bytes long.  However, some systems
@@ -729,7 +728,6 @@ acpi_cpu_generic_cx_probe(struct acpi_cp
 	    cx_ptr++;
 	    sc->cpu_non_c3 = sc->cpu_cx_count;
 	    sc->cpu_cx_count++;
-	    cpu_deepest_sleep = 2;
 	}
     }
     if (sc->cpu_p_blk_len < 6)
@@ -746,7 +744,6 @@ acpi_cpu_generic_cx_probe(struct acpi_cp
 	    cx_ptr->trans_lat = AcpiGbl_FADT.C3Latency;
 	    cx_ptr++;
 	    sc->cpu_cx_count++;
-	    cpu_deepest_sleep = 3;
 	}
     }
 }
@@ -831,7 +828,6 @@ acpi_cpu_cx_cst(struct acpi_cpu_softc *s
     cx_ptr->type = ACPI_STATE_C0;
     cx_ptr++;
     sc->cpu_cx_count++;
-    cpu_deepest_sleep = 1;
 
     /* Set up all valid states. */
     for (i = 0; i < count; i++) {
@@ -884,8 +880,6 @@ acpi_cpu_cx_cst(struct acpi_cpu_softc *s
 	    continue;
 	case ACPI_STATE_C2:
 	    sc->cpu_non_c3 = sc->cpu_cx_count;
-	    if (cpu_deepest_sleep < 2)
-		    cpu_deepest_sleep = 2;
 	    break;
 	case ACPI_STATE_C3:
 	default:
@@ -894,8 +888,7 @@ acpi_cpu_cx_cst(struct acpi_cpu_softc *s
 				 "acpi_cpu%d: C3[%d] not available.\n",
 				 device_get_unit(sc->cpu_dev), i));
 		continue;
-	    } else
-		cpu_deepest_sleep = 3;
+	    }
 	    break;
 	}
 

Modified: head/sys/kern/kern_clocksource.c
==============================================================================
--- head/sys/kern/kern_clocksource.c	Fri Feb 24 16:02:01 2017	(r314210)
+++ head/sys/kern/kern_clocksource.c	Fri Feb 24 16:11:55 2017	(r314211)
@@ -54,7 +54,6 @@ __FBSDID("$FreeBSD$");
 #include <machine/cpu.h>
 #include <machine/smp.h>
 
-int			cpu_deepest_sleep = 0;	/* Deepest Cx state available. */
 int			cpu_disable_c2_sleep = 0; /* Timer dies in C2. */
 int			cpu_disable_c3_sleep = 0; /* Timer dies in C3. */
 

Modified: head/sys/sys/systm.h
==============================================================================
--- head/sys/sys/systm.h	Fri Feb 24 16:02:01 2017	(r314210)
+++ head/sys/sys/systm.h	Fri Feb 24 16:11:55 2017	(r314211)
@@ -321,7 +321,6 @@ sbintime_t 	cpu_idleclock(void);
 void	cpu_activeclock(void);
 void	cpu_new_callout(int cpu, sbintime_t bt, sbintime_t bt_opt);
 void	cpu_et_frequency(struct eventtimer *et, uint64_t newfreq);
-extern int	cpu_deepest_sleep;
 extern int	cpu_disable_c2_sleep;
 extern int	cpu_disable_c3_sleep;
 

Modified: head/sys/x86/x86/tsc.c
==============================================================================
--- head/sys/x86/x86/tsc.c	Fri Feb 24 16:02:01 2017	(r314210)
+++ head/sys/x86/x86/tsc.c	Fri Feb 24 16:11:55 2017	(r314211)
@@ -542,7 +542,7 @@ init_TSC_tc(void)
 	 * result incorrect runtimes for kernel idle threads (but not
 	 * for any non-idle threads).
 	 */
-	if (cpu_deepest_sleep >= 2 && cpu_vendor_id == CPU_VENDOR_INTEL &&
+	if (cpu_vendor_id == CPU_VENDOR_INTEL &&
 	    (amd_pminfo & AMDPM_TSC_INVARIANT) == 0) {
 		tsc_timecounter.tc_flags |= TC_FLAGS_C2STOP;
 		if (bootverbose)



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201702241611.v1OGBu3B036457>