[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 11/11] nVMX: Expose VPID capability to nested VMM.
At 01:57 +0800 on 11 Dec (1355191043), xiantao.zhang@xxxxxxxxx wrote: > From: Zhang Xiantao <xiantao.zhang@xxxxxxxxx> > > Virtualize VPID for the nested vmm, use host's VPID > to emualte guest's VPID. For each virtual vmentry, if > guest'v vpid is changed, allocate a new host VPID for > L2 guest. Looks fine to me, but there's some whitespace mangling: > @@ -2747,8 +2750,11 @@ void vmx_vmenter_helper(void) > > if ( !cpu_has_vmx_vpid ) > goto out; > + if ( nestedhvm_vcpu_in_guestmode(curr) ) > + p_asid = &vcpu_nestedhvm(curr).nv_n2asid; here (after '='), > @@ -897,6 +908,18 @@ static void virtual_vmentry(struct cpu_user_regs *regs) > if ( nestedhvm_paging_mode_hap(v) ) > __vmwrite(EPT_POINTER, get_shadow_eptp(v)); > > + /* nested VPID support! */ > + if ( cpu_has_vmx_vpid && nvmx_vpid_enabled(nvcpu) ) > + { > + struct nestedvmx *nvmx = &vcpu_2_nvmx(v); > + uint32_t new_vpid = __get_vvmcs(vvmcs, VIRTUAL_PROCESSOR_ID); here (after '='), > @@ -1363,6 +1386,9 @@ int nvmx_handle_invept(struct cpu_user_regs *regs) > unsigned long eptp; > u64 inv_type; > > + if(!cpu_has_vmx_ept) here, > @@ -1401,6 +1427,37 @@ int nvmx_handle_invept(struct cpu_user_regs *regs) > (((__emul_value(enable1, default1) & host_value) & (~0ul << 32)) | \ > ((uint32_t)(__emul_value(enable1, default1) | host_value))) > > +int nvmx_handle_invvpid(struct cpu_user_regs *regs) > +{ > + struct vmx_inst_decoded decode; > + unsigned long vpid; > + u64 inv_type; > + > + if(!cpu_has_vmx_vpid) here, > + return X86EMUL_EXCEPTION; > + > + if ( decode_vmx_inst(regs, &decode, &vpid, 0) > + != X86EMUL_OKAY ) > + return X86EMUL_EXCEPTION; > + > + inv_type = reg_read(regs, decode.reg2); > + gdprintk(XENLOG_DEBUG,"inv_type:%ld, vpid:%lx\n", inv_type, vpid); > + > + switch ( inv_type ){ > + /* Just invalidate all tlb entries for all types! */ > + case INVVPID_INDIVIDUAL_ADDR: > + case INVVPID_SINGLE_CONTEXT: > + case INVVPID_ALL_CONTEXT: > + hvm_asid_flush_vcpu_asid(&vcpu_nestedhvm(current).nv_n2asid); > + break; > + default: > + return X86EMUL_EXCEPTION; > + } here (lots of tabs), > @@ -126,8 +126,9 @@ static bool_t nept_present_check(uint64_t entry) > > uint64_t nept_get_ept_vpid_cap(void) > { > - /*TODO: exposed ept and vpid features*/ > - return NEPT_VPID_CAP_BITS; > + if (cpu_has_vmx_ept && cpu_has_vmx_vpid) and here. With those fixed, Acked-by: Tim Deegan <tim@xxxxxxx> _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |