[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH 6/6] x86/emul: dedup hvmemul_cpuid() and pv_emul_cpuid()
They are identical, so provide a single x86emul_cpuid() instead. As x86_emulate() now only uses the ->cpuid() hook for real CPUID instructions, the hook can be omitted from all special-purpose emulation ops. Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> --- CC: Jan Beulich <JBeulich@xxxxxxxx> CC: Wei Liu <wei.liu2@xxxxxxxxxx> --- xen/arch/x86/hvm/emulate.c | 13 ++----------- xen/arch/x86/mm/shadow/hvm.c | 1 - xen/arch/x86/pv/emul-priv-op.c | 10 +--------- xen/arch/x86/pv/ro-page-fault.c | 3 --- xen/arch/x86/x86_emulate.c | 8 ++++++++ xen/arch/x86/x86_emulate/x86_emulate.h | 2 ++ xen/include/asm-x86/hvm/emulate.h | 2 -- xen/include/asm-x86/mm.h | 2 -- 8 files changed, 13 insertions(+), 28 deletions(-) diff --git a/xen/arch/x86/hvm/emulate.c b/xen/arch/x86/hvm/emulate.c index 91fa9db..3c42381 100644 --- a/xen/arch/x86/hvm/emulate.c +++ b/xen/arch/x86/hvm/emulate.c @@ -2107,13 +2107,6 @@ static int hvmemul_wbinvd( return X86EMUL_OKAY; } -int hvmemul_cpuid(uint32_t leaf, uint32_t subleaf, - struct cpuid_leaf *res, struct x86_emulate_ctxt *ctxt) -{ - guest_cpuid(current, leaf, subleaf, res); - return X86EMUL_OKAY; -} - static int hvmemul_get_fpu( enum x86_emulate_fpu_type type, struct x86_emulate_ctxt *ctxt) @@ -2312,7 +2305,7 @@ static const struct x86_emulate_ops hvm_emulate_ops = { .read_msr = hvmemul_read_msr, .write_msr = hvmemul_write_msr, .wbinvd = hvmemul_wbinvd, - .cpuid = hvmemul_cpuid, + .cpuid = x86emul_cpuid, .get_fpu = hvmemul_get_fpu, .put_fpu = hvmemul_put_fpu, .invlpg = hvmemul_invlpg, @@ -2339,7 +2332,7 @@ static const struct x86_emulate_ops hvm_emulate_ops_no_write = { .read_msr = hvmemul_read_msr, .write_msr = hvmemul_write_msr_discard, .wbinvd = hvmemul_wbinvd_discard, - .cpuid = hvmemul_cpuid, + .cpuid = x86emul_cpuid, .get_fpu = hvmemul_get_fpu, .put_fpu = hvmemul_put_fpu, .invlpg = hvmemul_invlpg, @@ -2424,13 +2417,11 @@ int hvm_emulate_one_mmio(unsigned long mfn, unsigned long gla) .read = x86emul_unhandleable_rw, .insn_fetch = hvmemul_insn_fetch, .write = mmcfg_intercept_write, - .cpuid = hvmemul_cpuid, }; static const struct x86_emulate_ops hvm_ro_emulate_ops_mmio = { .read = x86emul_unhandleable_rw, .insn_fetch = hvmemul_insn_fetch, .write = mmio_ro_emulated_write, - .cpuid = hvmemul_cpuid, }; struct mmio_ro_emulate_ctxt mmio_ro_ctxt = { .cr2 = gla }; struct hvm_emulate_ctxt ctxt; diff --git a/xen/arch/x86/mm/shadow/hvm.c b/xen/arch/x86/mm/shadow/hvm.c index 4cc7591..5087cd9 100644 --- a/xen/arch/x86/mm/shadow/hvm.c +++ b/xen/arch/x86/mm/shadow/hvm.c @@ -297,7 +297,6 @@ const struct x86_emulate_ops hvm_shadow_emulator_ops = { .insn_fetch = hvm_emulate_insn_fetch, .write = hvm_emulate_write, .cmpxchg = hvm_emulate_cmpxchg, - .cpuid = hvmemul_cpuid, }; /**************************************************************************/ diff --git a/xen/arch/x86/pv/emul-priv-op.c b/xen/arch/x86/pv/emul-priv-op.c index 5968f99..d5a4046 100644 --- a/xen/arch/x86/pv/emul-priv-op.c +++ b/xen/arch/x86/pv/emul-priv-op.c @@ -1178,14 +1178,6 @@ static int _wbinvd(struct x86_emulate_ctxt *ctxt) return X86EMUL_OKAY; } -int pv_emul_cpuid(uint32_t leaf, uint32_t subleaf, - struct cpuid_leaf *res, struct x86_emulate_ctxt *ctxt) -{ - guest_cpuid(current, leaf, subleaf, res); - - return X86EMUL_OKAY; -} - static int validate(const struct x86_emulate_state *state, struct x86_emulate_ctxt *ctxt) { @@ -1289,7 +1281,7 @@ static const struct x86_emulate_ops priv_op_ops = { .write_xcr = x86emul_write_xcr, .read_msr = read_msr, .write_msr = write_msr, - .cpuid = pv_emul_cpuid, + .cpuid = x86emul_cpuid, .wbinvd = _wbinvd, }; diff --git a/xen/arch/x86/pv/ro-page-fault.c b/xen/arch/x86/pv/ro-page-fault.c index 9d4913d..fa358a6 100644 --- a/xen/arch/x86/pv/ro-page-fault.c +++ b/xen/arch/x86/pv/ro-page-fault.c @@ -259,7 +259,6 @@ static const struct x86_emulate_ops ptwr_emulate_ops = { .write = ptwr_emulated_write, .cmpxchg = ptwr_emulated_cmpxchg, .validate = pv_emul_is_mem_write, - .cpuid = pv_emul_cpuid, }; /* Write page fault handler: check if guest is trying to modify a PTE. */ @@ -308,7 +307,6 @@ static const struct x86_emulate_ops mmio_ro_emulate_ops = { .insn_fetch = ptwr_emulated_read, .write = mmio_ro_emulated_write, .validate = pv_emul_is_mem_write, - .cpuid = pv_emul_cpuid, }; static const struct x86_emulate_ops mmcfg_intercept_ops = { @@ -316,7 +314,6 @@ static const struct x86_emulate_ops mmcfg_intercept_ops = { .insn_fetch = ptwr_emulated_read, .write = mmcfg_intercept_write, .validate = pv_emul_is_mem_write, - .cpuid = pv_emul_cpuid, }; /* Check if guest is trying to modify a r/o MMIO page. */ diff --git a/xen/arch/x86/x86_emulate.c b/xen/arch/x86/x86_emulate.c index 886bd87..60f73d0 100644 --- a/xen/arch/x86/x86_emulate.c +++ b/xen/arch/x86/x86_emulate.c @@ -156,6 +156,14 @@ int x86emul_write_dr(unsigned int reg, unsigned long val, } } +int x86emul_cpuid(uint32_t leaf, uint32_t subleaf, + struct cpuid_leaf *res, struct x86_emulate_ctxt *ctxt) +{ + guest_cpuid(current, leaf, subleaf, res); + + return X86EMUL_OKAY; +} + /* * Local variables: * mode: C diff --git a/xen/arch/x86/x86_emulate/x86_emulate.h b/xen/arch/x86/x86_emulate/x86_emulate.h index 0397c1d..73201b9 100644 --- a/xen/arch/x86/x86_emulate/x86_emulate.h +++ b/xen/arch/x86/x86_emulate/x86_emulate.h @@ -724,6 +724,8 @@ int x86emul_read_dr(unsigned int reg, unsigned long *val, struct x86_emulate_ctxt *ctxt); int x86emul_write_dr(unsigned int reg, unsigned long val, struct x86_emulate_ctxt *ctxt); +int x86emul_cpuid(uint32_t leaf, uint32_t subleaf, + struct cpuid_leaf *res, struct x86_emulate_ctxt *ctxt); #endif diff --git a/xen/include/asm-x86/hvm/emulate.h b/xen/include/asm-x86/hvm/emulate.h index 26a01e8..b39a1a0 100644 --- a/xen/include/asm-x86/hvm/emulate.h +++ b/xen/include/asm-x86/hvm/emulate.h @@ -76,8 +76,6 @@ void hvm_emulate_init_per_insn( unsigned int insn_bytes); void hvm_emulate_writeback( struct hvm_emulate_ctxt *hvmemul_ctxt); -int hvmemul_cpuid(uint32_t leaf, uint32_t subleaf, - struct cpuid_leaf *res, struct x86_emulate_ctxt *ctxt); struct segment_register *hvmemul_get_seg_reg( enum x86_segment seg, struct hvm_emulate_ctxt *hvmemul_ctxt); diff --git a/xen/include/asm-x86/mm.h b/xen/include/asm-x86/mm.h index 6e45651..cda73e2 100644 --- a/xen/include/asm-x86/mm.h +++ b/xen/include/asm-x86/mm.h @@ -528,8 +528,6 @@ extern int mmcfg_intercept_write(enum x86_segment seg, void *p_data, unsigned int bytes, struct x86_emulate_ctxt *ctxt); -int pv_emul_cpuid(uint32_t leaf, uint32_t subleaf, - struct cpuid_leaf *res, struct x86_emulate_ctxt *ctxt); int audit_adjust_pgtables(struct domain *d, int dir, int noisy); -- 2.1.4 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |