|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] RE: [PATCH v10 01/12] xen/vmx: let opt_ept_ad always reflect the current setting
> From: Juergen Gross <jgross@xxxxxxxx>
> Sent: Tuesday, May 19, 2020 3:21 PM
>
> In case opt_ept_ad has not been set explicitly by the user via command
> line or runtime parameter, it is treated as "no" on Avoton cpus.
>
> Change that handling by setting opt_ept_ad to 0 for this cpu type
> explicitly if no user value has been set.
>
> By putting this into the (renamed) boot time initialization of vmcs.c
> _vmx_cpu_up() can be made static.
>
> Signed-off-by: Juergen Gross <jgross@xxxxxxxx>
> Reviewed-by: Jan Beulich <jbeulich@xxxxxxxx>
Reviewed-by: Kevin Tian <kevin.tian@xxxxxxxxx>
> ---
> xen/arch/x86/hvm/vmx/vmcs.c | 22 +++++++++++++++-------
> xen/arch/x86/hvm/vmx/vmx.c | 4 +---
> xen/include/asm-x86/hvm/vmx/vmcs.h | 3 +--
> 3 files changed, 17 insertions(+), 12 deletions(-)
>
> diff --git a/xen/arch/x86/hvm/vmx/vmcs.c b/xen/arch/x86/hvm/vmx/vmcs.c
> index 4c23645454..221af9737a 100644
> --- a/xen/arch/x86/hvm/vmx/vmcs.c
> +++ b/xen/arch/x86/hvm/vmx/vmcs.c
> @@ -315,10 +315,6 @@ static int vmx_init_vmcs_config(void)
>
> if ( !opt_ept_ad )
> _vmx_ept_vpid_cap &= ~VMX_EPT_AD_BIT;
> - else if ( /* Work around Erratum AVR41 on Avoton processors. */
> - boot_cpu_data.x86 == 6 && boot_cpu_data.x86_model == 0x4d
> &&
> - opt_ept_ad < 0 )
> - _vmx_ept_vpid_cap &= ~VMX_EPT_AD_BIT;
>
> /*
> * Additional sanity checking before using EPT:
> @@ -652,7 +648,7 @@ void vmx_cpu_dead(unsigned int cpu)
> vmx_pi_desc_fixup(cpu);
> }
>
> -int _vmx_cpu_up(bool bsp)
> +static int _vmx_cpu_up(bool bsp)
> {
> u32 eax, edx;
> int rc, bios_locked, cpu = smp_processor_id();
> @@ -2108,9 +2104,21 @@ static void vmcs_dump(unsigned char ch)
> printk("**************************************\n");
> }
>
> -void __init setup_vmcs_dump(void)
> +int __init vmx_vmcs_init(void)
> {
> - register_keyhandler('v', vmcs_dump, "dump VT-x VMCSs", 1);
> + int ret;
> +
> + if ( opt_ept_ad < 0 )
> + /* Work around Erratum AVR41 on Avoton processors. */
> + opt_ept_ad = !(boot_cpu_data.x86 == 6 &&
> + boot_cpu_data.x86_model == 0x4d);
> +
> + ret = _vmx_cpu_up(true);
> +
> + if ( !ret )
> + register_keyhandler('v', vmcs_dump, "dump VT-x VMCSs", 1);
> +
> + return ret;
> }
>
> static void __init __maybe_unused build_assertions(void)
> diff --git a/xen/arch/x86/hvm/vmx/vmx.c b/xen/arch/x86/hvm/vmx/vmx.c
> index 6efa80e422..11a4dd94cf 100644
> --- a/xen/arch/x86/hvm/vmx/vmx.c
> +++ b/xen/arch/x86/hvm/vmx/vmx.c
> @@ -2482,7 +2482,7 @@ const struct hvm_function_table * __init
> start_vmx(void)
> {
> set_in_cr4(X86_CR4_VMXE);
>
> - if ( _vmx_cpu_up(true) )
> + if ( vmx_vmcs_init() )
> {
> printk("VMX: failed to initialise.\n");
> return NULL;
> @@ -2553,8 +2553,6 @@ const struct hvm_function_table * __init
> start_vmx(void)
> vmx_function_table.get_guest_bndcfgs = vmx_get_guest_bndcfgs;
> }
>
> - setup_vmcs_dump();
> -
> lbr_tsx_fixup_check();
> bdf93_fixup_check();
>
> diff --git a/xen/include/asm-x86/hvm/vmx/vmcs.h b/xen/include/asm-
> x86/hvm/vmx/vmcs.h
> index 95c1dea7b8..906810592f 100644
> --- a/xen/include/asm-x86/hvm/vmx/vmcs.h
> +++ b/xen/include/asm-x86/hvm/vmx/vmcs.h
> @@ -21,11 +21,10 @@
> #include <xen/mm.h>
>
> extern void vmcs_dump_vcpu(struct vcpu *v);
> -extern void setup_vmcs_dump(void);
> +extern int vmx_vmcs_init(void);
> extern int vmx_cpu_up_prepare(unsigned int cpu);
> extern void vmx_cpu_dead(unsigned int cpu);
> extern int vmx_cpu_up(void);
> -extern int _vmx_cpu_up(bool bsp);
> extern void vmx_cpu_down(void);
>
> struct vmcs_struct {
> --
> 2.26.1
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |