hv: cpuid: fix hybrid related cpuid error

Some cpuids will return invalid values on hybrid platform because of the
error in the pointer arithmetic. Add `(void *)` before
`cpu_cpuids.leaves`.

Leaf 0x14 is used to report Intel Processor Trace Enumeration and varies
between P-cores and E-cores on hybrid platform. So add it to
`hybrid_leaves`.

Tracked-On: #8608
Fixes: 59a8cc4c2 ("hv: cpuid: make leaf 0x4 per-cpu in hybrid architecture")
Signed-off-by: Haiwei Li <haiwei.li@intel.com>
Reviewed-by: Junjie Mao <junjie.mao@intel.com>
This commit is contained in:
Haiwei Li 2024-06-17 17:11:19 +08:00 committed by acrnsi-robot
parent dc8ea42297
commit b31fcd3519
1 changed files with 3 additions and 3 deletions

View File

@ -596,10 +596,10 @@ static inline void percpu_cpuid_init(void)
if (pcpu_has_cap(X86_FEATURE_HYBRID)) {
/* 0x2U, 0x4U, 0x6U, 0x14U, 0x16U, 0x18U, 0x1A, 0x1C, 0x80000006U */
uint32_t hybrid_leaves[] = {CPUID_TLB, CPUID_CACHE,
CPUID_THERMAL_POWER, CPUID_FREQ, CPUID_ADDR_TRANS,
CPUID_MODEL_ID, CPUID_LAST_BRANCH_RECORD,
CPUID_THERMAL_POWER, CPUID_TRACE, CPUID_FREQ,
CPUID_ADDR_TRANS, CPUID_MODEL_ID, CPUID_LAST_BRANCH_RECORD,
CPUID_EXTEND_CACHE};
memcpy_s((pcpu_cpuids.leaves + pcpu_cpuids.leaf_nr * sizeof(uint32_t)),
memcpy_s(pcpu_cpuids.leaves + pcpu_cpuids.leaf_nr,
sizeof(hybrid_leaves), hybrid_leaves, sizeof(hybrid_leaves));
pcpu_cpuids.leaf_nr += sizeof(hybrid_leaves)/sizeof(uint32_t);
}