On Fri, Feb 12, 2016 at 8:00 AM, Jan Beulich <jbeul...@suse.com> wrote:
> >>> On 12.02.16 at 13:57, <tleng...@novetta.com> wrote: > > On Feb 12, 2016 02:12, "Jan Beulich" <jbeul...@suse.com> wrote: > >> > >> >>> On 12.02.16 at 01:22, <tleng...@novetta.com> wrote: > >> > Sending the dr7 register during vm_events is useful for various > > applications, > >> > but the current way the register value is gathered is incorrent. In > this > >> > patch > >> > we extend vmx_vmcs_save so that we get the correct value. > >> > > >> > Suggested-by: Andrew Cooper <andrew.coop...@citrix.com> > >> > >> Iirc Andrew suggested ... > >> > >> > --- a/xen/arch/x86/hvm/vmx/vmx.c > >> > +++ b/xen/arch/x86/hvm/vmx/vmx.c > >> > @@ -490,6 +490,7 @@ static void vmx_vmcs_save(struct vcpu *v, struct > hvm_hw_cpu *c) > >> > __vmread(GUEST_SYSENTER_CS, &c->sysenter_cs); > >> > __vmread(GUEST_SYSENTER_ESP, &c->sysenter_esp); > >> > __vmread(GUEST_SYSENTER_EIP, &c->sysenter_eip); > >> > + __vmread(GUEST_DR7, &c->dr7); > >> > >> ... just when v == current. > >> > > > > Would that check really be necessary? It would complicate the code not > just > > here but the caller would need to be aware too that in that case dr7 can > be > > aquired from someplace else. I don't see the harm in just saving dr7 here > > in both cases. > > Maybe the solution then is for the suggested if() to have an "else"? > While, as someone said elsewhere, a few more cycles may not be > noticable, why make things slower than they need to be. Plus - what > guarantees that the VMCS field isn't stale while the guest isn't running > (perhaps it got updated but not sync-ed back yet in anticipation for > this to happen during vCPU resume)? > I would say the caller is better suited to make this choice then this function. This function is intended to save vmcs values, so it should do so regardless whether the value in it is stale or not. Then the caller can selectively choose to use the values it knows not to be stale. As for it adding cycles, the if/else check here would also add some cycles. I would guess that the performance difference between the if/else check and __vmread would be unnoticeable so I don't really see any value in doing this check here. Tamas
_______________________________________________ Xen-devel mailing list Xen-devel@lists.xen.org http://lists.xen.org/xen-devel