|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v4 13/17] x86/VPMU: Add privileged PMU mode
>>> On 04.02.14 at 17:13, Boris Ostrovsky <boris.ostrovsky@xxxxxxxxxx> wrote:
> On 02/04/2014 11:01 AM, Jan Beulich wrote:
>>>>> On 04.02.14 at 16:53, Boris Ostrovsky <boris.ostrovsky@xxxxxxxxxx> wrote:
>>> On 02/04/2014 06:31 AM, Jan Beulich wrote:
>>>>>>> On 21.01.14 at 20:08, Boris Ostrovsky <boris.ostrovsky@xxxxxxxxxx>
>>>>>>> wrote:
>>>>> + gregs = &v->arch.vpmu.xenpmu_data->pmu.r.regs;
>>>>> + gregs->cs = cs;
>>>> And now you store a NUL selector (i.e. just the RPL bits) into the
>>>> output field?
>>>>> }
>>>>> - else if ( !is_control_domain(current->domain) &&
>>>>> - !is_idle_vcpu(current) )
>>>>> + else
>>>>> {
>>>>> - /* PV guest */
>>>>> + /* HVM guest */
>>>>> + struct segment_register cs;
>>>>> +
>>>>> gregs = guest_cpu_user_regs();
>>>>> memcpy(&v->arch.vpmu.xenpmu_data->pmu.r.regs,
>>>>> gregs, sizeof(struct cpu_user_regs));
>>>>> +
>>>>> + hvm_get_segment_register(current, x86_seg_cs, &cs);
>>>>> + gregs = &v->arch.vpmu.xenpmu_data->pmu.r.regs;
>>>>> + gregs->cs = cs.attr.fields.dpl;
>>>> And here too? If that's intended, a code comment is a must.
>>> This is HVM-only path, PVH or PV don't go here so cs should be valid.
>> Isn't the reply of mine a few lines up in PV code? And why would
>> the selector being wrong for HVM be okay?
>
>
> This clause is for privileged profiling: we are in PV clause even though
> the interrupt is taken by an HVM guest.
>
> The diff is somewhat difficult to follow so here is the flow:
>
> // in privileged mode 'v' is dom0's CPU.
> if ( !is_hvm_domain(v->domain) || (vpmu_mode & XENPMU_MODE_PRIV) )
> {
> if ( !is_hvm_domain(current->domain) )
> {
> // either PV (including dom0) or Xen is interrupted
> }
> else
> {
> // This is the clause we are discussing. 'current' is HVM
> hvm_get_segment_register(current, x86_seg_cs, &cs);
> }
> send_guest_vcpu_virq(v, VIRQ_XENPMU);
> return 1;
> }
>
> So I think CS should be correct for the guest, no?
Honestly - I can't tell. All I can tell is that there's a bogus setting
of cs to 0 or 3 (depending on whether in kernel mode) or to the
dpl field of the descriptor read from the hardware. All of which
are wrong without a cleat comment stating why doing it this way
is okay/acceptable/necessary-for-the-time-being.
So either drop this bogus code, or comment it properly.
Jan
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |