From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1LSaYB-0001OF-N0 for qemu-devel@nongnu.org; Thu, 29 Jan 2009 12:19:35 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1LSaY9-0001MC-8T for qemu-devel@nongnu.org; Thu, 29 Jan 2009 12:19:34 -0500 Received: from [199.232.76.173] (port=51478 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1LSaY8-0001Ls-W9 for qemu-devel@nongnu.org; Thu, 29 Jan 2009 12:19:33 -0500 Received: from mx2.redhat.com ([66.187.237.31]:53016) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1LSaY8-0007qg-DC for qemu-devel@nongnu.org; Thu, 29 Jan 2009 12:19:32 -0500 From: Glauber Costa Date: Thu, 29 Jan 2009 12:19:27 -0500 Message-Id: <1233249569-16686-3-git-send-email-glommer@redhat.com> In-Reply-To: <1233249569-16686-2-git-send-email-glommer@redhat.com> References: <1233249569-16686-1-git-send-email-glommer@redhat.com> <1233249569-16686-2-git-send-email-glommer@redhat.com> Subject: [Qemu-devel] [PATCH 2/4] Factor out common code in filling cpuid code Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: aliguori@us.ibm.com Use kvm_fill_cpuid to query qemu for cpuid data. There are two exactly equal instances of this code, and the future introduction of kvm paravirt features will make it three. Signed-off-by: Glauber Costa --- target-i386/kvm.c | 46 +++++++++++++++++++++++----------------------- 1 files changed, 23 insertions(+), 23 deletions(-) diff --git a/target-i386/kvm.c b/target-i386/kvm.c index 729568c..64b24db 100644 --- a/target-i386/kvm.c +++ b/target-i386/kvm.c @@ -33,22 +33,19 @@ do { } while (0) #endif -int kvm_arch_init_vcpu(CPUState *env) -{ - struct { +typedef struct KVMCpuid { struct kvm_cpuid2 cpuid; struct kvm_cpuid_entry2 entries[100]; - } __attribute__((packed)) cpuid_data; - uint32_t limit, i, cpuid_i; - uint32_t eax, ebx, ecx, edx; +} KVMCpuid; - cpuid_i = 0; - - cpu_x86_cpuid(env, 0, &eax, &ebx, &ecx, &edx); - limit = eax; +static void kvm_fill_cpuid(CPUState *env, KVMCpuid *cpuid_data, + uint32_t start, uint32_t limit) +{ + int i; + uint32_t eax, ebx, ecx, edx; - for (i = 0; i <= limit; i++) { - struct kvm_cpuid_entry2 *c = &cpuid_data.entries[cpuid_i++]; + for (i = start; i <= limit; i++) { + struct kvm_cpuid_entry2 *c = &cpuid_data->entries[cpuid_data->cpuid.nent++]; cpu_x86_cpuid(env, i, &eax, &ebx, &ecx, &edx); c->function = i; @@ -57,22 +54,25 @@ int kvm_arch_init_vcpu(CPUState *env) c->ecx = ecx; c->edx = edx; } +} - cpu_x86_cpuid(env, 0x80000000, &eax, &ebx, &ecx, &edx); +int kvm_arch_init_vcpu(CPUState *env) +{ + KVMCpuid cpuid_data; + uint32_t limit; + uint32_t eax, ebx, ecx, edx; + + cpuid_data.cpuid.nent = 0; + + cpu_x86_cpuid(env, 0, &eax, &ebx, &ecx, &edx); limit = eax; - for (i = 0x80000000; i <= limit; i++) { - struct kvm_cpuid_entry2 *c = &cpuid_data.entries[cpuid_i++]; + kvm_fill_cpuid(env, &cpuid_data, 0, limit); - cpu_x86_cpuid(env, i, &eax, &ebx, &ecx, &edx); - c->function = i; - c->eax = eax; - c->ebx = ebx; - c->ecx = ecx; - c->edx = edx; - } + cpu_x86_cpuid(env, 0x80000000, &eax, &ebx, &ecx, &edx); + limit = eax; - cpuid_data.cpuid.nent = cpuid_i; + kvm_fill_cpuid(env, &cpuid_data, 0x80000000, limit); return kvm_vcpu_ioctl(env, KVM_SET_CPUID2, &cpuid_data); } -- 1.5.6.5