summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPeter Maydell2020-03-03 18:49:47 +0100
committerPeter Maydell2020-03-12 17:01:37 +0100
commit8c4985298fca616e91b88996c225a9efd04b7500 (patch)
tree1272116a91742978cda60e4130cd541b15cb15f5
parentMerge remote-tracking branch 'remotes/pmaydell/tags/pull-docs-20200312' into ... (diff)
downloadqemu-8c4985298fca616e91b88996c225a9efd04b7500.tar.gz
qemu-8c4985298fca616e91b88996c225a9efd04b7500.tar.xz
qemu-8c4985298fca616e91b88996c225a9efd04b7500.zip
hw/intc/armv7m_nvic: Rebuild hflags on reset
Some of an M-profile CPU's cached hflags state depends on state that's in our NVIC object. We already do an hflags rebuild when the NVIC registers are written, but we also need to do this on NVIC reset, because there's no guarantee that this will happen before the CPU reset. This fixes an assertion due to mismatched hflags which happens if the CPU is reset from inside a HardFault handler. Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Message-id: 20200303174950.3298-2-peter.maydell@linaro.org
-rw-r--r--hw/intc/armv7m_nvic.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/hw/intc/armv7m_nvic.c b/hw/intc/armv7m_nvic.c
index a62587eb3f..1ad35e5529 100644
--- a/hw/intc/armv7m_nvic.c
+++ b/hw/intc/armv7m_nvic.c
@@ -2593,6 +2593,12 @@ static void armv7m_nvic_reset(DeviceState *dev)
s->itns[i] = true;
}
}
+
+ /*
+ * We updated state that affects the CPU's MMUidx and thus its hflags;
+ * and we can't guarantee that we run before the CPU reset function.
+ */
+ arm_rebuild_hflags(&s->cpu->env);
}
static void nvic_systick_trigger(void *opaque, int n, int level)