> From: Sergey Dyasli [mailto:sergey.dya...@citrix.com] > Sent: Friday, October 12, 2018 11:28 PM > > As a convenient helper function and refactor the code to use it. > > No functional change. > > Signed-off-by: Sergey Dyasli <sergey.dya...@citrix.com>
since vmcx is hvm abstracted term, what about using this helper in svm side too? > --- > xen/arch/x86/hvm/vmx/vvmx.c | 17 ++++++++--------- > xen/include/asm-x86/hvm/nestedhvm.h | 5 +++++ > 2 files changed, 13 insertions(+), 9 deletions(-) > > diff --git a/xen/arch/x86/hvm/vmx/vvmx.c > b/xen/arch/x86/hvm/vmx/vvmx.c > index 0e45db83e5..8eee6d0ea8 100644 > --- a/xen/arch/x86/hvm/vmx/vvmx.c > +++ b/xen/arch/x86/hvm/vmx/vvmx.c > @@ -521,8 +521,7 @@ static void vmfail(struct cpu_user_regs *regs, enum > vmx_insn_errno errno) > if ( errno == VMX_INSN_SUCCEED ) > return; > > - if ( vcpu_nestedhvm(current).nv_vvmcxaddr != INVALID_PADDR && > - errno != VMX_INSN_FAIL_INVALID ) > + if ( vvmcx_valid(current) && errno != VMX_INSN_FAIL_INVALID ) > vmfail_valid(regs, errno); > else > vmfail_invalid(regs); > @@ -805,7 +804,7 @@ static void nvmx_purge_vvmcs(struct vcpu *v) > int i; > > __clear_current_vvmcs(v); > - if ( nvcpu->nv_vvmcxaddr != INVALID_PADDR ) > + if ( vvmcx_valid(v) ) > hvm_unmap_guest_frame(nvcpu->nv_vvmcx, 1); > nvcpu->nv_vvmcx = NULL; > nvcpu->nv_vvmcxaddr = INVALID_PADDR; > @@ -1601,7 +1600,7 @@ static int nvmx_vmresume(struct vcpu *v, struct > cpu_user_regs *regs) > struct nestedvcpu *nvcpu = &vcpu_nestedhvm(v); > > /* check VMCS is valid and IO BITMAP is set */ > - if ( (nvcpu->nv_vvmcxaddr != INVALID_PADDR) && > + if ( vvmcx_valid(v) && > ((nvmx->iobitmap[0] && nvmx->iobitmap[1]) || > !(__n2_exec_control(v) & CPU_BASED_ACTIVATE_IO_BITMAP) ) ) > nvcpu->nv_vmentry_pending = 1; > @@ -1622,7 +1621,7 @@ int nvmx_handle_vmresume(struct > cpu_user_regs *regs) > if ( rc != X86EMUL_OKAY ) > return rc; > > - if ( vcpu_nestedhvm(v).nv_vvmcxaddr == INVALID_PADDR ) > + if ( !vvmcx_valid(v) ) > { > vmfail_invalid(regs); > return X86EMUL_OKAY; > @@ -1656,7 +1655,7 @@ int nvmx_handle_vmlaunch(struct cpu_user_regs > *regs) > if ( rc != X86EMUL_OKAY ) > return rc; > > - if ( vcpu_nestedhvm(v).nv_vvmcxaddr == INVALID_PADDR ) > + if ( !vvmcx_valid(v) ) > { > vmfail_invalid(regs); > return X86EMUL_OKAY; > @@ -1709,7 +1708,7 @@ int nvmx_handle_vmptrld(struct cpu_user_regs > *regs) > if ( nvcpu->nv_vvmcxaddr != gpa ) > nvmx_purge_vvmcs(v); > > - if ( nvcpu->nv_vvmcxaddr == INVALID_PADDR ) > + if ( !vvmcx_valid(v) ) > { > bool_t writable; > void *vvmcx = hvm_map_guest_frame_rw(paddr_to_pfn(gpa), 1, > &writable); > @@ -1848,7 +1847,7 @@ int nvmx_handle_vmread(struct cpu_user_regs > *regs) > if ( rc != X86EMUL_OKAY ) > return rc; > > - if ( vcpu_nestedhvm(v).nv_vvmcxaddr == INVALID_PADDR ) > + if ( !vvmcx_valid(v) ) > { > vmfail_invalid(regs); > return X86EMUL_OKAY; > @@ -1891,7 +1890,7 @@ int nvmx_handle_vmwrite(struct cpu_user_regs > *regs) > != X86EMUL_OKAY ) > return X86EMUL_EXCEPTION; > > - if ( vcpu_nestedhvm(v).nv_vvmcxaddr == INVALID_PADDR ) > + if ( !vvmcx_valid(v) ) > { > vmfail_invalid(regs); > return X86EMUL_OKAY; > diff --git a/xen/include/asm-x86/hvm/nestedhvm.h b/xen/include/asm- > x86/hvm/nestedhvm.h > index 9d1c2742b5..e09fa9d47d 100644 > --- a/xen/include/asm-x86/hvm/nestedhvm.h > +++ b/xen/include/asm-x86/hvm/nestedhvm.h > @@ -92,4 +92,9 @@ static inline void nestedhvm_set_cr(struct vcpu *v, > unsigned int cr, > v->arch.hvm.nvcpu.guest_cr[cr] = value; > } > > +static inline bool vvmcx_valid(const struct vcpu *v) > +{ > + return vcpu_nestedhvm(v).nv_vvmcxaddr != INVALID_PADDR; > +} > + > #endif /* _HVM_NESTEDHVM_H */ > -- > 2.17.1 _______________________________________________ Xen-devel mailing list Xen-devel@lists.xenproject.org https://lists.xenproject.org/mailman/listinfo/xen-devel