Commit 76c2975a authored by Paolo Bonzini's avatar Paolo Bonzini Committed by Anthony Liguori
Browse files

target-i386: do not override nr_cores for -cpu host



Commit 787aaf57 (target-i386: forward CPUID cache leaves when -cpu host is
used, 2013-09-02) brings bits 31..26 of CPUID leaf 04h out of sync with
the APIC IDs that QEMU reserves for each package.  This number must come
from "-smp" options rather than from the host CPUID.

It also turns out that this unsyncing makes Windows Server 2012R2 fail
to boot.

Tested-by: default avatarPeter Lieven <pl@kamp.de>
Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
Reviewed-by: default avatarBenoit Canet <benoit@irqsave.net>
Reviewed-by: default avatarEduardo Habkost <ehabkost@redhat.com>
Message-id: 1384879786-6721-1-git-send-email-pbonzini@redhat.com
Signed-off-by: default avatarAnthony Liguori <aliguori@amazon.com>
parent 54e75558
Loading
Loading
Loading
Loading
+8 −6
Original line number Diff line number Diff line
@@ -2086,13 +2086,9 @@ void cpu_x86_cpuid(CPUX86State *env, uint32_t index, uint32_t count,
        /* cache info: needed for Core compatibility */
        if (cpu->cache_info_passthrough) {
            host_cpuid(index, count, eax, ebx, ecx, edx);
            break;
        }
        if (cs->nr_cores > 1) {
            *eax = (cs->nr_cores - 1) << 26;
            *eax &= ~0xFC000000;
        } else {
            *eax = 0;
        }
            switch (count) {
            case 0: /* L1 dcache info */
                *eax |= CPUID_4_TYPE_DCACHE | \
@@ -2134,6 +2130,12 @@ void cpu_x86_cpuid(CPUX86State *env, uint32_t index, uint32_t count,
                *edx = 0;
                break;
            }
        }

        /* QEMU gives out its own APIC IDs, never pass down bits 31..26.  */
        if ((*eax & 31) && cs->nr_cores > 1) {
            *eax |= (cs->nr_cores - 1) << 26;
        }
        break;
    case 5:
        /* mwait info: needed for Core compatibility */