[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] x86/vm_event: fix race between vmx_vmexit_handler() and vm_event_resume()
On 27/04/2017 08:22, Razvan Cojocaru wrote: > The introspection agent can reply to a vm_event faster than > vmx_vmexit_handler() can complete in some cases, where it is then > not safe for vm_event_set_registers() to modify v->arch.user_regs. > This patch ensures that vm_event_resume() code only sets per-VCPU > data to be used for the actual setting of registers only in > hvm_do_resume() (similar to the model used to control setting of CRs > and MSRs). > The patch additionally removes the sync_vcpu_execstate(v) call from > vm_event_resume(), which is no longer necessary, which removes the > associated broadcast TLB flush (read: performance improvement). > > Signed-off-by: Razvan Cojocaru <rcojocaru@xxxxxxxxxxxxxxx> > Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> FWIW, Reivewed-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> (this has taken an embarrassingly long time to get to the root cause of, considering the eventual simplicity of the patch) with one trivial correction I have just spotted below. CC'ing Julien and Ian in their RM capacity, as this bugfix should be taken for 4.9 > diff --git a/xen/common/vm_event.c b/xen/common/vm_event.c > index 0fe9a53..498749b 100644 > --- a/xen/common/vm_event.c > +++ b/xen/common/vm_event.c > @@ -357,6 +357,13 @@ void vm_event_resume(struct domain *d, struct > vm_event_domain *ved) > { > vm_event_response_t rsp; > > + /* > + * vm_event_resume() runs either from XEN_DOMCTL_VM_EVENT_OP_*, or > + * EVTCHN_send from the introspection consumer. Both contexts are I have just spotted that this should read "runs in either XEN_DOMCTL_VM_EVENT_OP_*, or EVTCHN_send context from". I can fix up on commit, if there are no other issues. ~Andrew > + * guaranteed not to be the subject of vm_event responses. > + */ > + ASSERT(d != current->domain); > + > /* Pull all responses off the ring. */ > while ( vm_event_get_response(d, ved, &rsp) ) > { _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |