On Thu, Dec 09, 2021 at 05:30:40PM -0500, Paolo Bonzini wrote:
AMD proceessors define an address range that is reserved by HyperTransport and causes a failure if used for guest physical addresses. Avoid selftests failures by reserving those guest physical addresses; the rules are:
On parts with <40 bits, its fully hidden from software.
Before Fam17h, it was always 12G just below 1T, even if there was more
RAM above this location. In this case we just not use any RAM above 1T.
- On Fam17h and later, it is variable based on SME, and is either just
below 2^48 (no encryption) or 2^43 (encryption).
Fixes: ef4c9f4f6546 ("KVM: selftests: Fix 32-bit truncation of vm_get_max_gfn()") Cc: stable@vger.kernel.org Cc: David Matlack dmatlack@google.com Reported-by: Maxim Levitsky mlevitsk@redhat.com Signed-off-by: Paolo Bonzini pbonzini@redhat.com Message-Id: 20210805105423.412878-1-pbonzini@redhat.com Signed-off-by: Paolo Bonzini pbonzini@redhat.com
.../testing/selftests/kvm/include/kvm_util.h | 9 +++ tools/testing/selftests/kvm/lib/kvm_util.c | 2 +- .../selftests/kvm/lib/x86_64/processor.c | 69 +++++++++++++++++++ 3 files changed, 79 insertions(+), 1 deletion(-)
diff --git a/tools/testing/selftests/kvm/include/kvm_util.h b/tools/testing/selftests/kvm/include/kvm_util.h index 6a1a37f30494..da2b702da71a 100644 --- a/tools/testing/selftests/kvm/include/kvm_util.h +++ b/tools/testing/selftests/kvm/include/kvm_util.h @@ -71,6 +71,15 @@ enum vm_guest_mode { #endif +#if defined(__x86_64__) +unsigned long vm_compute_max_gfn(struct kvm_vm *vm); +#else +static inline unsigned long vm_compute_max_gfn(struct kvm_vm *vm) +{
- return ((1ULL << vm->pa_bits) >> vm->page_shift) - 1;
+}
This breaks compiling on non-x86 architectures because of how we keep the vm struct private. I'll send a patch that puts vm_compute_max_gfn in lib/kvm_util.c but as a weak symbol.
(Maybe we should stop keeping the vm struct private...)
Thanks, drew