From: Simon Guo <wei.guo.simon@xxxxxxxxx> We already have analyse_instr() which analyzes instructions for the instruction type, size, addtional flags, etc. What kvmppc_emulate_loadstore() did is somehow duplicated and it will be good to utilize analyse_instr() to reimplement the code. The advantage is that the code logic will be shared and more clean to be maintained. This patch series reimplement kvmppc_emulate_loadstore() for various load/store instructions. The testcase locates at: https://github.com/justdoitqd/publicFiles/blob/master/test_mmio.c - Tested at both PR/HV KVM. - Also tested with little endian host & big endian guest. Tested instruction list: lbz lbzu lbzx ld ldbrx ldu ldx lfd lfdu lfdx lfiwax lfiwzx lfs lfsu lfsx lha lhau lhax lhbrx lhz lhzu lhzx lvx lwax lwbrx lwz lwzu lwzx lxsdx lxsiwax lxsiwzx lxsspx lxvd2x lxvdsx lxvw4x stb stbu stbx std stdbrx stdu stdx stfd stfdu stfdx stfiwx stfs stfsx sth sthbrx sthu sthx stvx stw stwbrx stwu stwx stxsdx stxsiwx stxsspx stxvd2x stxvw4x lvebx stvebx lvehx stvehx lvewx stvewx V2 -> V3 changes: 1) add FPU SIGNEXT case to handle lfiwax based on comment. 2) a minor change to go label "out:" when EMULATE_DO_MMIO returned based on comment. 3) rebased to paul's kvm-ppc-next branch (3 patches was merged into that branch and so this patch set includes 7 patches only). V1 -> V2 changes: 1) correct patch split issue in v1. 2) revise some commit message/code comment per review comment 3) remove incorrect special handling for stxsiwx 4) remove mmio_update_ra related and move the RA update into kvmppc_emulate_loadstore(). 5) rework giveup_ext() which is only meaningful when not NULL. 6) rewrite VMX emulation code and cover rest VMX instructions: lvebx stvebx lvehx stvehx lvewx stvewx Simon Guo (7): KVM: PPC: add KVMPPC_VSX_COPY_WORD_LOAD_DUMP type support for mmio emulation KVM: PPC: reimplement non-SIMD LOAD/STORE instruction mmio emulation with analyse_intr() input KVM: PPC: add giveup_ext() hook for PPC KVM ops KVM: PPC: reimplement LOAD_FP/STORE_FP instruction mmio emulation with analyse_intr() input KVM: PPC: reimplements LOAD_VSX/STORE_VSX instruction mmio emulation with analyse_intr() input KVM: PPC: expand mmio_vsx_copy_type to mmio_copy_type to cover VMX load/store elem types KVM: PPC: reimplements LOAD_VMX/STORE_VMX instruction mmio emulation with analyse_intr() input arch/powerpc/include/asm/kvm_host.h | 11 +- arch/powerpc/include/asm/kvm_ppc.h | 17 +- arch/powerpc/kvm/book3s.c | 4 +- arch/powerpc/kvm/book3s_pr.c | 1 + arch/powerpc/kvm/e500_mmu_host.c | 8 +- arch/powerpc/kvm/emulate_loadstore.c | 751 +++++++++++------------------------ arch/powerpc/kvm/powerpc.c | 299 +++++++++++--- 7 files changed, 498 insertions(+), 593 deletions(-) -- 1.8.3.1