From: Aravinda Prasad <aravinda@linux.vnet.ibm.com>
To: aik@au1.ibm.com, qemu-ppc@nongnu.org, qemu-devel@nongnu.org
Cc: benh@au1.ibm.com, paulus@samba.org
Subject: [Qemu-devel] [PATCH 5/5] target-ppc: Handle cases when multi-processors get machine-check
Date: Mon, 25 Aug 2014 19:15:54 +0530 [thread overview]
Message-ID: <20140825134554.2361.45051.stgit@aravindap> (raw)
In-Reply-To: <20140825134353.2361.52046.stgit@aravindap>
It is possible for multi-processors to experience machine
check at or about the same time. As per PAPR, subsequent
processors serialize waiting for the first processor to
issue the ibm,nmi-interlock call.
The second processor retries if the first processor which
received a machine check is still reading the error log
and is yet to issue ibm,nmi-interlock call.
This patch implements this functionality.
Signed-off-by: Aravinda Prasad <aravinda@linux.vnet.ibm.com>
---
hw/ppc/spapr_hcall.c | 13 +++++++++++++
hw/ppc/spapr_rtas.c | 8 +++++++-
2 files changed, 20 insertions(+), 1 deletion(-)
diff --git a/hw/ppc/spapr_hcall.c b/hw/ppc/spapr_hcall.c
index be063f4..542d0b7 100644
--- a/hw/ppc/spapr_hcall.c
+++ b/hw/ppc/spapr_hcall.c
@@ -94,6 +94,9 @@ struct rtas_mc_log {
struct rtas_error_log err_log;
};
+/* Whether machine check handling is in progress by any CPU */
+bool mc_in_progress;
+
static void do_spr_sync(void *arg)
{
struct SPRSyncState *s = arg;
@@ -674,6 +677,16 @@ static target_ulong h_report_mc_err(PowerPCCPU *cpu, sPAPREnvironment *spapr,
PowerPCCPUClass *pcc = POWERPC_CPU_GET_CLASS(cpu);
/*
+ * No need for lock. Only one thread can be executing
+ * inside an hcall
+ */
+ if (mc_in_progress == 1) {
+ return 0;
+ }
+
+ mc_in_progress = 1;
+
+ /*
* We save the original r3 register in SPRG2 in 0x200 vector,
* which is patched during call to ibm.nmi-register. Original
* r3 is required to be included in error log
diff --git a/hw/ppc/spapr_rtas.c b/hw/ppc/spapr_rtas.c
index 1135d2b..8fe4db2 100644
--- a/hw/ppc/spapr_rtas.c
+++ b/hw/ppc/spapr_rtas.c
@@ -36,6 +36,8 @@
#include <libfdt.h>
+extern bool mc_in_progress;
+
static void rtas_display_character(PowerPCCPU *cpu, sPAPREnvironment *spapr,
uint32_t token, uint32_t nargs,
target_ulong args,
@@ -303,6 +305,9 @@ static void rtas_ibm_nmi_register(PowerPCCPU *cpu,
0x6063f004, /* ori r3,r3,f004 */
/* Issue H_CALL */
0x44000022, /* sc 1 */
+ 0x2fa30000, /* cmplwi r3,0 */
+ 0x409e0008, /* bne continue */
+ 0x4800020a, /* retry KVMPPC_H_REPORT_ERR */
0x7c9243a6, /* mtspr r4 sprg2 */
0xe8830000, /* ld r4, 0(r3) */
0x7c9a03a6, /* mtspr r4, srr0 */
@@ -333,7 +338,7 @@ static void rtas_ibm_nmi_register(PowerPCCPU *cpu,
* machine check address requested by OS
*/
branch_inst |= guest_machine_check_addr;
- memcpy(&trampoline[11], &branch_inst, sizeof(branch_inst));
+ memcpy(&trampoline[14], &branch_inst, sizeof(branch_inst));
/* Handle all Host/Guest LE/BE combinations */
if ((*pcc->interrupts_big_endian)(cpu)) {
@@ -359,6 +364,7 @@ static void rtas_ibm_nmi_interlock(PowerPCCPU *cpu,
target_ulong args,
uint32_t nret, target_ulong rets)
{
+ mc_in_progress = 0;
rtas_st(rets, 0, RTAS_OUT_SUCCESS);
}
next prev parent reply other threads:[~2014-08-25 13:46 UTC|newest]
Thread overview: 73+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-08-25 13:45 [Qemu-devel] [PATCH 0/5] target-ppc: Add FWNMI support in QEMU for powerKVM guests Aravinda Prasad
2014-08-25 13:45 ` [Qemu-devel] [PATCH 1/5] target-ppc: Extend rtas-blob Aravinda Prasad
2014-08-26 5:38 ` David Gibson
2014-08-26 6:34 ` Aravinda Prasad
2014-08-26 7:24 ` David Gibson
2014-08-28 10:40 ` [Qemu-devel] [Qemu-ppc] " Alexander Graf
2014-08-28 18:20 ` Aravinda Prasad
2014-08-28 22:18 ` Alexander Graf
2014-08-28 22:25 ` Benjamin Herrenschmidt
2014-08-29 0:40 ` Alexander Graf
2014-08-29 1:06 ` Benjamin Herrenschmidt
2014-08-29 1:33 ` Alexander Graf
2014-08-29 2:42 ` Benjamin Herrenschmidt
2014-08-29 3:46 ` David Gibson
2014-08-29 3:47 ` David Gibson
2014-09-01 7:46 ` [Qemu-devel] " Alexey Kardashevskiy
2014-09-01 11:23 ` Aravinda Prasad
2014-09-02 4:09 ` Alexey Kardashevskiy
2014-09-02 5:25 ` Aravinda Prasad
2014-09-02 5:49 ` Alexey Kardashevskiy
2014-09-02 5:56 ` Aravinda Prasad
2014-09-02 6:34 ` Alexey Kardashevskiy
2014-09-02 7:07 ` Aravinda Prasad
2014-09-02 8:40 ` Alexey Kardashevskiy
2014-09-02 9:30 ` Aravinda Prasad
2014-09-02 13:17 ` Alexey Kardashevskiy
2014-08-25 13:45 ` [Qemu-devel] [PATCH 2/5] target-ppc: Register and handle HCALL to receive updated RTAS region Aravinda Prasad
2014-08-26 5:39 ` David Gibson
2014-08-26 6:15 ` Benjamin Herrenschmidt
2014-08-26 7:24 ` David Gibson
2014-08-26 20:05 ` Benjamin Herrenschmidt
2014-08-25 13:45 ` [Qemu-devel] [PATCH 3/5] target-ppc: Build error log Aravinda Prasad
2014-08-26 5:47 ` David Gibson
2014-08-26 6:40 ` Aravinda Prasad
2014-08-27 9:50 ` [Qemu-devel] [Qemu-ppc] " Alexander Graf
2014-08-28 6:12 ` Aravinda Prasad
2014-08-28 8:36 ` Alexander Graf
2014-08-28 10:21 ` Benjamin Herrenschmidt
2014-08-28 10:29 ` Alexander Graf
2014-08-28 10:33 ` Benjamin Herrenschmidt
2014-08-28 10:34 ` Benjamin Herrenschmidt
2014-08-28 17:17 ` Aravinda Prasad
2014-08-28 20:07 ` Benjamin Herrenschmidt
2014-08-30 8:06 ` Aravinda Prasad
2014-08-25 13:45 ` [Qemu-devel] [PATCH 4/5] target-ppc: Handle ibm, nmi-register RTAS call Aravinda Prasad
2014-08-26 6:02 ` David Gibson
2014-08-26 6:57 ` Aravinda Prasad
2014-08-27 10:37 ` [Qemu-devel] [Qemu-ppc] " Alexander Graf
2014-08-28 6:38 ` Aravinda Prasad
2014-08-28 8:37 ` Alexander Graf
2014-08-28 13:06 ` Tom Musta
2014-08-28 13:11 ` Alexander Graf
2014-08-28 17:42 ` Aravinda Prasad
2014-08-28 22:16 ` Alexander Graf
2014-08-30 8:08 ` Aravinda Prasad
2014-09-04 8:25 ` Aravinda Prasad
2014-09-04 13:09 ` Alexander Graf
2014-09-04 13:49 ` Aravinda Prasad
2014-09-05 8:46 ` Alexander Graf
2014-09-05 8:52 ` Aravinda Prasad
2014-09-07 20:47 ` Alexander Graf
2014-09-26 3:58 ` Alexey Kardashevskiy
2014-10-06 6:32 ` Aravinda Prasad
2014-10-06 9:40 ` Alexander Graf
2014-10-06 11:01 ` Aravinda Prasad
2014-08-25 13:45 ` Aravinda Prasad [this message]
2014-08-26 6:04 ` [Qemu-devel] [PATCH 5/5] target-ppc: Handle cases when multi-processors get machine-check David Gibson
2014-08-26 7:04 ` Aravinda Prasad
2014-08-27 10:40 ` [Qemu-devel] [Qemu-ppc] " Alexander Graf
2014-08-28 6:56 ` Aravinda Prasad
2014-08-28 8:39 ` Alexander Graf
2014-08-28 8:42 ` Alexander Graf
2014-08-28 17:45 ` Aravinda Prasad
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=20140825134554.2361.45051.stgit@aravindap \
--to=aravinda@linux.vnet.ibm.com \
--cc=aik@au1.ibm.com \
--cc=benh@au1.ibm.com \
--cc=paulus@samba.org \
--cc=qemu-devel@nongnu.org \
--cc=qemu-ppc@nongnu.org \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.