• Sean Christopherson's avatar
    KVM: Use a per-CPU variable to track which CPUs have enabled virtualization · 37d25881
    Sean Christopherson authored
    Use a per-CPU variable instead of a shared bitmap to track which CPUs
    have successfully enabled virtualization hardware.  Using a per-CPU bool
    avoids the need for an additional allocation, and arguably yields easier
    to read code.  Using a bitmap would be advantageous if KVM used it to
    avoid generating IPIs to CPUs that failed to enable hardware, but that's
    an extreme edge case and not worth optimizing, and the low level helpers
    would still want to keep their individual checks as attempting to enable
    virtualization hardware when it's already enabled can be problematic,
    e.g. Intel's VMXON will fault.
    
    Opportunistically change the order in hardware_enable_nolock() to set
    the flag if and only if hardware enabling is successful, instead of
    speculatively setting the flag and then clearing it on failure.
    
    Add a comment explaining that the check in hardware_disable_nolock()
    isn't simply paranoia.  Waaay back when, commit 1b6c0168 ("KVM: Keep
    track of which cpus have virtualization enabled"), added the logic as a
    guards against CPU hotplug racing with hardware enable/disable.  Now that
    KVM has eliminated the race by taking cpu_hotplug_lock for read (via
    cpus_read_lock()) when enabling or disabling hardware, at first glance it
    appears that the check is now superfluous, i.e. it's tempting to remove
    the per-CPU flag entirely...
    Signed-off-by: default avatarSean Christopherson <seanjc@google.com>
    Message-Id: <20221130230934.1014142-47-seanjc@google.com>
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    37d25881
kvm_main.c 153 KB