From: Aravinda Prasad <aravinda@linux.vnet.ibm.com>
To: qemu-ppc@nongnu.org, agraf@suse.de, qemu-devel@nongnu.org
Cc: benh@au1.ibm.com, aik@ozlabs.ru, paulus@samba.org,
sam.bobroff@au1.ibm.com, david@gibson.dropbear.id.au
Subject: [Qemu-devel] [PATCH v2 4/4] spapr: Introduce FWNMI KVM capability
Date: Wed, 16 Dec 2015 11:38:47 +0530 [thread overview]
Message-ID: <20151216060847.10636.76722.stgit@aravindap> (raw)
In-Reply-To: <20151216060551.10636.77403.stgit@aravindap>
Introduce a new KVM capability to control how KVM
behaves on machine check exception.
Without this capability, KVM redirects machine check
exceptions to guest's 0x200 vector if the address in
error belongs to guest. With this capability KVM
causes a guest exit with NMI exit reason.
This is required to avoid problem if a new kernel/KVM
is used with an old QEMU. As old QEMU might not
understand the new NMI exit type and treat it as a
fatal error, even though the guest could have actually
handled the error if the exception was delivered to
guest's 0x200 interrupt vector.
PS: KVM_CAP_PPC_FWNMI is set to 121 as 119 and 120 are
used by KVM_CAP_GUEST_DEBUG_HW_BPS and KVM_CAP_GUEST_DEBUG_HW_WPS
in KVM code, but still not reflected in QEMU code.
Signed-off-by: Aravinda Prasad <aravinda@linux.vnet.ibm.com>
---
hw/ppc/spapr_rtas.c | 17 +++++++++++++++++
| 1 +
target-ppc/kvm.c | 2 ++
3 files changed, 20 insertions(+)
diff --git a/hw/ppc/spapr_rtas.c b/hw/ppc/spapr_rtas.c
index 17c4672..53319da 100644
--- a/hw/ppc/spapr_rtas.c
+++ b/hw/ppc/spapr_rtas.c
@@ -38,6 +38,8 @@
#include <libfdt.h>
#include "hw/ppc/spapr_drc.h"
+extern int cap_fwnmi;
+
/* #define DEBUG_SPAPR */
#ifdef DEBUG_SPAPR
@@ -603,9 +605,24 @@ static void rtas_ibm_nmi_register(PowerPCCPU *cpu,
target_ulong args,
uint32_t nret, target_ulong rets)
{
+ int ret;
+ CPUState *cs = CPU(cpu);
+
+ if (!cap_fwnmi) {
+ rtas_st(rets, 0, RTAS_OUT_NOT_SUPPORTED);
+ return;
+ }
+
spapr->mc_in_progress = false;
qemu_cond_init(&spapr->mc_delivery_cond);
spapr->guest_machine_check_addr = rtas_ld(args, 1);
+
+ ret = kvm_vcpu_enable_cap(cs, KVM_CAP_PPC_FWNMI, 0);
+ if (ret < 0) {
+ rtas_st(rets, 0, RTAS_OUT_HW_ERROR);
+ return;
+ }
+
rtas_st(rets, 0, RTAS_OUT_SUCCESS);
}
--git a/linux-headers/linux/kvm.h b/linux-headers/linux/kvm.h
index 683f713..2db1fba 100644
--- a/linux-headers/linux/kvm.h
+++ b/linux-headers/linux/kvm.h
@@ -819,6 +819,7 @@ struct kvm_ppc_smmu_info {
#define KVM_CAP_DISABLE_QUIRKS 116
#define KVM_CAP_X86_SMM 117
#define KVM_CAP_MULTI_ADDRESS_SPACE 118
+#define KVM_CAP_PPC_FWNMI 121
#ifdef KVM_CAP_IRQ_ROUTING
diff --git a/target-ppc/kvm.c b/target-ppc/kvm.c
index 2bbb46d..5339c04 100644
--- a/target-ppc/kvm.c
+++ b/target-ppc/kvm.c
@@ -74,6 +74,7 @@ static int cap_ppc_watchdog;
static int cap_papr;
static int cap_htab_fd;
static int cap_fixup_hcalls;
+int cap_fwnmi;
static uint32_t debug_inst_opcode;
@@ -116,6 +117,7 @@ int kvm_arch_init(MachineState *ms, KVMState *s)
* only activated after this by kvmppc_set_papr() */
cap_htab_fd = kvm_check_extension(s, KVM_CAP_PPC_HTAB_FD);
cap_fixup_hcalls = kvm_check_extension(s, KVM_CAP_PPC_FIXUP_HCALL);
+ cap_fwnmi = kvm_check_extension(s, KVM_CAP_PPC_FWNMI);
if (!cap_interrupt_level) {
fprintf(stderr, "KVM: Couldn't find level irq capability. Expect the "
next prev parent reply other threads:[~2015-12-16 6:09 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-12-16 6:08 [Qemu-devel] [PATCH v2 0/4] target-ppc/spapr: Add FWNMI support in QEMU for PowerKVM guests Aravinda Prasad
2015-12-16 6:08 ` [Qemu-devel] [PATCH v2 1/4] spapr: Register and handle HCALL to receive updated RTAS region Aravinda Prasad
2015-12-17 3:25 ` David Gibson
2015-12-16 6:08 ` [Qemu-devel] [PATCH v2 2/4] spapr: Handle "ibm, nmi-register" and "ibm, nmi-interlock" RTAS calls Aravinda Prasad
2015-12-17 3:51 ` David Gibson
2015-12-17 4:45 ` [Qemu-devel] [Qemu-ppc] " Aravinda Prasad
2015-12-16 6:08 ` [Qemu-devel] [PATCH v2 3/4] target-ppc: Handle NMI guest exit Aravinda Prasad
2015-12-17 4:00 ` David Gibson
2015-12-17 5:01 ` [Qemu-devel] [Qemu-ppc] " Aravinda Prasad
2015-12-16 6:08 ` Aravinda Prasad [this message]
2015-12-17 4:02 ` [Qemu-devel] [PATCH v2 4/4] spapr: Introduce FWNMI KVM capability David Gibson
2015-12-17 4:38 ` Aravinda Prasad
2016-10-13 2:02 ` Alexey Kardashevskiy
2015-12-17 7:03 ` Thomas Huth
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20151216060847.10636.76722.stgit@aravindap \
--to=aravinda@linux.vnet.ibm.com \
--cc=agraf@suse.de \
--cc=aik@ozlabs.ru \
--cc=benh@au1.ibm.com \
--cc=david@gibson.dropbear.id.au \
--cc=paulus@samba.org \
--cc=qemu-devel@nongnu.org \
--cc=qemu-ppc@nongnu.org \
--cc=sam.bobroff@au1.ibm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).