On 11/7/2023 10:55 PM, isaku.yamahata@intel.com wrote: > From: Isaku Yamahata <isaku.yamahata@intel.com> > > vmx_hardware_disable() accesses loaded_vmcss_on_cpu via > hardware_disable_all(). To allow hardware_enable/disable_all() before > kvm_init(), initialize it in vmx_hardware_setup() so that tdx module > initialization, hardware_setup method, can reference the variable. In patch 004/116, vmx_init() and kvm_x86_vendor_init() are re-ordered, tdx_hardware_setup() will be called after vmx_init(), the change of this patch seems meaningless after patch 004/116. > > Signed-off-by: Isaku Yamahata <isaku.yamahata@intel.com> > --- > arch/x86/kvm/vmx/vmx.c | 9 +++++---- > 1 file changed, 5 insertions(+), 4 deletions(-) > > diff --git a/arch/x86/kvm/vmx/vmx.c b/arch/x86/kvm/vmx/vmx.c > index 0e081c964e7a..0f3769cc3741 100644 > --- a/arch/x86/kvm/vmx/vmx.c > +++ b/arch/x86/kvm/vmx/vmx.c > @@ -8263,8 +8263,12 @@ __init int vmx_hardware_setup(void) > { > unsigned long host_bndcfgs; > struct desc_ptr dt; > + int cpu; > int r; > > + /* vmx_hardware_disable() accesses loaded_vmcss_on_cpu. */ > + for_each_possible_cpu(cpu) > + INIT_LIST_HEAD(&per_cpu(loaded_vmcss_on_cpu, cpu)); > store_idt(&dt); > host_idt_base = dt.address; > > @@ -8507,11 +8511,8 @@ static int __init vmx_init(void) > if (r) > goto err_l1d_flush; > > - for_each_possible_cpu(cpu) { > - INIT_LIST_HEAD(&per_cpu(loaded_vmcss_on_cpu, cpu)); > - > + for_each_possible_cpu(cpu) > pi_init_cpu(cpu); > - } > > cpu_emergency_register_virt_callback(vmx_emergency_disable); >
diff --git a/arch/x86/kvm/vmx/vmx.c b/arch/x86/kvm/vmx/vmx.c index 0e081c964e7a..0f3769cc3741 100644 --- a/arch/x86/kvm/vmx/vmx.c +++ b/arch/x86/kvm/vmx/vmx.c @@ -8263,8 +8263,12 @@ __init int vmx_hardware_setup(void) { unsigned long host_bndcfgs; struct desc_ptr dt; + int cpu; int r; + /* vmx_hardware_disable() accesses loaded_vmcss_on_cpu. */ + for_each_possible_cpu(cpu) + INIT_LIST_HEAD(&per_cpu(loaded_vmcss_on_cpu, cpu)); store_idt(&dt); host_idt_base = dt.address; @@ -8507,11 +8511,8 @@ static int __init vmx_init(void) if (r) goto err_l1d_flush; - for_each_possible_cpu(cpu) { - INIT_LIST_HEAD(&per_cpu(loaded_vmcss_on_cpu, cpu)); - + for_each_possible_cpu(cpu) pi_init_cpu(cpu); - } cpu_emergency_register_virt_callback(vmx_emergency_disable);