[Skiboot] [PATCH] opal/hmi: Fix the soft lockup issue on HMI for certain TB errors.
Mahesh J Salgaonkar
mahesh at linux.vnet.ibm.com
Mon Oct 5 21:10:14 AEDT 2015
From: Mahesh Salgaonkar <mahesh at linux.vnet.ibm.com>
Introduce volatile specifier in wait_for_subcore_threads() to force
re-read the fresh value from the memory. Without this, the compiler
optimizes the while loop not to re-fetch the data from memory pointed by
this_cpu()->core_hmi_state_ptr. This cause CPU to spin infinitely
even though the other CPUs have modified the data causing soft lockup in
kernel.
Signed-off-by: Mahesh Salgaonkar <mahesh at linux.vnet.ibm.com>
---
core/hmi.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/core/hmi.c b/core/hmi.c
index ee556fc..2d1ac6f 100644
--- a/core/hmi.c
+++ b/core/hmi.c
@@ -448,7 +448,9 @@ static int decode_malfunction(struct OpalHMIEvent *hmi_evt)
static void wait_for_subcore_threads(void)
{
- while (!(*(this_cpu()->core_hmi_state_ptr) & HMI_STATE_CLEANUP_DONE))
+ volatile uint32_t *core_hmi_state_ptr = this_cpu()->core_hmi_state_ptr;
+
+ while (!(*(core_hmi_state_ptr) & HMI_STATE_CLEANUP_DONE))
cpu_relax();
}
More information about the Skiboot
mailing list