|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 3/3] vVMX: use latched VMCS machine address
> >> -void virtual_vmcs_enter(void *vvmcs)
> >> +void virtual_vmcs_enter(const struct vcpu *v)
> >> {
> >> - __vmptrld(pfn_to_paddr(domain_page_map_to_mfn(vvmcs)));
> >> + __vmptrld(v->arch.hvm_vmx.vmcs_shadow_maddr);
> >
> > Debug shows v->arch.hvm_vmx.vmcs_shadow_maddr will equal to 0 at
> > this point, this will crash the system.
> >
> >> }
> >>
> >> -void virtual_vmcs_exit(void *vvmcs)
> >> +void virtual_vmcs_exit(const struct vcpu *v)
> >> {
> >> paddr_t cur = this_cpu(current_vmcs);
> >>
> >> - __vmpclear(pfn_to_paddr(domain_page_map_to_mfn(vvmcs)));
> >> + __vmpclear(v->arch.hvm_vmx.vmcs_shadow_maddr);
> >
> > Debug shows v->arch.hvm_vmx.vmcs_shadow_maddr will equal to 0 at
> > this point, this will crash the system.
>
> For both of these you provide too little context. In particular ...
>
> > Maybe we should use pfn_to_paddr(domain_page_map_to_mfn(vvmcs)))
> here.
>
> ... this shouldn't be necessary, since the whole purpose of the patch is to
> avoid this, making sure
> v->arch.hvm_vmx.vmcs_shadow_maddr always represents
> domain_page_map_to_mfn(vvmcs). Hence if you find the latched field to be
> zero, we'll need to understand _why_ this is so, i.e.
> what code path cleared the field (perhaps prematurely).
Hi Jan,
I found the code path when creating the L2 guest:
....
(XEN)nvmx_handle_vmclear
(XEN)nvmx_handle_vmptrld
(XEN)map_io_bitmap_all
(XEN)_map_io_bitmap
(XEN)virtual_vmcs_enter
(XEN)_map_io_bitmap
(XEN)virtual_vmcs_enter
(XEN)_map_msr_bitmap
(XEN)virtual_vmcs_enter
(XEN)nvmx_set_vmcs_pointer
(XEN)nvmx_handle_vmwrite
....
so the virtual_vmcs_enter() will be called before the nvmx_set_vmcs_pointer(),
and at this time 'v->arch.hvm_vmx.vmcs_shadow_maddr' still equal to 0.
Maybe ' v->arch.hvm_vmx.vmcs_shadow_maddr' should be set when setting the
'nvcpu->nv_vvmcx' in nvmx_handle_vmptrld().
Liang
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |