[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 03/18] kvm: Provide sigbus services arch-independent
From: |
Jan Kiszka |
Subject: |
[Qemu-devel] [PATCH 03/18] kvm: Provide sigbus services arch-independently |
Date: |
Mon, 10 Jan 2011 09:31:56 +0100 |
From: Jan Kiszka <address@hidden>
Provide arch-independent kvm_on_sigbus* stubs to remove the #ifdef'ery
from cpus.c. This patch also fixes --disable-kvm build by providing the
missing kvm_on_sigbus_vcpu kvm-stub.
Signed-off-by: Jan Kiszka <address@hidden>
CC: Huang Ying <address@hidden>
CC: Alexander Graf <address@hidden>
---
cpus.c | 10 ++++------
kvm-all.c | 10 ++++++++++
kvm-stub.c | 5 +++++
kvm.h | 7 +++++--
target-i386/kvm.c | 4 ++--
target-ppc/kvm.c | 10 ++++++++++
target-s390x/kvm.c | 10 ++++++++++
7 files changed, 46 insertions(+), 10 deletions(-)
diff --git a/cpus.c b/cpus.c
index 8af53a9..081ac30 100644
--- a/cpus.c
+++ b/cpus.c
@@ -527,10 +527,9 @@ static void sigbus_reraise(void)
static void sigbus_handler(int n, struct qemu_signalfd_siginfo *siginfo,
void *ctx)
{
-#if defined(TARGET_I386)
- if (kvm_on_sigbus(siginfo->ssi_code, (void *)(intptr_t)siginfo->ssi_addr))
-#endif
+ if (kvm_on_sigbus(siginfo->ssi_code, (void *)(intptr_t)siginfo->ssi_addr))
{
sigbus_reraise();
+ }
}
static void qemu_kvm_eat_signal(CPUState *env, int timeout)
@@ -563,10 +562,9 @@ static void qemu_kvm_eat_signal(CPUState *env, int timeout)
switch (r) {
case SIGBUS:
-#ifdef TARGET_I386
- if (kvm_on_sigbus_vcpu(env, siginfo.si_code, siginfo.si_addr))
-#endif
+ if (kvm_on_sigbus_vcpu(env, siginfo.si_code, siginfo.si_addr)) {
sigbus_reraise();
+ }
break;
default:
break;
diff --git a/kvm-all.c b/kvm-all.c
index 4ab5f5c..a8e9f2c 100644
--- a/kvm-all.c
+++ b/kvm-all.c
@@ -1284,3 +1284,13 @@ int kvm_set_ioeventfd_pio_word(int fd, uint16_t addr,
uint16_t val, bool assign)
return -ENOSYS;
#endif
}
+
+int kvm_on_sigbus_vcpu(CPUState *env, int code, void *addr)
+{
+ return kvm_on_sigbus_vcpu(env, code, addr);
+}
+
+int kvm_on_sigbus(int code, void *addr)
+{
+ return kvm_on_sigbus(code, addr);
+}
diff --git a/kvm-stub.c b/kvm-stub.c
index 1fcfc1e..572380c 100644
--- a/kvm-stub.c
+++ b/kvm-stub.c
@@ -142,6 +142,11 @@ int kvm_set_ioeventfd_mmio_long(int fd, uint32_t adr,
uint32_t val, bool assign)
return -ENOSYS;
}
+int kvm_on_sigbus_vcpu(CPUState *env, int code, void *addr)
+{
+ return 1;
+}
+
int kvm_on_sigbus(int code, void *addr)
{
return 1;
diff --git a/kvm.h b/kvm.h
index 7bf9cc8..0a4db28 100644
--- a/kvm.h
+++ b/kvm.h
@@ -80,6 +80,9 @@ int kvm_set_signal_mask(CPUState *env, const sigset_t
*sigset);
int kvm_pit_in_kernel(void);
int kvm_irqchip_in_kernel(void);
+int kvm_on_sigbus_vcpu(CPUState *env, int code, void *addr);
+int kvm_on_sigbus(int code, void *addr);
+
/* internal API */
int kvm_ioctl(int type, ...);
@@ -117,8 +120,8 @@ int kvm_arch_init_vcpu(CPUState *env);
void kvm_arch_reset_vcpu(CPUState *env);
-int kvm_on_sigbus_vcpu(CPUState *env, int code, void *addr);
-int kvm_on_sigbus(int code, void *addr);
+int kvm_arch_on_sigbus_vcpu(CPUState *env, int code, void *addr);
+int kvm_arch_on_sigbus(int code, void *addr);
struct kvm_guest_debug;
struct kvm_debug_exit_arch;
diff --git a/target-i386/kvm.c b/target-i386/kvm.c
index af79526..a7acd53 100644
--- a/target-i386/kvm.c
+++ b/target-i386/kvm.c
@@ -1918,7 +1918,7 @@ static void kvm_mce_inj_srao_memscrub2(CPUState *env,
target_phys_addr_t paddr)
#endif
-int kvm_on_sigbus_vcpu(CPUState *env, int code, void *addr)
+int kvm_arch_on_sigbus_vcpu(CPUState *env, int code, void *addr)
{
#if defined(KVM_CAP_MCE)
void *vaddr;
@@ -1968,7 +1968,7 @@ int kvm_on_sigbus_vcpu(CPUState *env, int code, void
*addr)
return 0;
}
-int kvm_on_sigbus(int code, void *addr)
+int kvm_arch_on_sigbus(int code, void *addr)
{
#if defined(KVM_CAP_MCE)
if ((first_cpu->mcg_cap & MCG_SER_P) && addr && code == BUS_MCEERR_AO) {
diff --git a/target-ppc/kvm.c b/target-ppc/kvm.c
index 7918426..8349045 100644
--- a/target-ppc/kvm.c
+++ b/target-ppc/kvm.c
@@ -404,3 +404,13 @@ bool kvm_arch_stop_on_emulation_error(CPUState *env)
{
return true;
}
+
+int kvm_arch_on_sigbus_vcpu(CPUState *env, int code, void *addr)
+{
+ return 1;
+}
+
+int kvm_arch_on_sigbus(int code, void *addr)
+{
+ return 1;
+}
diff --git a/target-s390x/kvm.c b/target-s390x/kvm.c
index 29fcd46..b7f644b 100644
--- a/target-s390x/kvm.c
+++ b/target-s390x/kvm.c
@@ -501,3 +501,13 @@ bool kvm_arch_stop_on_emulation_error(CPUState *env)
{
return true;
}
+
+int kvm_arch_on_sigbus_vcpu(CPUState *env, int code, void *addr)
+{
+ return 1;
+}
+
+int kvm_arch_on_sigbus(int code, void *addr)
+{
+ return 1;
+}
--
1.7.1
- [Qemu-devel] [PATCH 00/18] [uq/master] MCE & IO exit fixes, prepare for VCPU loop reuse, Jan Kiszka, 2011/01/10
- [Qemu-devel] [PATCH 03/18] kvm: Provide sigbus services arch-independently,
Jan Kiszka <=
- [Qemu-devel] [PATCH 08/18] kvm: Handle kvm_init_vcpu errors, Jan Kiszka, 2011/01/10
- [Qemu-devel] [PATCH 04/18] Refactor signal setup functions in cpus.c, Jan Kiszka, 2011/01/10
- [Qemu-devel] [PATCH 06/18] kvm: Refactor qemu_kvm_eat_signals, Jan Kiszka, 2011/01/10
- [Qemu-devel] [PATCH 09/18] Refactor kvm&tcg function names in cpus.c, Jan Kiszka, 2011/01/10
- [Qemu-devel] [PATCH 10/18] Fix a few coding style violations in cpus.c, Jan Kiszka, 2011/01/10
- [Qemu-devel] [PATCH 13/18] kvm: Unconditionally reenter kernel after IO exits, Jan Kiszka, 2011/01/10
- [Qemu-devel] [PATCH 15/18] kvm: Leave kvm_cpu_exec directly after KVM_EXIT_SHUTDOWN, Jan Kiszka, 2011/01/10