All of lore.kernel.org
 help / color / mirror / Atom feed
From: Paolo Bonzini <pbonzini@redhat.com>
To: qemu-devel@nongnu.org
Cc: Ani Sinha <anisinha@redhat.com>
Subject: [PULL 10/17] kvm/i386: replace identity_base variable with a constant
Date: Wed, 11 Sep 2024 14:33:35 +0200	[thread overview]
Message-ID: <20240911123342.339482-11-pbonzini@redhat.com> (raw)
In-Reply-To: <20240911123342.339482-1-pbonzini@redhat.com>

identity_base variable is first initialzied to address 0xfffbc000 and then
kvm_vm_set_identity_map_addr() overrides this value to address 0xfeffc000.
The initial address to which the variable was initialized was never used. Clean
everything up, placing 0xfeffc000 in a preprocessor constant.

Reported-by: Ani Sinha <anisinha@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
 target/i386/kvm/kvm.c | 36 ++++++++++++++++++------------------
 1 file changed, 18 insertions(+), 18 deletions(-)

diff --git a/target/i386/kvm/kvm.c b/target/i386/kvm/kvm.c
index 599faf0ac6e..5422fd7fa7d 100644
--- a/target/i386/kvm/kvm.c
+++ b/target/i386/kvm/kvm.c
@@ -81,6 +81,16 @@
     do { } while (0)
 #endif
 
+/*
+ * On older Intel CPUs, KVM uses vm86 mode to emulate 16-bit code directly.
+ * In order to use vm86 mode, an EPT identity map and a TSS  are needed.
+ * Since these must be part of guest physical memory, we need to allocate
+ * them, both by setting their start addresses in the kernel and by
+ * creating a corresponding e820 entry. We need 4 pages before the BIOS,
+ * so this value allows up to 16M BIOSes.
+ */
+#define KVM_IDENTITY_BASE 0xfeffc000
+
 /* From arch/x86/kvm/lapic.h */
 #define KVM_APIC_BUS_CYCLE_NS       1
 #define KVM_APIC_BUS_FREQUENCY      (1000000000ULL / KVM_APIC_BUS_CYCLE_NS)
@@ -3036,18 +3046,9 @@ static int kvm_vm_enable_triple_fault_event(KVMState *s)
     return ret;
 }
 
-static int kvm_vm_set_identity_map_addr(KVMState *s, uint64_t *identity_base)
+static int kvm_vm_set_identity_map_addr(KVMState *s, uint64_t identity_base)
 {
-    /*
-     * On older Intel CPUs, KVM uses vm86 mode to emulate 16-bit code directly.
-     * In order to use vm86 mode, an EPT identity map and a TSS  are needed.
-     * Since these must be part of guest physical memory, we need to allocate
-     * them, both by setting their start addresses in the kernel and by
-     * creating a corresponding e820 entry. We need 4 pages before the BIOS,
-     * so this value allows up to 16M BIOSes.
-     */
-    *identity_base = 0xfeffc000;
-    return kvm_vm_ioctl(s, KVM_SET_IDENTITY_MAP_ADDR, identity_base);
+    return kvm_vm_ioctl(s, KVM_SET_IDENTITY_MAP_ADDR, &identity_base);
 }
 
 static int kvm_vm_set_nr_mmu_pages(KVMState *s)
@@ -3064,10 +3065,9 @@ static int kvm_vm_set_nr_mmu_pages(KVMState *s)
     return ret;
 }
 
-static int kvm_vm_set_tss_addr(KVMState *s, uint64_t identity_base)
+static int kvm_vm_set_tss_addr(KVMState *s, uint64_t tss_base)
 {
-    /* Set TSS base one page after EPT identity map. */
-    return kvm_vm_ioctl(s, KVM_SET_TSS_ADDR, identity_base);
+    return kvm_vm_ioctl(s, KVM_SET_TSS_ADDR, tss_base);
 }
 
 static int kvm_vm_enable_disable_exits(KVMState *s)
@@ -3195,7 +3195,6 @@ static void kvm_vm_enable_energy_msrs(KVMState *s)
 
 int kvm_arch_init(MachineState *ms, KVMState *s)
 {
-    uint64_t identity_base = 0xfffbc000;
     int ret;
     struct utsname utsname;
     Error *local_err = NULL;
@@ -3263,18 +3262,19 @@ int kvm_arch_init(MachineState *ms, KVMState *s)
     uname(&utsname);
     lm_capable_kernel = strcmp(utsname.machine, "x86_64") == 0;
 
-    ret = kvm_vm_set_identity_map_addr(s, &identity_base);
+    ret = kvm_vm_set_identity_map_addr(s, KVM_IDENTITY_BASE);
     if (ret < 0) {
         return ret;
     }
 
-    ret = kvm_vm_set_tss_addr(s, identity_base + 0x1000);
+    /* Set TSS base one page after EPT identity map. */
+    ret = kvm_vm_set_tss_addr(s, KVM_IDENTITY_BASE + 0x1000);
     if (ret < 0) {
         return ret;
     }
 
     /* Tell fw_cfg to notify the BIOS to reserve the range. */
-    e820_add_entry(identity_base, 0x4000, E820_RESERVED);
+    e820_add_entry(KVM_IDENTITY_BASE, 0x4000, E820_RESERVED);
 
     ret = kvm_vm_set_nr_mmu_pages(s);
     if (ret < 0) {
-- 
2.46.0



  parent reply	other threads:[~2024-09-11 12:37 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-09-11 12:33 [PULL 00/17] Misc patches for 2024-09-11 Paolo Bonzini
2024-09-11 12:33 ` [PULL 01/17] target/i386: Delete duplicated macro definition CR4_FRED_MASK Paolo Bonzini
2024-09-11 12:33 ` [PULL 02/17] target/i386: Add VMX control bits for nested FRED support Paolo Bonzini
2024-09-11 12:33 ` [PULL 03/17] target/i386: Raise the highest index value used for any VMCS encoding Paolo Bonzini
2024-09-11 12:33 ` [PULL 04/17] tests/unit: remove block layer code from test-nested-aio-poll Paolo Bonzini
2024-09-11 12:33 ` [PULL 05/17] hw/i386/pc: Add a description for the i8042 property Paolo Bonzini
2024-09-11 12:33 ` [PULL 06/17] kvm/i386: make kvm_filter_msr() and related definitions private to kvm module Paolo Bonzini
2024-09-11 12:33 ` [PULL 07/17] kvm/i386: fix return values of is_host_cpu_intel() Paolo Bonzini
2024-09-11 12:33 ` [PULL 08/17] kvm: replace fprintf with error_report()/printf() in kvm_init() Paolo Bonzini
2024-09-11 12:33 ` [PULL 09/17] kvm/i386: refactor kvm_arch_init and split it into smaller functions Paolo Bonzini
2024-09-11 12:33 ` Paolo Bonzini [this message]
2024-09-11 12:33 ` [PULL 11/17] kvm: refactor core virtual machine creation into its own function Paolo Bonzini
2024-09-11 12:33 ` [PULL 12/17] target/i386: Expose IBPB-BRTYPE and SBPB CPUID bits to the guest Paolo Bonzini
2024-09-11 12:33 ` [PULL 13/17] hw: Remove unused inclusion of hw/char/serial.h Paolo Bonzini
2024-09-11 12:33 ` [PULL 14/17] hw/char/serial.h: Extract serial-isa.h Paolo Bonzini
2024-09-11 12:33 ` [PULL 15/17] hw/char: Extract serial-mm Paolo Bonzini
2024-09-11 12:33 ` [PULL 16/17] virtio-9p: remove virtfs-proxy-helper Paolo Bonzini
2024-09-11 12:57   ` Christian Schoenebeck via
2024-09-11 15:31     ` Paolo Bonzini
2024-09-11 12:33 ` [PULL 17/17] minikconf: print error entirely on stderr Paolo Bonzini
2024-09-12 15:17 ` [PULL 00/17] Misc patches for 2024-09-11 Peter Maydell

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20240911123342.339482-11-pbonzini@redhat.com \
    --to=pbonzini@redhat.com \
    --cc=anisinha@redhat.com \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.