Skip to content
  • Eduardo Habkost's avatar
    target-i386: Add "filtered-features" property to X86CPU · 7e5292b5
    Eduardo Habkost authored
    
    
    This property will contain all the features that were removed from the
    CPU because they are not supported by the host.
    
    This way, libvirt or other management tools can emulate the
    check/enforce behavior by checking if filtered-properties is all zeroes,
    before starting the guest.
    
    Example output where some features were missing:
    
      $ qemu-system-x86_64 -enable-kvm -cpu Haswell,check -S \
        -qmp unix:/tmp/m,server,nowait
      warning: host doesn't support requested feature: CPUID.01H:ECX.fma [bit 12]
      warning: host doesn't support requested feature: CPUID.01H:ECX.movbe [bit 22]
      warning: host doesn't support requested feature: CPUID.01H:ECX.tsc-deadline [bit 24]
      warning: host doesn't support requested feature: CPUID.01H:ECX.xsave [bit 26]
      warning: host doesn't support requested feature: CPUID.01H:ECX.avx [bit 28]
      warning: host doesn't support requested feature: CPUID.07H:EBX.fsgsbase [bit 0]
      warning: host doesn't support requested feature: CPUID.07H:EBX.bmi1 [bit 3]
      warning: host doesn't support requested feature: CPUID.07H:EBX.hle [bit 4]
      warning: host doesn't support requested feature: CPUID.07H:EBX.avx2 [bit 5]
      warning: host doesn't support requested feature: CPUID.07H:EBX.smep [bit 7]
      warning: host doesn't support requested feature: CPUID.07H:EBX.bmi2 [bit 8]
      warning: host doesn't support requested feature: CPUID.07H:EBX.erms [bit 9]
      warning: host doesn't support requested feature: CPUID.07H:EBX.invpcid [bit 10]
      warning: host doesn't support requested feature: CPUID.07H:EBX.rtm [bit 11]
      [...]
      $ ./QMP/qmp --path=/tmp/m \
        qom-get --path=/machine/icc-bridge/icc/child[0] \
                --property=filtered-features
      item[0].cpuid-register: EDX
      item[0].cpuid-input-eax: 2147483658
      item[0].features: 0
      item[1].cpuid-register: EAX
      item[1].cpuid-input-eax: 1073741825
      item[1].features: 0
      item[2].cpuid-register: EDX
      item[2].cpuid-input-eax: 3221225473
      item[2].features: 0
      item[3].cpuid-register: ECX
      item[3].cpuid-input-eax: 2147483649
      item[3].features: 0
      item[4].cpuid-register: EDX
      item[4].cpuid-input-eax: 2147483649
      item[4].features: 0
      item[5].cpuid-register: EBX
      item[5].cpuid-input-eax: 7
      item[5].features: 4025
      item[5].cpuid-input-ecx: 0
      item[6].cpuid-register: ECX
      item[6].cpuid-input-eax: 1
      item[6].features: 356519936
      item[7].cpuid-register: EDX
      item[7].cpuid-input-eax: 1
      item[7].features: 0
    
    Example output when no feature is missing:
    
      $ qemu-system-x86_64 -enable-kvm -cpu Nehalem,enforce -S \
        -qmp unix:/tmp/m,server,nowait
      [...]
      $ ./QMP/qmp --path=/tmp/m \
        qom-get --path=/machine/icc-bridge/icc/child[0] \
                --property=filtered-features
      item[0].cpuid-register: EDX
      item[0].cpuid-input-eax: 2147483658
      item[0].features: 0
      item[1].cpuid-register: EAX
      item[1].cpuid-input-eax: 1073741825
      item[1].features: 0
      item[2].cpuid-register: EDX
      item[2].cpuid-input-eax: 3221225473
      item[2].features: 0
      item[3].cpuid-register: ECX
      item[3].cpuid-input-eax: 2147483649
      item[3].features: 0
      item[4].cpuid-register: EDX
      item[4].cpuid-input-eax: 2147483649
      item[4].features: 0
      item[5].cpuid-register: EBX
      item[5].cpuid-input-eax: 7
      item[5].features: 0
      item[5].cpuid-input-ecx: 0
      item[6].cpuid-register: ECX
      item[6].cpuid-input-eax: 1
      item[6].features: 0
      item[7].cpuid-register: EDX
      item[7].cpuid-input-eax: 1
      item[7].features: 0
    
    Signed-off-by: default avatarEduardo Habkost <ehabkost@redhat.com>
    Reviewed-by: default avatarEric Blake <eblake@redhat.com>
    Signed-off-by: default avatarAndreas Färber <afaerber@suse.de>
    7e5292b5