From: Liu Ping Fan <pingfank@xxxxxxxxxxxxxxxxxx> 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 <pingfank@xxxxxxxxxxxxxxxxxx> --- 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 -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html