• S
    KVM: x86: Introduce kvm_cpu_caps to replace runtime CPUID masking · 66a6950f
    Sean Christopherson 提交于
    Calculate the CPUID masks for KVM_GET_SUPPORTED_CPUID at load time using
    what is effectively a KVM-adjusted copy of boot_cpu_data, or more
    precisely, the x86_capability array in boot_cpu_data.
    
    In terms of KVM support, the vast majority of CPUID feature bits are
    constant, and *all* feature support is known at KVM load time.  Rather
    than apply boot_cpu_data, which is effectively read-only after init,
    at runtime, copy it into a KVM-specific array and use *that* to mask
    CPUID registers.
    
    In additional to consolidating the masking, kvm_cpu_caps can be adjusted
    by SVM/VMX at load time and thus eliminate all feature bit manipulation
    in ->set_supported_cpuid().
    
    Opportunistically clean up a few warts:
    
      - Replace bare "unsigned" with "unsigned int" when a feature flag is
        captured in a local variable, e.g. f_nx.
    
      - Sort the CPUID masks by function, index and register (alphabetically
        for registers, i.e. EBX comes before ECX/EDX).
    
      - Remove the superfluous /* cpuid 7.0.ecx */ comments.
    
    No functional change intended.
    Signed-off-by: NSean Christopherson <sean.j.christopherson@intel.com>
    [Call kvm_set_cpu_caps from kvm_x86_ops->hardware_setup due to fixed
     GBPAGES patch. - Paolo]
    Signed-off-by: NPaolo Bonzini <pbonzini@redhat.com>
    66a6950f
cpuid.c 26.8 KB