qemu/include/sysemu
Dongjiu Geng e24fd076a5 target-arm: kvm64: handle SIGBUS signal from kernel or KVM
Add a SIGBUS signal handler. In this handler, it checks the SIGBUS type,
translates the host VA delivered by host to guest PA, then fills this PA
to guest APEI GHES memory, then notifies guest according to the SIGBUS
type.

When guest accesses the poisoned memory, it will generate a Synchronous
External Abort(SEA). Then host kernel gets an APEI notification and calls
memory_failure() to unmapped the affected page in stage 2, finally
returns to guest.

Guest continues to access the PG_hwpoison page, it will trap to KVM as
stage2 fault, then a SIGBUS_MCEERR_AR synchronous signal is delivered to
Qemu, Qemu records this error address into guest APEI GHES memory and
notifes guest using Synchronous-External-Abort(SEA).

In order to inject a vSEA, we introduce the kvm_inject_arm_sea() function
in which we can setup the type of exception and the syndrome information.
When switching to guest, the target vcpu will jump to the synchronous
external abort vector table entry.

The ESR_ELx.DFSC is set to synchronous external abort(0x10), and the
ESR_ELx.FnV is set to not valid(0x1), which will tell guest that FAR is
not valid and hold an UNKNOWN value. These values will be set to KVM
register structures through KVM_SET_ONE_REG IOCTL.

Signed-off-by: Dongjiu Geng <gengdongjiu@huawei.com>
Signed-off-by: Xiang Zheng <zhengxiang9@huawei.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Acked-by: Xiang Zheng <zhengxiang9@huawei.com>
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Igor Mammedov <imammedo@redhat.com>
Message-id: 20200512030609.19593-10-gengdongjiu@huawei.com
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
2020-05-14 15:03:09 +01:00
..
accel.h accel: Introduce the current_accel() wrapper 2020-01-24 20:59:11 +01:00
arch_init.h Add rx-softmmu 2020-03-19 17:58:05 +01:00
balloon.h include: Make headers more self-contained 2019-08-16 13:31:51 +02:00
block-backend.h block: Add blk_new_with_bs() helper 2020-05-05 13:17:36 +02:00
blockdev.h monitor/hmp: move hmp_drive_del and hmp_commit to block-hmp-cmds.c 2020-03-09 18:05:33 +00:00
cpus.h tcg: convert "-accel threads" to a QOM property 2019-12-17 19:32:27 +01:00
cryptodev-vhost-user.h include: Make headers more self-contained 2019-08-16 13:31:51 +02:00
cryptodev-vhost.h Include qemu-common.h exactly where needed 2019-06-12 13:20:20 +02:00
cryptodev.h misc: Replace zero-length arrays with flexible array member (automatic) 2020-03-16 22:07:42 +01:00
device_tree.h device_tree: Constify compat in qemu_fdt_node_path() 2020-04-30 15:35:41 +01:00
dma.h Include hw/hw.h exactly where needed 2019-08-16 13:31:52 +02:00
dump-arch.h
dump.h qapi: Split dump.json off misc.json 2019-07-02 13:37:00 +02:00
hax.h Include hw/hw.h exactly where needed 2019-08-16 13:31:52 +02:00
hostmem.h hostmem: fix strict bind policy 2020-02-19 16:50:02 +00:00
hvf.h Include hw/hw.h exactly where needed 2019-08-16 13:31:52 +02:00
hw_accel.h hw/core: Move cpu.c, cpu.h from qom/ to hw/core/ 2019-08-21 13:24:01 +02:00
iothread.h include: Make headers more self-contained 2019-08-16 13:31:51 +02:00
kvm_int.h KVM: Move hwpoison page related functions into kvm-all.c 2020-05-14 15:03:09 +01:00
kvm.h target-arm: kvm64: handle SIGBUS signal from kernel or KVM 2020-05-14 15:03:09 +01:00
memory_mapping.h Clean up inclusion of exec/cpu-common.h 2019-08-16 13:31:52 +02:00
numa.h initialize MachineState::ram in NUMA case 2020-02-19 16:49:53 +00:00
os-posix.h util: drop old utimensat() compat code 2017-05-25 10:30:14 +02:00
os-win32.h glib: use portable g_setenv() 2019-12-17 09:05:23 +01:00
qtest.h qtest: add in-process incoming command handler 2020-02-22 08:26:48 +00:00
replay.h replay: record and replay random number sources 2020-01-07 12:08:39 +01:00
reset.h hw: move reset handlers from vl.c to hw/core 2017-01-16 17:52:35 +01:00
rng-random.h
rng.h virtio-rng: change default backend to rng-builtin 2019-09-04 06:32:51 -04:00
runstate.h pvpanic: implement crashloaded event handling 2020-01-24 20:59:07 +01:00
seccomp.h sandbox: disable -sandbox if CONFIG_SECCOMP undefined 2018-06-01 13:44:15 +02:00
sev.h kvm: introduce memory encryption APIs 2018-03-13 12:04:03 +01:00
sysemu.h monitor/hmp: rename device-hotplug.c to block/monitor/block-hmp-cmds.c 2020-03-09 18:05:31 +00:00
tcg.h qemu-common: Move tcg_enabled() etc. to sysemu/tcg.h 2019-06-11 20:22:09 +02:00
tpm_backend.h Include qemu-common.h exactly where needed 2019-06-12 13:20:20 +02:00
tpm.h tpm: Add the SysBus TPM TIS device 2020-03-05 12:18:08 -05:00
vhost-user-backend.h Add vhost-user-backend 2019-05-10 12:48:35 +02:00
watchdog.h Include less of the generated modular QAPI headers 2018-03-02 13:45:50 -06:00
whpx.h WHPX: TSC get and set should be dependent on VM state 2020-03-16 23:02:21 +01:00
xen-mapcache.h include: Make headers more self-contained 2019-08-16 13:31:51 +02:00