diff options
author | Aravinda Prasad <arawinda.p@gmail.com> | 2020-01-31 00:14:19 +0530 |
---|---|---|
committer | David Gibson <david@gibson.dropbear.id.au> | 2020-02-03 11:33:10 +1100 |
commit | 9ac703ac5f9e830ab96d38dc77061bd4be76cf60 (patch) | |
tree | d8cf1c090e3b6329d842ca87a61dfa8cbe600317 /hw/ppc/spapr.c | |
parent | 9d953ce44722eeb10d99c814478065bebbf7e1f6 (diff) |
target/ppc: Handle NMI guest exit
Memory error such as bit flips that cannot be corrected
by hardware are passed on to the kernel for handling.
If the memory address in error belongs to guest then
the guest kernel is responsible for taking suitable action.
Patch [1] enhances KVM to exit guest with exit reason
set to KVM_EXIT_NMI in such cases. This patch handles
KVM_EXIT_NMI exit.
[1] https://www.spinics.net/lists/kvm-ppc/msg12637.html
(e20bbd3d and related commits)
Signed-off-by: Aravinda Prasad <arawinda.p@gmail.com>
Signed-off-by: Ganesh Goudar <ganeshgr@linux.ibm.com>
Reviewed-by: David Gibson <david@gibson.dropbear.id.au>
Reviewed-by: Greg Kurz <groug@kaod.org>
Message-Id: <20200130184423.20519-4-ganeshgr@linux.ibm.com>
[dwg: #ifdefs to fix compile for 32-bit target]
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
Diffstat (limited to 'hw/ppc/spapr.c')
-rw-r--r-- | hw/ppc/spapr.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c index aa739e943f..06e295cdf1 100644 --- a/hw/ppc/spapr.c +++ b/hw/ppc/spapr.c @@ -1677,6 +1677,12 @@ static void spapr_machine_reset(MachineState *machine) first_ppc_cpu->env.gpr[5] = 0; spapr->cas_reboot = false; + + spapr->mc_status = -1; + spapr->guest_machine_check_addr = -1; + + /* Signal all vCPUs waiting on this condition */ + qemu_cond_broadcast(&spapr->mc_delivery_cond); } static void spapr_create_nvram(SpaprMachineState *spapr) @@ -2971,6 +2977,8 @@ static void spapr_machine_init(MachineState *machine) kvmppc_spapr_enable_inkernel_multitce(); } + + qemu_cond_init(&spapr->mc_delivery_cond); } static int spapr_kvm_type(MachineState *machine, const char *vm_type) |