mirror of https://github.com/xqemu/xqemu.git
kvm: Provide sigbus services arch-independently
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 <jan.kiszka@siemens.com> Reviewed-by: Paolo Bonzini <pbonzini@redhat.com> Acked-by: Alexander Graf <agraf@suse.de> Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
This commit is contained in:
parent
84b4915dd2
commit
a1b87fe046
10
cpus.c
10
cpus.c
|
@ -539,11 +539,10 @@ static void sigbus_reraise(void)
|
||||||
static void sigbus_handler(int n, struct qemu_signalfd_siginfo *siginfo,
|
static void sigbus_handler(int n, struct qemu_signalfd_siginfo *siginfo,
|
||||||
void *ctx)
|
void *ctx)
|
||||||
{
|
{
|
||||||
#if defined(TARGET_I386)
|
if (kvm_on_sigbus(siginfo->ssi_code, (void *)(intptr_t)siginfo->ssi_addr)) {
|
||||||
if (kvm_on_sigbus(siginfo->ssi_code, (void *)(intptr_t)siginfo->ssi_addr))
|
|
||||||
#endif
|
|
||||||
sigbus_reraise();
|
sigbus_reraise();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void qemu_kvm_eat_signal(CPUState *env, int timeout)
|
static void qemu_kvm_eat_signal(CPUState *env, int timeout)
|
||||||
{
|
{
|
||||||
|
@ -575,10 +574,9 @@ static void qemu_kvm_eat_signal(CPUState *env, int timeout)
|
||||||
|
|
||||||
switch (r) {
|
switch (r) {
|
||||||
case SIGBUS:
|
case SIGBUS:
|
||||||
#ifdef TARGET_I386
|
if (kvm_on_sigbus_vcpu(env, siginfo.si_code, siginfo.si_addr)) {
|
||||||
if (kvm_on_sigbus_vcpu(env, siginfo.si_code, siginfo.si_addr))
|
|
||||||
#endif
|
|
||||||
sigbus_reraise();
|
sigbus_reraise();
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
|
10
kvm-all.c
10
kvm-all.c
|
@ -1366,3 +1366,13 @@ int kvm_set_ioeventfd_pio_word(int fd, uint16_t addr, uint16_t val, bool assign)
|
||||||
return -ENOSYS;
|
return -ENOSYS;
|
||||||
#endif
|
#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);
|
||||||
|
}
|
||||||
|
|
|
@ -147,6 +147,11 @@ int kvm_set_ioeventfd_mmio_long(int fd, uint32_t adr, uint32_t val, bool assign)
|
||||||
return -ENOSYS;
|
return -ENOSYS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int kvm_on_sigbus_vcpu(CPUState *env, int code, void *addr)
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
int kvm_on_sigbus(int code, void *addr)
|
int kvm_on_sigbus(int code, void *addr)
|
||||||
{
|
{
|
||||||
return 1;
|
return 1;
|
||||||
|
|
7
kvm.h
7
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_pit_in_kernel(void);
|
||||||
int kvm_irqchip_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 */
|
/* internal API */
|
||||||
|
|
||||||
struct KVMState;
|
struct KVMState;
|
||||||
|
@ -121,8 +124,8 @@ int kvm_arch_init_vcpu(CPUState *env);
|
||||||
|
|
||||||
void kvm_arch_reset_vcpu(CPUState *env);
|
void kvm_arch_reset_vcpu(CPUState *env);
|
||||||
|
|
||||||
int kvm_on_sigbus_vcpu(CPUState *env, int code, void *addr);
|
int kvm_arch_on_sigbus_vcpu(CPUState *env, int code, void *addr);
|
||||||
int kvm_on_sigbus(int code, void *addr);
|
int kvm_arch_on_sigbus(int code, void *addr);
|
||||||
|
|
||||||
struct kvm_guest_debug;
|
struct kvm_guest_debug;
|
||||||
struct kvm_debug_exit_arch;
|
struct kvm_debug_exit_arch;
|
||||||
|
|
|
@ -1839,7 +1839,7 @@ static void kvm_mce_inj_srao_memscrub2(CPUState *env, target_phys_addr_t paddr)
|
||||||
|
|
||||||
#endif
|
#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)
|
#if defined(KVM_CAP_MCE)
|
||||||
void *vaddr;
|
void *vaddr;
|
||||||
|
@ -1889,7 +1889,7 @@ int kvm_on_sigbus_vcpu(CPUState *env, int code, void *addr)
|
||||||
return 0;
|
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 defined(KVM_CAP_MCE)
|
||||||
if ((first_cpu->mcg_cap & MCG_SER_P) && addr && code == BUS_MCEERR_AO) {
|
if ((first_cpu->mcg_cap & MCG_SER_P) && addr && code == BUS_MCEERR_AO) {
|
||||||
|
|
|
@ -404,3 +404,13 @@ bool kvm_arch_stop_on_emulation_error(CPUState *env)
|
||||||
{
|
{
|
||||||
return true;
|
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;
|
||||||
|
}
|
||||||
|
|
|
@ -505,3 +505,13 @@ bool kvm_arch_stop_on_emulation_error(CPUState *env)
|
||||||
{
|
{
|
||||||
return true;
|
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;
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue