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

Re: [Xen-devel] [PATCH v10 4/9] x86/hvm: loosen up the ASSERT in hvm_cr4_guest_reserved_bits and hvm_efer_valid



On 08/12/15 12:54, Jan Beulich wrote:
>>>> On 08.12.15 at 12:37, <andrew.cooper3@xxxxxxxxxx> wrote:
>> On 08/12/15 08:28, Jan Beulich wrote:
>>>>>> On 07.12.15 at 17:48, <roger.pau@xxxxxxxxxx> wrote:
>>>> --- a/xen/arch/x86/hvm/hvm.c
>>>> +++ b/xen/arch/x86/hvm/hvm.c
>>>> @@ -1842,7 +1842,7 @@ static const char * hvm_efer_valid(const struct vcpu 
>> *v, uint64_t value,
>>>>      {
>>>>          unsigned int level;
>>>>  
>>>> -        ASSERT(v == current);
>>>> +        ASSERT(v->domain == current->domain);
>>>>          hvm_cpuid(0x80000000, &level, NULL, NULL, NULL);
>>>>          if ( level >= 0x80000001 )
>>>>          {
>>>> @@ -1912,7 +1912,7 @@ static unsigned long 
>>>> hvm_cr4_guest_reserved_bits(const 
>> struct vcpu *v,
>>>>      {
>>>>          unsigned int level;
>>>>  
>>>> -        ASSERT(v == current);
>>>> +        ASSERT(v->domain == current->domain);
>>>>          hvm_cpuid(0, &level, NULL, NULL, NULL);
>>>>          if ( level >= 1 )
>>>>              hvm_cpuid(1, NULL, NULL, &leaf1_ecx, &leaf1_edx);
>>> The only reason both functions get v passed are the two ASSERT()s.
>>> Relaxing them means you should now be passing a const struct
>>> domain * instead.
>> v is correct here.  cpuid information is genuinely per-vcpu, although
>> this isn't currently reflected in Xen's understanding of the matter.
> You can't have both: Either the ASSERT() remains as it was, or
> you stand on the position voiced along with your R-b that only
> the domain matters here (in which case passing around v just to
> obtain v->domain is bogus).

hvm_cpuid() uses current.

This behavior is problematic and I will be removing its dependence on
current with future work (passing v instead and tweaking some of the
lower level bits), but at the moment it is hard requirement.

As a result, the ASSERT(v == current) was correct.

Roger is introducing a new codepath where v != current, but v->domain ==
current->domain.  The specific cpuid leafs requested from hvm_cpuid() do
indeed only use current->domain, which is the basis of my R-b

It is very definitely wrong to remove the current check; the ASSERT()
needs to stay.  However, the relaxation of the constraint is acceptable
until the cpuid infrastructure gets fixed up, at which point the
ASSERT() can disappear.

As v is the eventual correct parameter to be passed here, I do not want
to see it changed to a domain, just for me to revert that change shortly.

Therefore, the original patch is correct and I stand by my R-b.

~Andrew

_______________________________________________
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®.