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
This commit is contained in:
parent
9c8efa1dfb
commit
8cd5962571
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=314211
@ -703,7 +703,6 @@ acpi_cpu_generic_cx_probe(struct acpi_cpu_softc *sc)
|
||||
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_cpu_softc *sc)
|
||||
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_cpu_softc *sc)
|
||||
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 *sc)
|
||||
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 *sc)
|
||||
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 *sc)
|
||||
"acpi_cpu%d: C3[%d] not available.\n",
|
||||
device_get_unit(sc->cpu_dev), i));
|
||||
continue;
|
||||
} else
|
||||
cpu_deepest_sleep = 3;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -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. */
|
||||
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user