qemu-devel
[Top][All Lists]
Advanced

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

[Qemu-devel] Re: [PATCH 08/22] kvm: Provide sigbus services arch-indepen


From: Paolo Bonzini
Subject: [Qemu-devel] Re: [PATCH 08/22] kvm: Provide sigbus services arch-independently
Date: Thu, 27 Jan 2011 17:39:42 +0100
User-agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.13) Gecko/20101209 Fedora/3.1.7-0.35.b3pre.fc14 Lightning/1.0b3pre Mnenhy/0.8.3 Thunderbird/3.1.7

On 01/27/2011 02:09 PM, Jan Kiszka wrote:
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>
CC: Paolo Bonzini<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 f89826a..ce40e67 100644
--- a/cpus.c
+++ b/cpus.c
@@ -542,10 +542,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)
@@ -578,10 +577,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 1a55a10..5bfa8c0 100644
--- a/kvm-all.c
+++ b/kvm-all.c
@@ -1362,3 +1362,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_arch_on_sigbus_vcpu(env, code, addr);
+}
+
+int kvm_on_sigbus(int code, void *addr)
+{
+    return kvm_arch_on_sigbus(code, addr);
+}
diff --git a/kvm-stub.c b/kvm-stub.c
index 88682f2..d6b6c8e 100644
--- a/kvm-stub.c
+++ b/kvm-stub.c
@@ -147,6 +147,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 ca57517..b2fb5c6 100644
--- a/kvm.h
+++ b/kvm.h
@@ -81,6 +81,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 */

  struct KVMState;
@@ -121,8 +124,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 8e8880a..dd2cadc 100644
--- a/target-i386/kvm.c
+++ b/target-i386/kvm.c
@@ -1837,7 +1837,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;
@@ -1887,7 +1887,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 710eca1..93ecc57 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 38823f5..1702c46 100644
--- a/target-s390x/kvm.c
+++ b/target-s390x/kvm.c
@@ -505,3 +505,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;
+}

Reviewed-by: Paolo Bonzini <address@hidden>

Paolo



reply via email to

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