Browse Source

Avoid failure on qemu guests declaring an Athlon CPU without 3dnow!

The present patch verifies that, on machines declaring an Athlon CPU model and
family, the 3dnow and 3dnowext feature flags are indeed present. If they are
not, it fallbacks on the most generic x86 kernel. This prevents crashes due to
illegal instruction on qemu guests with a weird configuration.

Closes #272
tags/v0.2.9.rc1
Sébastien Villemot 12 years ago
parent
commit
eae4cfa3f6
1 changed files with 13 additions and 1 deletions
  1. +13
    -1
      driver/others/dynamic.c

+ 13
- 1
driver/others/dynamic.c View File

@@ -222,7 +222,19 @@ static gotoblas_t *get_coretype(void){
}

if (vendor == VENDOR_AMD){
if (family <= 0xe) return &gotoblas_ATHLON;
if (family <= 0xe) {
// Verify that CPU has 3dnow and 3dnowext before claiming it is Athlon
cpuid(0x80000000, &eax, &ebx, &ecx, &edx);
if (eax & 0xffff >= 0x01) {
cpuid(0x80000001, &eax, &ebx, &ecx, &edx);
if ((edx & (1 << 30)) == 0 || (edx & (1 << 31)) == 0)
return NULL;
}
else
return NULL;

return &gotoblas_ATHLON;
}
if (family == 0xf){
if ((exfamily == 0) || (exfamily == 2)) {
if (ecx & (1 << 0)) return &gotoblas_OPTERON_SSE3;


Loading…
Cancel
Save