• Dan Kenigsberg's avatar
    KVM: Enhance guest cpuid management · 07716717
    Dan Kenigsberg authored
    The current cpuid management suffers from several problems, which inhibit
    passing through the host feature set to the guest:
    
     - No way to tell which features the host supports
    
      While some features can be supported with no changes to kvm, others
      need explicit support.  That means kvm needs to vet the feature set
      before it is passed to the guest.
    
     - No support for indexed or stateful cpuid entries
    
      Some cpuid entries depend on ecx as well as on eax, or on internal
      state in the processor (running cpuid multiple times with the same
      input returns different output).  The current cpuid machinery only
      supports keying on eax.
    
     - No support for save/restore/migrate
    
      The internal state above needs to be exposed to userspace so it can
      be saved or migrated.
    
    This patch adds extended cpuid support by means of three new ioctls:
    
     - KVM_GET_SUPPORTED_CPUID: get all cpuid entries the host (and kvm)
       supports
    
     - KVM_SET_CPUID2: sets the vcpu's cpuid table
    
     - KVM_GET_CPUID2: gets the vcpu's cpuid table, including hidden state
    
    [avi: fix original KVM_SET_CPUID not removing nx on non-nx hosts as it did
          before]
    Signed-off-by: default avatarDan Kenigsberg <danken@qumranet.com>
    Signed-off-by: default avatarAvi Kivity <avi@qumranet.com>
    07716717
x86.c 68.6 KB