1
0
mirror of https://git.FreeBSD.org/src.git synced 2026-06-02 11:24:32 +00:00

hwpstate_intel: Disable package control on hybrid CPU

In package control mode, the performance of all cores depends on the
most recent value written to the request field. If the last write comes
from an E-core, all cores are forced to align with the E-core
performance level, resulting in significant performance degradation.
Therefore, package control is disabled on hybrid-core systems.

Reviewed by:    olce
MFC after:      2 weeks
Sponsored by:   The FreeBSD Foundation
Sponsored by:   Framework Computer Inc
Differential Revision: https://reviews.freebsd.org/D57377
This commit is contained in:
ShengYi Hung
2026-06-01 17:46:37 +08:00
parent 553ef188f7
commit 7b26353a59
+21
View File
@@ -321,9 +321,19 @@ out:
return (ret);
}
static void
intel_hwpstate_hybrid_cb(void *ctx)
{
uint32_t *small_cores = ctx;
atomic_add_32(small_cores, PCPU_GET(small_core));
}
void
intel_hwpstate_identify(driver_t *driver, device_t parent)
{
uint32_t small_cores = 0;
if (device_find_child(parent, "hwpstate_intel", DEVICE_UNIT_ANY) != NULL)
return;
@@ -343,6 +353,17 @@ intel_hwpstate_identify(driver_t *driver, device_t parent)
if ((cpu_power_eax & CPUTPM1_HWP) == 0)
return;
/*
* On hybrid-core systems, package-level control cannot be used.
* It may cause all cores to run at the E-core frequency because
* the resulting package frequency depends on the last core that
* sets the frequency.
*/
smp_rendezvous_cpus(all_cpus, smp_no_rendezvous_barrier,
intel_hwpstate_hybrid_cb, smp_no_rendezvous_barrier, &small_cores);
if (small_cores > 0 && small_cores < mp_ncores)
hwpstate_pkg_ctrl_enable = false;
if (BUS_ADD_CHILD(parent, 10, "hwpstate_intel", device_get_unit(parent))
== NULL)
device_printf(parent, "hwpstate_intel: add child failed\n");