virt: fix detection of avx2 and friends
To get the CPUID with EAX=7, we need explicitly set 0 to ECX. From Intel® Architecture Instruction Set Extensions Programming Reference and Related Specifications, === Leaf 07H output depends on the initial value in ECX. If ECX contains an invalid sub leaf index, EAX/EBX/ECX/EDX return 0 === Fixes #30822.
This commit is contained in:
committed by
Lennart Poettering
parent
c9f096969a
commit
e701439998
+1
-1
@@ -997,7 +997,7 @@ static bool real_has_cpu_with_flag(const char *flag) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (__get_cpuid(7, &eax, &ebx, &ecx, &edx)) {
|
||||
if (__get_cpuid_count(7, 0, &eax, &ebx, &ecx, &edx)) {
|
||||
if (given_flag_in_set(flag, leaf7_ebx, ELEMENTSOF(leaf7_ebx), ebx))
|
||||
return true;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user