diff options
author | Peter Maydell <peter.maydell@linaro.org> | 2015-05-29 11:28:53 +0100 |
---|---|---|
committer | Peter Maydell <peter.maydell@linaro.org> | 2015-05-29 11:28:53 +0100 |
commit | 84549b6dcf9147559ec08b066de673587be6b763 (patch) | |
tree | 99aefebf556989e4d4b0940cec7e235f4d95170e /target-arm/op_helper.c | |
parent | 647f767ba3b37fb229275086187e96242248a4ac (diff) |
target-arm: Don't halt on WFI unless we don't have any work
Just NOP the WFI instruction if we have work to do.
This doesn't make much difference currently (though it does avoid
jumping out to the top level loop and immediately restarting),
but the distinction between "halt" and "don't halt" will become
more important when the decision to halt requires us to trap
to a higher exception level instead.
Suggested-by: Edgar E. Iglesias <edgar.iglesias@xilinx.com>
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Edgar E. Iglesias <edgar.iglesias@xilinx.com>
Diffstat (limited to 'target-arm/op_helper.c')
-rw-r--r-- | target-arm/op_helper.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/target-arm/op_helper.c b/target-arm/op_helper.c index 79e7d10055..0ea4ed4bae 100644 --- a/target-arm/op_helper.c +++ b/target-arm/op_helper.c @@ -252,6 +252,13 @@ void HELPER(wfi)(CPUARMState *env) { CPUState *cs = CPU(arm_env_get_cpu(env)); + if (cpu_has_work(cs)) { + /* Don't bother to go into our "low power state" if + * we would just wake up immediately. + */ + return; + } + cs->exception_index = EXCP_HLT; cs->halted = 1; cpu_loop_exit(cs); |