On Wed, Nov 02, 2022 at 11:18:30PM +0000, Sean Christopherson wrote: > Allocate cpus_hardware_enabled after arch hardware setup so that arch > "init" and "hardware setup" are called back-to-back and thus can be > combined in a future patch. cpus_hardware_enabled is never used before > kvm_create_vm(), i.e. doesn't have a dependency with hardware setup and > only needs to be allocated before /dev/kvm is exposed to userspace. > > Free the object before the arch hooks are invoked to maintain symmetry, > and so that arch code can move away from the hooks without having to > worry about ordering changes. > > Signed-off-by: Sean Christopherson <seanjc@xxxxxxxxxx> > --- > virt/kvm/kvm_main.c | 14 +++++++------- > 1 file changed, 7 insertions(+), 7 deletions(-) > > diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c > index e0424af52acc..8b7534cc953b 100644 > --- a/virt/kvm/kvm_main.c > +++ b/virt/kvm/kvm_main.c > @@ -5843,15 +5843,15 @@ int kvm_init(void *opaque, unsigned vcpu_size, unsigned vcpu_align, > if (r) > return r; > > + r = kvm_arch_hardware_setup(opaque); > + if (r < 0) > + goto err_hw_setup; > + > if (!zalloc_cpumask_var(&cpus_hardware_enabled, GFP_KERNEL)) { > r = -ENOMEM; > goto err_hw_enabled; > } > > - r = kvm_arch_hardware_setup(opaque); > - if (r < 0) > - goto out_free_1; > - > c.ret = &r; > c.opaque = opaque; > for_each_online_cpu(cpu) { > @@ -5937,10 +5937,10 @@ int kvm_init(void *opaque, unsigned vcpu_size, unsigned vcpu_align, > unregister_reboot_notifier(&kvm_reboot_notifier); > cpuhp_remove_state_nocalls(CPUHP_AP_KVM_STARTING); > out_free_2: > - kvm_arch_hardware_unsetup(); > -out_free_1: > free_cpumask_var(cpus_hardware_enabled); > err_hw_enabled: > + kvm_arch_hardware_unsetup(); > +err_hw_setup: > kvm_arch_exit(); > return r; > } > @@ -5967,9 +5967,9 @@ void kvm_exit(void) > cpuhp_remove_state_nocalls(CPUHP_AP_KVM_STARTING); > on_each_cpu(hardware_disable_nolock, NULL, 1); > kvm_irqfd_exit(); > + free_cpumask_var(cpus_hardware_enabled); > kvm_arch_hardware_unsetup(); > kvm_arch_exit(); > - free_cpumask_var(cpus_hardware_enabled); > kvm_vfio_ops_exit(); Looks good to me. Reviewed-by: Yuan Yao <yuan.yao@xxxxxxxxx> > } > EXPORT_SYMBOL_GPL(kvm_exit); > -- > 2.38.1.431.g37b22c650d-goog >