aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenjamin Herrenschmidt <benh@kernel.crashing.org>2017-12-12 16:22:51 +1100
committerStewart Smith <stewart@linux.vnet.ibm.com>2017-12-12 18:39:43 -0600
commit230c6a9faba869d35e4c991306aab575872e5a0e (patch)
tree9adcb43541c00b3f629610d808b04dde34ee7edb
parent2b2f46b4cb1015f45f8769857b2eb0906e47be83 (diff)
downloadskiboot-230c6a9faba869d35e4c991306aab575872e5a0e.zip
skiboot-230c6a9faba869d35e4c991306aab575872e5a0e.tar.gz
skiboot-230c6a9faba869d35e4c991306aab575872e5a0e.tar.bz2
xive: Mark a freed IRQ's IVE as valid and masked
Removing the valid bit means a FIR will trip if it's accessed inadvertently. Under some circumstances, the XIVE will speculatively access an IVE for a masked interrupt and trip it. So make sure that freed entries are still marked valid (but masked). Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org> Tested-by: Oliver O'Halloran <oohall@gmail.com> Signed-off-by: Stewart Smith <stewart@linux.vnet.ibm.com> (cherry picked from commit 2d98b41e4c30bc82ea61ceaa6cf1f895563b4cf1) Signed-off-by: Stewart Smith <stewart@linux.vnet.ibm.com>
-rw-r--r--hw/xive.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/hw/xive.c b/hw/xive.c
index bb17b38..cd748fc 100644
--- a/hw/xive.c
+++ b/hw/xive.c
@@ -4720,7 +4720,7 @@ static int64_t opal_xive_free_irq(uint32_t girq)
xive_update_irq_mask(s, girq - s->esb_base, true);
/* Mark the IVE masked and invalid */
- ive->w = IVE_MASKED;
+ ive->w = IVE_MASKED | IVE_VALID;
xive_ivc_scrub(x, x->block_id, idx);
/* Free it */