Revision a1b87fe0
b/cpus.c | ||
---|---|---|
539 | 539 |
static void sigbus_handler(int n, struct qemu_signalfd_siginfo *siginfo, |
540 | 540 |
void *ctx) |
541 | 541 |
{ |
542 |
#if defined(TARGET_I386) |
|
543 |
if (kvm_on_sigbus(siginfo->ssi_code, (void *)(intptr_t)siginfo->ssi_addr)) |
|
544 |
#endif |
|
542 |
if (kvm_on_sigbus(siginfo->ssi_code, (void *)(intptr_t)siginfo->ssi_addr)) { |
|
545 | 543 |
sigbus_reraise(); |
544 |
} |
|
546 | 545 |
} |
547 | 546 |
|
548 | 547 |
static void qemu_kvm_eat_signal(CPUState *env, int timeout) |
... | ... | |
575 | 574 |
|
576 | 575 |
switch (r) { |
577 | 576 |
case SIGBUS: |
578 |
#ifdef TARGET_I386 |
|
579 |
if (kvm_on_sigbus_vcpu(env, siginfo.si_code, siginfo.si_addr)) |
|
580 |
#endif |
|
577 |
if (kvm_on_sigbus_vcpu(env, siginfo.si_code, siginfo.si_addr)) { |
|
581 | 578 |
sigbus_reraise(); |
579 |
} |
|
582 | 580 |
break; |
583 | 581 |
default: |
584 | 582 |
break; |
b/kvm-all.c | ||
---|---|---|
1366 | 1366 |
return -ENOSYS; |
1367 | 1367 |
#endif |
1368 | 1368 |
} |
1369 |
|
|
1370 |
int kvm_on_sigbus_vcpu(CPUState *env, int code, void *addr) |
|
1371 |
{ |
|
1372 |
return kvm_arch_on_sigbus_vcpu(env, code, addr); |
|
1373 |
} |
|
1374 |
|
|
1375 |
int kvm_on_sigbus(int code, void *addr) |
|
1376 |
{ |
|
1377 |
return kvm_arch_on_sigbus(code, addr); |
|
1378 |
} |
b/kvm-stub.c | ||
---|---|---|
147 | 147 |
return -ENOSYS; |
148 | 148 |
} |
149 | 149 |
|
150 |
int kvm_on_sigbus_vcpu(CPUState *env, int code, void *addr) |
|
151 |
{ |
|
152 |
return 1; |
|
153 |
} |
|
154 |
|
|
150 | 155 |
int kvm_on_sigbus(int code, void *addr) |
151 | 156 |
{ |
152 | 157 |
return 1; |
b/kvm.h | ||
---|---|---|
81 | 81 |
int kvm_pit_in_kernel(void); |
82 | 82 |
int kvm_irqchip_in_kernel(void); |
83 | 83 |
|
84 |
int kvm_on_sigbus_vcpu(CPUState *env, int code, void *addr); |
|
85 |
int kvm_on_sigbus(int code, void *addr); |
|
86 |
|
|
84 | 87 |
/* internal API */ |
85 | 88 |
|
86 | 89 |
struct KVMState; |
... | ... | |
121 | 124 |
|
122 | 125 |
void kvm_arch_reset_vcpu(CPUState *env); |
123 | 126 |
|
124 |
int kvm_on_sigbus_vcpu(CPUState *env, int code, void *addr); |
|
125 |
int kvm_on_sigbus(int code, void *addr); |
|
127 |
int kvm_arch_on_sigbus_vcpu(CPUState *env, int code, void *addr);
|
|
128 |
int kvm_arch_on_sigbus(int code, void *addr);
|
|
126 | 129 |
|
127 | 130 |
struct kvm_guest_debug; |
128 | 131 |
struct kvm_debug_exit_arch; |
b/target-i386/kvm.c | ||
---|---|---|
1839 | 1839 |
|
1840 | 1840 |
#endif |
1841 | 1841 |
|
1842 |
int kvm_on_sigbus_vcpu(CPUState *env, int code, void *addr) |
|
1842 |
int kvm_arch_on_sigbus_vcpu(CPUState *env, int code, void *addr)
|
|
1843 | 1843 |
{ |
1844 | 1844 |
#if defined(KVM_CAP_MCE) |
1845 | 1845 |
void *vaddr; |
... | ... | |
1889 | 1889 |
return 0; |
1890 | 1890 |
} |
1891 | 1891 |
|
1892 |
int kvm_on_sigbus(int code, void *addr) |
|
1892 |
int kvm_arch_on_sigbus(int code, void *addr)
|
|
1893 | 1893 |
{ |
1894 | 1894 |
#if defined(KVM_CAP_MCE) |
1895 | 1895 |
if ((first_cpu->mcg_cap & MCG_SER_P) && addr && code == BUS_MCEERR_AO) { |
b/target-ppc/kvm.c | ||
---|---|---|
404 | 404 |
{ |
405 | 405 |
return true; |
406 | 406 |
} |
407 |
|
|
408 |
int kvm_arch_on_sigbus_vcpu(CPUState *env, int code, void *addr) |
|
409 |
{ |
|
410 |
return 1; |
|
411 |
} |
|
412 |
|
|
413 |
int kvm_arch_on_sigbus(int code, void *addr) |
|
414 |
{ |
|
415 |
return 1; |
|
416 |
} |
b/target-s390x/kvm.c | ||
---|---|---|
505 | 505 |
{ |
506 | 506 |
return true; |
507 | 507 |
} |
508 |
|
|
509 |
int kvm_arch_on_sigbus_vcpu(CPUState *env, int code, void *addr) |
|
510 |
{ |
|
511 |
return 1; |
|
512 |
} |
|
513 |
|
|
514 |
int kvm_arch_on_sigbus(int code, void *addr) |
|
515 |
{ |
|
516 |
return 1; |
|
517 |
} |
Also available in: Unified diff