|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v4 13/31] xen/x86: allow disabling the emulated local apic
El 07/08/15 a les 18.11, Boris Ostrovsky ha escrit:
> On 08/07/2015 11:41 AM, Roger Pau Monnà wrote:
>> El 07/08/15 a les 16.09, Boris Ostrovsky ha escrit:
>>> On 08/07/2015 06:17 AM, Roger Pau Monne wrote:
>>>> diff --git a/xen/arch/x86/hvm/vmx/vmcs.c b/xen/arch/x86/hvm/vmx/vmcs.c
>>>> index a0a97e7..5acb246 100644
>>>> --- a/xen/arch/x86/hvm/vmx/vmcs.c
>>>> +++ b/xen/arch/x86/hvm/vmx/vmcs.c
>>>> @@ -1027,6 +1027,20 @@ static int construct_vmcs(struct vcpu *v)
>>>> ASSERT(!(v->arch.hvm_vmx.exec_control &
>>>> CPU_BASED_RDTSC_EXITING));
>>>> }
>>>> + if ( !has_vlapic(d) )
>>>> + {
>>>> + /* Disable virtual apics, TPR */
>>>> + v->arch.hvm_vmx.secondary_exec_control &=
>>>> + ~(SECONDARY_EXEC_VIRTUALIZE_APIC_ACCESSES
>>>> + | SECONDARY_EXEC_APIC_REGISTER_VIRT
>>>> + | SECONDARY_EXEC_VIRTUAL_INTR_DELIVERY);
>>>> + v->arch.hvm_vmx.exec_control &= ~CPU_BASED_TPR_SHADOW;
>>>> +
>>>> + /* In turn, disable posted interrupts. */
>>>> + __vmwrite(PIN_BASED_VM_EXEC_CONTROL,
>>>> + vmx_pin_based_exec_control &
>>>> ~PIN_BASED_POSTED_INTERRUPT);
>>>> + }
>>>> +
>>>> vmx_update_cpu_exec_control(v);
>>> This is the same code as the one used right above, in 'if (
>>> is_pvh_domain(d) )' clause. Can you combine the two?
>> No, it's not the same code. The PVH code disables unrestricted guest and
>> sets the entry of the VM to be in long mode, which is not true for
>> HVMlite.
>
> Right, but the first part of that 'if' statement is the same as the one
> you are adding (including the comments). So I was suggesting
>
> if ( is_pvh_domain(d) || !has_vlapic(d))
> {
> /* Disable virtual apics, TPR */
> v->arch.hvm_vmx.secondary_exec_control &=
> ~(SECONDARY_EXEC_VIRTUALIZE_APIC_ACCESSES
> | SECONDARY_EXEC_APIC_REGISTER_VIRT
> | SECONDARY_EXEC_VIRTUAL_INTR_DELIVERY);
> v->arch.hvm_vmx.exec_control &= ~CPU_BASED_TPR_SHADOW;
>
> /* In turn, disable posted interrupts. */
> __vmwrite(PIN_BASED_VM_EXEC_CONTROL,
> vmx_pin_based_exec_control &
> ~PIN_BASED_POSTED_INTERRUPT);
> }
>
> if ( is_pvh_domain(d) )
> {
> /* Unrestricted guest (real mode for EPT) */
> v->arch.hvm_vmx.secondary_exec_control &=
> ~SECONDARY_EXEC_UNRESTRICTED_GUEST;
>
> /* Start in 64-bit mode. PVH 32bitfixme. */
> vmentry_ctl |= VM_ENTRY_IA32E_MODE; /* GUEST_EFER.LME/LMA
> ignored */
>
> ASSERT(v->arch.hvm_vmx.exec_control &
> CPU_BASED_ACTIVATE_SECONDARY_CONTROLS);
> ASSERT(v->arch.hvm_vmx.exec_control &
> CPU_BASED_ACTIVATE_MSR_BITMAP);
> ASSERT(!(v->arch.hvm_vmx.exec_control & CPU_BASED_RDTSC_EXITING));
> }
I did it as a separate condition so that when the time comes we can
completely rip the is_pvh_domain case out without having to touch this
code, but I don't have any preference TBH. I can do it that way in a
further revision if that seems preferable.
Roger.
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |