[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH] kvm: Combine all kvm stubs in a single file and com
From: |
Stefan Weil |
Subject: |
[Qemu-devel] [PATCH] kvm: Combine all kvm stubs in a single file and compile it only once |
Date: |
Sun, 21 Jul 2013 12:57:21 +0200 |
The KVM stub variables and functions don't depend on target specific data
types, so it is possible to compile kvm-stub.c only once.
Integrating the target specific KVM stubs for ARM, I386 and PPC in the
common kvm-stub.c further simplifies the build environment and allows
removing CONFIG_NO_KVM.
Instead of 53 kvm-stub.o files, there is now only one file.
abort() is replaced by g_assert_not_reached() which gives better diagnostic
messages when it is called.
Signed-off-by: Stefan Weil <address@hidden>
---
The resulting binary is slightly larger than before because it
includes more stub functions. It could be made smaller by adding
separate stubs/kvm-stub-arm.c, stubs/kvm-stub-i386.c and
stubs/kvm-stub-ppc.c files. Using alias symbols for the stub
functions would reduce the size further, but I don't think
the size is critical here.
Should we call g_assert_not_reached() in more (all?) stub functions?
If the patch is accepted, a similar modification could be done
for xen-stub.c.
Stefan
Makefile.target | 1 -
stubs/Makefile.objs | 1 +
kvm-stub.c => stubs/kvm-stub.c | 70 ++++++++++++++++++++++++++++++++++++----
target-arm/Makefile.objs | 1 -
target-arm/kvm-stub.c | 23 -------------
target-i386/Makefile.objs | 1 -
target-i386/kvm-stub.c | 18 -----------
target-ppc/Makefile.objs | 1 -
target-ppc/kvm-stub.c | 18 -----------
9 files changed, 64 insertions(+), 70 deletions(-)
rename kvm-stub.c => stubs/kvm-stub.c (63%)
delete mode 100644 target-arm/kvm-stub.c
delete mode 100644 target-i386/kvm-stub.c
delete mode 100644 target-ppc/kvm-stub.c
diff --git a/Makefile.target b/Makefile.target
index 9a49852..21a817f 100644
--- a/Makefile.target
+++ b/Makefile.target
@@ -84,7 +84,6 @@ obj-y += fpu/softfloat.o
obj-y += target-$(TARGET_BASE_ARCH)/
obj-y += disas.o
obj-$(CONFIG_GDBSTUB_XML) += gdbstub-xml.o
-obj-$(CONFIG_NO_KVM) += kvm-stub.o
#########################################################
# Linux user emulator target
diff --git a/stubs/Makefile.objs b/stubs/Makefile.objs
index 9b701b4..44bf573 100644
--- a/stubs/Makefile.objs
+++ b/stubs/Makefile.objs
@@ -10,6 +10,7 @@ stub-obj-y += fdset-remove-fd.o
stub-obj-y += get-fd.o
stub-obj-y += get-vm-name.o
stub-obj-y += iothread-lock.o
+stub-obj-y += kvm-stub.o
stub-obj-y += migr-blocker.o
stub-obj-y += mon-is-qmp.o
stub-obj-y += mon-printf.o
diff --git a/kvm-stub.c b/stubs/kvm-stub.c
similarity index 63%
rename from kvm-stub.c
rename to stubs/kvm-stub.c
index 370c837..cc0fd06 100644
--- a/kvm-stub.c
+++ b/stubs/kvm-stub.c
@@ -10,14 +10,33 @@
*
*/
+/* We don't want to include exec/poison.h here. */
+#define HW_POISON_H
+
+/* Several data types are only used for unused function arguments
+ or in files which are included.
+ Define them here to avoid include dependencies. */
+
+typedef struct CPUArchState CPUArchState;
+typedef unsigned target_ulong;
+
+typedef struct ARMCPU ARMCPU;
+
+typedef struct CPUPPCState CPUPPCState;
+typedef struct PowerPCCPU PowerPCCPU;
+
+extern unsigned ram_size;
+
#include "qemu-common.h"
#include "hw/hw.h"
-#include "cpu.h"
-#include "sysemu/kvm.h"
-#ifndef CONFIG_USER_ONLY
+/* Pretend that cpu.h was included to get all prototypes. */
+#define NEED_CPU_H
+#include "sysemu/kvm.h"
+#include "hw/ppc/openpic.h"
#include "hw/pci/msi.h"
-#endif
+#include "target-arm/kvm_arm.h"
+#include "target-ppc/kvm_ppc.h"
KVMState *kvm_state;
bool kvm_kernel_irqchip;
@@ -74,6 +93,11 @@ int kvm_has_pit_state2(void)
return 0;
}
+void *kvm_ram_alloc(ram_addr_t size)
+{
+ g_assert_not_reached();
+}
+
void kvm_setup_guest_memory(void *start, size_t size)
{
}
@@ -102,7 +126,7 @@ void kvm_remove_all_breakpoints(CPUState *cpu)
#ifndef _WIN32
int kvm_set_signal_mask(CPUState *cpu, const sigset_t *sigset)
{
- abort();
+ g_assert_not_reached();
}
#endif
@@ -116,7 +140,8 @@ int kvm_on_sigbus(int code, void *addr)
return 1;
}
-#ifndef CONFIG_USER_ONLY
+/* Stubs for system emulation. */
+
int kvm_irqchip_add_msi_route(KVMState *s, MSIMessage msg)
{
return -ENOSYS;
@@ -144,4 +169,35 @@ int kvm_irqchip_remove_irqfd_notifier(KVMState *s,
EventNotifier *n, int virq)
{
return -ENOSYS;
}
-#endif
+
+/* Stubs for target-arm. */
+
+bool write_kvmstate_to_list(ARMCPU *cpu)
+{
+ g_assert_not_reached();
+}
+
+bool write_list_to_kvmstate(ARMCPU *cpu)
+{
+ g_assert_not_reached();
+}
+
+/* Stubs for target-i386. */
+
+uint32_t kvm_arch_get_supported_cpuid(KVMState *s, uint32_t function,
+ uint32_t index, int reg)
+{
+ g_assert_not_reached();
+}
+
+/* Stubs for target-ppc. */
+
+int kvm_openpic_connect_vcpu(DeviceState *d, CPUState *cs)
+{
+ return -EINVAL;
+}
+
+void kvmppc_init(void)
+{
+ g_assert_not_reached();
+}
diff --git a/target-arm/Makefile.objs b/target-arm/Makefile.objs
index 4a6e52e..d89b57c 100644
--- a/target-arm/Makefile.objs
+++ b/target-arm/Makefile.objs
@@ -1,6 +1,5 @@
obj-y += arm-semi.o
obj-$(CONFIG_SOFTMMU) += machine.o
obj-$(CONFIG_KVM) += kvm.o
-obj-$(CONFIG_NO_KVM) += kvm-stub.o
obj-y += translate.o op_helper.o helper.o cpu.o
obj-y += neon_helper.o iwmmxt_helper.o
diff --git a/target-arm/kvm-stub.c b/target-arm/kvm-stub.c
deleted file mode 100644
index cd1849f..0000000
--- a/target-arm/kvm-stub.c
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * QEMU KVM ARM specific function stubs
- *
- * Copyright Linaro Limited 2013
- *
- * Author: Peter Maydell <address@hidden>
- *
- * This work is licensed under the terms of the GNU GPL, version 2 or later.
- * See the COPYING file in the top-level directory.
- *
- */
-#include "qemu-common.h"
-#include "kvm_arm.h"
-
-bool write_kvmstate_to_list(ARMCPU *cpu)
-{
- abort();
-}
-
-bool write_list_to_kvmstate(ARMCPU *cpu)
-{
- abort();
-}
diff --git a/target-i386/Makefile.objs b/target-i386/Makefile.objs
index c1d4f05..963698a 100644
--- a/target-i386/Makefile.objs
+++ b/target-i386/Makefile.objs
@@ -3,6 +3,5 @@ obj-y += excp_helper.o fpu_helper.o cc_helper.o int_helper.o
svm_helper.o
obj-y += smm_helper.o misc_helper.o mem_helper.o seg_helper.o
obj-$(CONFIG_SOFTMMU) += machine.o arch_memory_mapping.o arch_dump.o
obj-$(CONFIG_KVM) += kvm.o hyperv.o
-obj-$(CONFIG_NO_KVM) += kvm-stub.o
obj-$(CONFIG_LINUX_USER) += ioport-user.o
obj-$(CONFIG_BSD_USER) += ioport-user.o
diff --git a/target-i386/kvm-stub.c b/target-i386/kvm-stub.c
deleted file mode 100644
index 11429c4..0000000
--- a/target-i386/kvm-stub.c
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
- * QEMU KVM x86 specific function stubs
- *
- * Copyright Linaro Limited 2012
- *
- * Author: Peter Maydell <address@hidden>
- *
- * This work is licensed under the terms of the GNU GPL, version 2 or later.
- * See the COPYING file in the top-level directory.
- *
- */
-#include "qemu-common.h"
-#include "kvm_i386.h"
-
-bool kvm_allows_irq0_override(void)
-{
- return 1;
-}
diff --git a/target-ppc/Makefile.objs b/target-ppc/Makefile.objs
index 6e78cb3..2c43c34 100644
--- a/target-ppc/Makefile.objs
+++ b/target-ppc/Makefile.objs
@@ -5,7 +5,6 @@ obj-y += machine.o mmu_helper.o mmu-hash32.o
obj-$(TARGET_PPC64) += mmu-hash64.o
endif
obj-$(CONFIG_KVM) += kvm.o kvm_ppc.o
-obj-$(CONFIG_NO_KVM) += kvm-stub.o
obj-y += excp_helper.o
obj-y += fpu_helper.o
obj-y += int_helper.o
diff --git a/target-ppc/kvm-stub.c b/target-ppc/kvm-stub.c
deleted file mode 100644
index ee3f5d2..0000000
--- a/target-ppc/kvm-stub.c
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
- * QEMU KVM PPC specific function stubs
- *
- * Copyright Freescale Inc. 2013
- *
- * Author: Alexander Graf <address@hidden>
- *
- * This work is licensed under the terms of the GNU GPL, version 2 or later.
- * See the COPYING file in the top-level directory.
- *
- */
-#include "qemu-common.h"
-#include "hw/ppc/openpic.h"
-
-int kvm_openpic_connect_vcpu(DeviceState *d, CPUState *cs)
-{
- return -EINVAL;
-}
--
1.7.10.4
- [Qemu-devel] [PATCH] kvm: Combine all kvm stubs in a single file and compile it only once,
Stefan Weil <=