|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v13 for-xen-4.5 17/21] x86/VPMU: Handle PMU interrupts for PV guests
>>> On 13.10.14 at 21:10, <boris.ostrovsky@xxxxxxxxxx> wrote:
> On 10/13/2014 11:29 AM, Jan Beulich wrote:
>>>>> On 03.10.14 at 23:40, <boris.ostrovsky@xxxxxxxxxx> wrote:
>>> int vpmu_do_wrmsr(unsigned int msr, uint64_t msr_content, uint64_t
> supported)
>>> {
>>> - struct vpmu_struct *vpmu = vcpu_vpmu(current);
>>> + struct vcpu *curr = current;
>>> + struct vpmu_struct *vpmu = vcpu_vpmu(curr);
>>>
>>> if ( !(vpmu_mode & (XENPMU_MODE_SELF | XENPMU_MODE_HV)) )
>>> return 0;
>>>
>>> if ( vpmu->arch_vpmu_ops && vpmu->arch_vpmu_ops->do_wrmsr )
>>> - return vpmu->arch_vpmu_ops->do_wrmsr(msr, msr_content, supported);
>>> + {
>>> + int ret = vpmu->arch_vpmu_ops->do_wrmsr(msr, msr_content,
>>> supported);
>>> +
>>> + /*
>>> + * We may have received a PMU interrupt during WRMSR handling
>>> + * and since do_wrmsr may load VPMU context we should save
>>> + * (and unload) it again.
>>> + */
>> Is this btw true also when do_wrmsr() failed? Or could you not rather
>> handle ret != 0 before the following if() (or check ret == 0 together
>> with the other conditions)?
>
> There is indeed no need to save/unload if do_wrmsr() failed but one of
> conditions in the if() that you refer to (PMU_CACHED bit test) can only
> happen if do_wrmsr() succeeded because the context could not have been
> loaded in case of failure.
Ah, okay, that's fine then. I hope I'll remember when looking over
v14+.
Jan
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |