i386/kvm: add NoNonArchitecturalCoreSharing Hyper-V enlightenment
commit30d6ff662d0411fcb98a577e58582690fc2c513c
authorVitaly Kuznetsov <vkuznets@redhat.com>
Fri, 18 Oct 2019 16:39:08 +0000 (18 18:39 +0200)
committerPaolo Bonzini <pbonzini@redhat.com>
Tue, 22 Oct 2019 07:38:42 +0000 (22 09:38 +0200)
tree4a13f942c1e50fcccac5f0066c67e7bb3e222d66
parentf1733749709b2f6935493e8183afe1ce6c80d52d
i386/kvm: add NoNonArchitecturalCoreSharing Hyper-V enlightenment

Hyper-V TLFS specifies this enlightenment as:
"NoNonArchitecturalCoreSharing - Indicates that a virtual processor will never
share a physical core with another virtual processor, except for virtual
processors that are reported as sibling SMT threads. This can be used as an
optimization to avoid the performance overhead of STIBP".

However, STIBP is not the only implication. It was found that Hyper-V on
KVM doesn't pass MD_CLEAR bit to its guests if it doesn't see
NoNonArchitecturalCoreSharing bit.

KVM reports NoNonArchitecturalCoreSharing in KVM_GET_SUPPORTED_HV_CPUID to
indicate that SMT on the host is impossible (not supported of forcefully
disabled).

Implement NoNonArchitecturalCoreSharing support in QEMU as tristate:
'off' - the feature is disabled (default)
'on' - the feature is enabled. This is only safe if vCPUS are properly
 pinned and correct topology is exposed. As CPU pinning is done outside
 of QEMU the enablement decision will be made on a higher level.
'auto' - copy KVM setting. As during live migration SMT settings on the
source and destination host may differ this requires us to add a migration
blocker.

Signed-off-by: Vitaly Kuznetsov <vkuznets@redhat.com>
Message-Id: <20191018163908.10246-1-vkuznets@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
docs/hyperv.txt
target/i386/cpu.c
target/i386/cpu.h
target/i386/hyperv-proto.h
target/i386/kvm.c