aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMahesh Salgaonkar <mahesh@linux.vnet.ibm.com>2018-04-23 11:45:28 +0530
committerStewart Smith <stewart@linux.ibm.com>2018-04-24 00:11:50 -0500
commit376b5e3b26e05f78ac4ed1a59c5b9f3d9e66716f (patch)
tree9cb9b15b69dfc188aa69f6c26cabbd8d696f0ae7
parent115c9f9f66200a01829a084ac163e3436baac8d2 (diff)
downloadskiboot-376b5e3b26e05f78ac4ed1a59c5b9f3d9e66716f.zip
skiboot-376b5e3b26e05f78ac4ed1a59c5b9f3d9e66716f.tar.gz
skiboot-376b5e3b26e05f78ac4ed1a59c5b9f3d9e66716f.tar.bz2
opal/hmi: Generate one event per core for processor recovery.
Processor recovery is per core error. All threads on that core receive HMI. All threads don't need to generate HMI event for same error. Let thread 0 only generate the event. Signed-off-by: Mahesh Salgaonkar <mahesh@linux.vnet.ibm.com> Signed-off-by: Stewart Smith <stewart@linux.ibm.com>
-rw-r--r--core/hmi.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/core/hmi.c b/core/hmi.c
index 70ccc23..bd0fc13 100644
--- a/core/hmi.c
+++ b/core/hmi.c
@@ -1212,7 +1212,7 @@ static int handle_hmi_exception(uint64_t hmer, struct OpalHMIEvent *hmi_evt,
}
handled |= SPR_HMER_PROC_RECV_DONE;
- if (hmi_evt) {
+ if (cpu_is_thread0(cpu) && hmi_evt) {
hmi_evt->severity = OpalHMI_SEV_NO_ERROR;
hmi_evt->type = OpalHMI_ERROR_PROC_RECOV_DONE;
queue_hmi_event(hmi_evt, recover, out_flags);
@@ -1220,7 +1220,7 @@ static int handle_hmi_exception(uint64_t hmer, struct OpalHMIEvent *hmi_evt,
}
if (hmer & SPR_HMER_PROC_RECV_ERROR_MASKED) {
handled |= SPR_HMER_PROC_RECV_ERROR_MASKED;
- if (hmi_evt) {
+ if (cpu_is_thread0(cpu) && hmi_evt) {
hmi_evt->severity = OpalHMI_SEV_NO_ERROR;
hmi_evt->type = OpalHMI_ERROR_PROC_RECOV_MASKED;
queue_hmi_event(hmi_evt, recover, out_flags);
@@ -1229,7 +1229,7 @@ static int handle_hmi_exception(uint64_t hmer, struct OpalHMIEvent *hmi_evt,
}
if (hmer & SPR_HMER_PROC_RECV_AGAIN) {
handled |= SPR_HMER_PROC_RECV_AGAIN;
- if (hmi_evt) {
+ if (cpu_is_thread0(cpu) && hmi_evt) {
hmi_evt->severity = OpalHMI_SEV_NO_ERROR;
hmi_evt->type = OpalHMI_ERROR_PROC_RECOV_DONE_AGAIN;
queue_hmi_event(hmi_evt, recover, out_flags);