Commit ce4b7c6e authored by Jan Kiszka's avatar Jan Kiszka Committed by Philippe Gerum
Browse files

irq_pipeline: Account for stage migration across faults



We need to unstall the inband stage when we entered for a fault over OOB
and then migrated to inband. So far we kept the inband stage stalled,
causing a state corruption this way.
Signed-off-by: default avatarJan Kiszka <jan.kiszka@siemens.com>
parent bf1038cf
......@@ -577,9 +577,11 @@ noinstr void irqentry_exit(struct pt_regs *regs, irqentry_state_t state)
/*
* If pipelining interrupts, clear the in-band stall bit if
* irqentry_enter() raised it in order to mirror the hardware
* state.
* state. Also clear it when we where coming from oob, thus went
* through a migration that was caused by taking, e.g., a fault.
*/
if (state.stage_info == IRQENTRY_INBAND_UNSTALLED)
if (state.stage_info == IRQENTRY_INBAND_UNSTALLED ||
state.stage_info == IRQENTRY_OOB)
unstall_inband();
#endif
return;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment