|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v24 12/15] x86/VPMU: Handle PMU interrupts for PV(H) guests
>>> On 15.06.15 at 19:17, <boris.ostrovsky@xxxxxxxxxx> wrote:
> On 06/15/2015 11:50 AM, Jan Beulich wrote:
>>>>> On 10.06.15 at 17:04, <boris.ostrovsky@xxxxxxxxxx> wrote:
>>> + {
>>> + unsigned int num_enabled = 0;
>>> + struct xen_pmu_amd_ctxt *guest_ctxt =
>>> &vpmu->xenpmu_data->pmu.c.amd;
>>> +
>>> + ASSERT(!is_hvm_vcpu(v));
>>> +
>>> + ctxt = vpmu->context;
>>> + ctrl_regs = vpmu_reg_pointer(ctxt, ctrls);
>>> +
>>> + memcpy(&ctxt->regs[0], &guest_ctxt->regs[0], regs_sz);
>> So that's the live structure, not any staging area iiuc. What state
>> is the guest going to be in when validation fails (and you can't
>> restore the original state)? And what guarantees that nothing
>> elsewhere in the hypervisor uses the data _before_ the
>> validation below succeeds?
>
>
> We don't load this data into hardware until we have validated it. On
> failed validation guest will receive hypercall error --- it's up to the
> guest to decide what to do.
>
> The hypervisor will not use this data as it will still be flagged as
> PMU_CACHED, i.e. invalid/stale. (That's why I say in the comment below
> that re-initializing it is really not necessary)
Okay, thanks.
>>> + for ( i = 0; i < num_counters; i++ )
>>> + {
>>> + if ( (ctrl_regs[i] & CTRL_RSVD_MASK) != ctrl_rsvd[i] )
>>> + {
>>> + /*
>>> + * Not necessary to re-init context since we should never
>>> load
>>> + * it until guest provides valid values. But just to be
>>> safe.
>>> + */
>>> + amd_vpmu_init_regs(ctxt);
>>> + return -EINVAL;
>>> + }
>>> +
>>> + if ( is_pmu_enabled(ctrl_regs[i]) )
>>> + num_enabled++;
>>> + }
>>> +
>>> + if ( num_enabled )
>> Looks like a boolean flag would do - the exact count doesn't seem to
>> be of interest here or in later patches?
>
> So the reason why I use a counter here is because keeping track of
> VPMU_RUNNING state is currently broken on AMD, I noticed it when I was
> updating this patch. amd_vpmu_do_wrmsr() will reset VPMU_RUNNING if the
> MSR write is disabling current counter, even though there may still be
> other counters running. This may be related to HVM brokenness of AMD
> counters that I mentioned a while ago where the guest, when running with
> multiple counters, sometimes gets unexpected NMIs. (This goes back all
> the way to to 4.1.)
>
> I don't want to fix this in this series but I will likely need to count
> number of active counters when I do (just like I do for Intel).
>
> I can use a boolean now though since I am not dealing with this problem
> here.
If another rev is needed, I'd prefer if you did so. But if we can have
this version go in (provided we get all the necessary acks), I wouldn't
insist on you doing another round just because of this.
Jan
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |