|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v14 11/17] pvh: Set up more PV stuff in set_info_guest
>>> On 07.11.13 at 16:51, George Dunlap <george.dunlap@xxxxxxxxxxxxx> wrote:
> On 04/11/13 16:53, Jan Beulich wrote:
>>>>> On 04.11.13 at 13:15, George Dunlap <george.dunlap@xxxxxxxxxxxxx> wrote:
>>> @@ -728,8 +740,21 @@ int arch_set_info_guest(
>>>
>>> if ( has_hvm_container_vcpu(v) )
>>> {
>>> - hvm_set_info_guest(v);
>>> - goto out;
>>> + hvm_set_info_guest(v, compat ? 0 : c.nat->gs_base_kernel);
>> I'm afraid this isn't correct - so far gs_base_kernel didn't get used
>> for HVM guests, i.e. you're changing behavior here (even if only
>> in a - presumably - benign way).
>>
>>> +
>>> + if ( is_hvm_vcpu(v) || v->is_initialised )
>>> + goto out;
>>> +
>>> + cr3_gfn = xen_cr3_to_pfn(c.nat->ctrlreg[3]);
>> I'd recommend against using this PV construct - the 32-bit
>> counterpart won't be correct to be used here once 32-bit
>> support gets added.
>
> So the plan would be that once we support 32-bit, I'd just copy the code
> from below:
>
> if ( !compat )
> cr3_gfn = xen_cr3_to_pfn(c.nat->ctrlreg[3]);
> else
> cr3_gfn = compat_cr3_to_pfn(c.cmp->ctrlreg[3]);
>
> But since we know that compat is false here, it seems a bit silly to
> have the if() statement.
>
> But there should be a "PVH 32bitfixme" here -- is that enough for now?
Sure, but that wasn't my point. I was recommending against
*_cr3_to_pfn() altogether here. Just use the control register
value shifted right by 12 bits.
>>> @@ -1426,6 +1426,11 @@ static void vmx_set_info_guest(struct vcpu *v)
>>> __vmwrite(GUEST_INTERRUPTIBILITY_INFO, intr_shadow);
>>> }
>>>
>>> + /* PVH 32bitfixme */
>>> + if ( is_pvh_vcpu(v) )
>>> + __vmwrite(GUEST_GS_BASE, gs_base_kernel);
>> Oh, I see, you suppress this here. I'd really suggest adjusting the
>> caller, then you don't need to do anything here afaict.
>
> What do you mean "adjusting the caller"? What we want for HVM guests is
> for this field to be entirely left alone, isn't it?
>
> If we set GUEST_GS_BASE unconditionally here, the only way to effect "no
> change" is to read it and pass in the existing value, which seems kind
> of pointless.
Oh, right, I didn't pay attention to the calling path also being
used for HVM, and us not wanting to write zero here in that
case. Or maybe I did, but concluded that the code can be used
only for initial state setup, in which case writing zero would be
benign.
Jan
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |