qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [PATCH] qemu: enable PV EOI for qemu 1.3


From: Michael S. Tsirkin
Subject: [Qemu-devel] [PATCH] qemu: enable PV EOI for qemu 1.3
Date: Wed, 17 Oct 2012 21:40:59 +0200

Enable KVM PV EOI by default. You can still disable it with
-kvm_pv_eoi cpu flag. To avoid breaking cross-version migration,
enable only for qemu 1.3 or newer machine type.

Signed-off-by: Michael S. Tsirkin <address@hidden>
---
 hw/pc.h           |  2 ++
 hw/pc_piix.c      | 14 +++++++++++++-
 target-i386/cpu.c | 15 +++++++++++++++
 3 files changed, 30 insertions(+), 1 deletion(-)

diff --git a/hw/pc.h b/hw/pc.h
index 9923d96..344a545 100644
--- a/hw/pc.h
+++ b/hw/pc.h
@@ -210,4 +210,6 @@ void pc_system_firmware_init(MemoryRegion *rom_memory);
 
 int e820_add_entry(uint64_t, uint64_t, uint32_t);
 
+void enable_kvm_pv_eoi(void);
+
 #endif
diff --git a/hw/pc_piix.c b/hw/pc_piix.c
index 82364ab..9d4cf48 100644
--- a/hw/pc_piix.c
+++ b/hw/pc_piix.c
@@ -301,6 +301,18 @@ static void pc_init_pci(ram_addr_t ram_size,
              initrd_filename, cpu_model, 1, 1);
 }
 
+static void pc_init_pci_pv_eoi(ram_addr_t ram_size,
+                               const char *boot_device,
+                               const char *kernel_filename,
+                               const char *kernel_cmdline,
+                               const char *initrd_filename,
+                               const char *cpu_model)
+{
+    enable_kvm_pv_eoi();
+    pc_init_pci(ram_size, boot_device, kernel_filename,
+               kernel_cmdline, initrd_filename, cpu_model);
+}
+
 static void pc_init_pci_no_kvmclock(ram_addr_t ram_size,
                                     const char *boot_device,
                                     const char *kernel_filename,
@@ -353,7 +365,7 @@ static QEMUMachine pc_machine_v1_3 = {
     .name = "pc-1.3",
     .alias = "pc",
     .desc = "Standard PC",
-    .init = pc_init_pci,
+    .init = pc_init_pci_pv_eoi,
     .max_cpus = 255,
     .is_default = 1,
 };
diff --git a/target-i386/cpu.c b/target-i386/cpu.c
index f3708e6..a4a8a02 100644
--- a/target-i386/cpu.c
+++ b/target-i386/cpu.c
@@ -1097,6 +1097,8 @@ static void x86_cpuid_set_tsc_freq(Object *obj, Visitor 
*v, void *opaque,
     cpu->env.tsc_khz = value / 1000;
 }
 
+static bool kvm_pv_eoi_enabled;
+
 static int cpu_x86_find_by_name(x86_def_t *x86_cpu_def, const char *cpu_model)
 {
     unsigned int i;
@@ -1135,6 +1137,8 @@ static int cpu_x86_find_by_name(x86_def_t *x86_cpu_def, 
const char *cpu_model)
         (1 << KVM_FEATURE_ASYNC_PF) | 
         (1 << KVM_FEATURE_STEAL_TIME) |
         (1 << KVM_FEATURE_CLOCKSOURCE_STABLE_BIT);
+    if (kvm_pv_eoi_enabled)
+        plus_kvm_features |= (0x1 << KVM_FEATURE_PV_EOI);
 #else
     plus_kvm_features = 0;
 #endif
@@ -1953,3 +1957,14 @@ static void x86_cpu_register_types(void)
 }
 
 type_init(x86_cpu_register_types)
+
+/* Called from hw/pc_piix.c but there is no header
+ * both files include to put this into.
+ * Put it here to silence compiler warning.
+ */
+void enable_kvm_pv_eoi(void);
+
+void enable_kvm_pv_eoi(void)
+{
+       kvm_pv_eoi_enabled = true;
+}
-- 
MST



reply via email to

[Prev in Thread] Current Thread [Next in Thread]