On Wed, 18 Dec 2019 13:55:17 -0800 Sean Christopherson <sean.j.christopherson@xxxxxxxxx> wrote: > Initialize the preempt notifier immediately in kvm_vcpu_init() to pave > the way for removing kvm_arch_vcpu_setup(), i.e. to allow arch specific > code to call vcpu_load() during kvm_arch_vcpu_create(). > > Back when preemption support was added, the location of the call to init > the preempt notifier was perfectly sane. The overall vCPU creation flow > featured a single arch specific hook and the preempt notifer was used > immediately after its initialization (by vcpu_load()). E.g.: > > vcpu = kvm_arch_ops->vcpu_create(kvm, n); > if (IS_ERR(vcpu)) > return PTR_ERR(vcpu); > > preempt_notifier_init(&vcpu->preempt_notifier, &kvm_preempt_ops); > > vcpu_load(vcpu); > r = kvm_mmu_setup(vcpu); > vcpu_put(vcpu); > if (r < 0) > goto free_vcpu; > > Today, the call to preempt_notifier_init() is sandwiched between two > arch specific calls, kvm_arch_vcpu_create() and kvm_arch_vcpu_setup(), > which needlessly forces x86 (and possibly others?) to split its vCPU > creation flow. Init the preempt notifier prior to any arch specific > call so that each arch can independently decide how best to organize > its creation flow. > > Acked-by: Christoffer Dall <christoffer.dall@xxxxxxx> > Signed-off-by: Sean Christopherson <sean.j.christopherson@xxxxxxxxx> > --- > virt/kvm/kvm_main.c | 3 +-- > 1 file changed, 1 insertion(+), 2 deletions(-) Reviewed-by: Cornelia Huck <cohuck@xxxxxxxxxx>