|
|
c461a1 |
From ba222e201e070d95e282762e890cf8e86251e84c Mon Sep 17 00:00:00 2001
|
|
|
c461a1 |
From: Eduardo Habkost <ehabkost@redhat.com>
|
|
|
c461a1 |
Date: Wed, 21 Aug 2019 22:28:26 +0200
|
|
|
c461a1 |
Subject: [PATCH 3/3] i386: Don't copy host virtual address limit
|
|
|
c461a1 |
|
|
|
c461a1 |
RH-Author: Eduardo Habkost <ehabkost@redhat.com>
|
|
|
c461a1 |
Message-id: <20190821222826.11853-1-ehabkost@redhat.com>
|
|
|
c461a1 |
Patchwork-id: 90110
|
|
|
c461a1 |
O-Subject: [RHEL-7.8 qemu-kvm PATCH] i386: Don't copy host virtual address limit
|
|
|
c461a1 |
Bugzilla: 1706658
|
|
|
c461a1 |
RH-Acked-by: Paolo Bonzini <pbonzini@redhat.com>
|
|
|
c461a1 |
RH-Acked-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
|
|
|
c461a1 |
RH-Acked-by: Bandan Das <bsd@redhat.com>
|
|
|
c461a1 |
|
|
|
c461a1 |
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1706658
|
|
|
c461a1 |
Brew: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=23157241
|
|
|
c461a1 |
Upstream: not applicable
|
|
|
c461a1 |
|
|
|
c461a1 |
The KVM code in RHEL-7 supports only 48-bit virtual addresses.
|
|
|
c461a1 |
Copying the host virtual address size to the guest is pointless
|
|
|
c461a1 |
and only makes the VM crash if the host virtual address size is
|
|
|
c461a1 |
not 48 bits.
|
|
|
c461a1 |
|
|
|
c461a1 |
Change the downstream-only code that copies host CPUID to just
|
|
|
c461a1 |
copy the physical address limit, and keep the hardcoded virtual
|
|
|
c461a1 |
address size.
|
|
|
c461a1 |
|
|
|
c461a1 |
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
|
|
|
c461a1 |
Signed-off-by: Miroslav Rezanina <mrezanin@redhat.com>
|
|
|
c461a1 |
---
|
|
|
c461a1 |
target-i386/cpu.c | 8 +++++++-
|
|
|
c461a1 |
1 file changed, 7 insertions(+), 1 deletion(-)
|
|
|
c461a1 |
|
|
|
c461a1 |
diff --git a/target-i386/cpu.c b/target-i386/cpu.c
|
|
|
c461a1 |
index c74f597..ca43268 100644
|
|
|
c461a1 |
--- a/target-i386/cpu.c
|
|
|
c461a1 |
+++ b/target-i386/cpu.c
|
|
|
c461a1 |
@@ -2841,7 +2841,13 @@ void cpu_x86_cpuid(CPUX86State *env, uint32_t index, uint32_t count,
|
|
|
c461a1 |
uint32_t _eax;
|
|
|
c461a1 |
host_cpuid(0x80000000, 0, &_eax, NULL, NULL, NULL);
|
|
|
c461a1 |
if (_eax >= 0x80000008)
|
|
|
c461a1 |
- host_cpuid(0x80000008, 0, eax, NULL, NULL, NULL);
|
|
|
c461a1 |
+ host_cpuid(0x80000008, 0, &_eax, NULL, NULL, NULL);
|
|
|
c461a1 |
+ /*
|
|
|
c461a1 |
+ * Override physical size only, as RHEL-7 KVM only supports
|
|
|
c461a1 |
+ * 48 bits virtual.
|
|
|
c461a1 |
+ */
|
|
|
c461a1 |
+ *eax &= ~0xff;
|
|
|
c461a1 |
+ *eax |= _eax & 0xff;
|
|
|
c461a1 |
}
|
|
|
c461a1 |
} else {
|
|
|
c461a1 |
if (env->features[FEAT_1_EDX] & CPUID_PSE36) {
|
|
|
c461a1 |
--
|
|
|
c461a1 |
1.8.3.1
|
|
|
c461a1 |
|