[Top][All Lists]
[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
- [Qemu-devel] [PATCH] qemu: enable PV EOI for qemu 1.3,
Michael S. Tsirkin <=