From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([140.186.70.92]:51157) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RUUkZ-0008Q5-8v for qemu-devel@nongnu.org; Sat, 26 Nov 2011 21:45:52 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1RUUkY-0008Nl-6e for qemu-devel@nongnu.org; Sat, 26 Nov 2011 21:45:51 -0500 Received: from mail-iy0-f173.google.com ([209.85.210.173]:55216) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RUUkX-0008Nh-VW for qemu-devel@nongnu.org; Sat, 26 Nov 2011 21:45:50 -0500 Received: by iakk32 with SMTP id k32so7711723iak.4 for ; Sat, 26 Nov 2011 18:45:49 -0800 (PST) From: Liu Ping Fan Date: Sun, 27 Nov 2011 10:45:33 +0800 Message-Id: <1322361937-22438-1-git-send-email-kernelfans@gmail.com> In-Reply-To: <1322188529-11609-1-git-send-email-kernelfans@gmail.com> References: <1322188529-11609-1-git-send-email-kernelfans@gmail.com> Subject: [Qemu-devel] [PATCH 1/5] QEMU Add cpu_phyid_to_cpu() to map cpu phyid to CPUState List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: kvm@vger.kernel.org, qemu-devel@nongnu.org Cc: aliguori@us.ibm.com, ryanh@us.ibm.com, jan.kiszka@web.de, linux-kernel@vger.kernel.org, avi@redhat.com From: Liu Ping Fan The guest has different cpu logic id from qemu, but they have the same phyid. When cpu phyid is told by guest, we need to obtain the corresponding CPUState. Signed-off-by: Liu Ping Fan --- target-i386/cpu.h | 2 ++ target-i386/helper.c | 12 ++++++++++++ 2 files changed, 14 insertions(+), 0 deletions(-) diff --git a/target-i386/cpu.h b/target-i386/cpu.h index abdeb40..251e63b 100644 --- a/target-i386/cpu.h +++ b/target-i386/cpu.h @@ -767,6 +767,7 @@ typedef struct CPUX86State { } CPUX86State; CPUX86State *cpu_x86_init(const char *cpu_model); +CPUX86State *x86_phyid_to_cpu(int phy_id); int cpu_x86_exec(CPUX86State *s); void cpu_x86_close(CPUX86State *s); void x86_cpu_list (FILE *f, fprintf_function cpu_fprintf, const char *optarg); @@ -1063,4 +1064,5 @@ void svm_check_intercept(CPUState *env1, uint32_t type); uint32_t cpu_cc_compute_all(CPUState *env1, int op); +#define cpu_phyid_to_cpu x86_phyid_to_cpu #endif /* CPU_I386_H */ diff --git a/target-i386/helper.c b/target-i386/helper.c index 5df40d4..e35a75e 100644 --- a/target-i386/helper.c +++ b/target-i386/helper.c @@ -1263,6 +1263,18 @@ CPUX86State *cpu_x86_init(const char *cpu_model) return env; } +CPUX86State *x86_phyid_to_cpu(int phy_id) +{ + CPUX86State *env = first_cpu; + while (env) { + if (env->cpuid_apic_id == phy_id) { + break; + } + env = env->next_cpu; + } + return env; +} + #if !defined(CONFIG_USER_ONLY) void do_cpu_init(CPUState *env) { -- 1.7.4.4