[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH v14 for-xen-4.5 17/21] x86/VPMU: Handle PMU interrupts for PV guests



>>> On 27.10.14 at 20:43, <boris.ostrovsky@xxxxxxxxxx> wrote:
> On 10/27/2014 12:54 PM, Jan Beulich wrote:
>>>>> On 17.10.14 at 23:18, <boris.ostrovsky@xxxxxxxxxx> wrote:
>>> --- a/xen/arch/x86/hvm/vpmu.c
>>> +++ b/xen/arch/x86/hvm/vpmu.c
>>> @@ -81,46 +81,206 @@ static void __init parse_vpmu_param(char *s)
>>>   
>>>   void vpmu_lvtpc_update(uint32_t val)
>>>   {
>>> -    struct vpmu_struct *vpmu = vcpu_vpmu(current);
>>> +    struct vcpu *curr = current;
>>> +    struct vpmu_struct *vpmu = vcpu_vpmu(curr);
>>>   
>>>       vpmu->hw_lapic_lvtpc = PMU_APIC_VECTOR | (val & APIC_LVT_MASKED);
>>> -    apic_write(APIC_LVTPC, vpmu->hw_lapic_lvtpc);
>>> +
>>> +    /* Postpone APIC updates for PV(H) guests if PMU interrupt is pending 
> */
>>> +    if ( is_hvm_vcpu(curr) || !vpmu->xenpmu_data ||
>>> +         !(vpmu->xenpmu_data->pmu.pmu_flags & PMU_CACHED) )
>> Isn't this the pointer that pvpmu_finish() deallocates (and needs to
>> clear? If so, there's a race between it being cleared and used. If you
>> need it in places like this, perhaps you'd be better off never clearing
>> it and leaving the MFN allocated?
> 
> This will be one of the places that check for VPMU_CONTEXT_ALLOCATED.

But how will adding this check make this race free?

>>> +            if ( !has_hvm_container_vcpu(sampled) )
>>> +            {
>>> +                r->ss = cur_regs->ss;
>>> +                r->cs = cur_regs->cs;
>>> +                if ( !(sampled->arch.flags & TF_kernel_mode) )
>>> +                    *flags |= PMU_SAMPLE_USER;
>>> +            }
>>> +            else
>>> +            {
>>> +                struct segment_register seg;
>>> +
>>> +                hvm_get_segment_register(sampled, x86_seg_cs, &seg);
>>> +                r->cs = seg.sel;
>>> +                if ( (r->cs & 3) != 0 )
>>> +                    *flags |= PMU_SAMPLE_USER;
>> So is the VM86 mode case here intentionally being ignored?
> 
> We pass EFLAGS so the guest can check the VM bit. Is this not sufficient?

The PMU_SAMPLE_USER flag is misleading in that case the way you
have things coded currently. But that'll get addressed by switching
to use SS.DPL (see below) anyway.

>> And is
>> there a particular reason you look at the selector's RPL instead of
>> DPL, and CS instead of SS?
> 
> Should be DPL indeed. But why is SS better than CS?

Because SS.DPL is the canonical source for determining CPL.

Jan


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.