• Sean Christopherson's avatar
    KVM: Move initialization of preempt notifier to kvm_vcpu_init() · d5c48deb
    Sean Christopherson authored
    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: default avatarChristoffer Dall <christoffer.dall@arm.com>
    Signed-off-by: default avatarSean Christopherson <sean.j.christopherson@intel.com>
    Reviewed-by: default avatarCornelia Huck <cohuck@redhat.com>
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    d5c48deb
kvm_main.c 106 KB