Fix bugs due to interaction between SEV instructions and O3 pipeline
authorGeoffrey Blake <geoffrey.blake@arm.com>
Fri, 19 Aug 2011 20:08:07 +0000 (15:08 -0500)
committerGeoffrey Blake <geoffrey.blake@arm.com>
Fri, 19 Aug 2011 20:08:07 +0000 (15:08 -0500)
commit5f425b8bd1ac70b61fc57b7ec44c52cd7d8de9fb
treedecdd198675fc01637584a8ef65d50c216e992da
parentf125ef22b997d5ba6173d9d3f0d07ae741e279bd
Fix bugs due to interaction between SEV instructions and O3 pipeline

SEV instructions were originally implemented to cause asynchronous squashes
via the generateTCSquash() function in the O3 pipeline when updating the
SEV_MAILBOX miscReg. This caused race conditions between CPUs in an MP system
that would lead to a pipeline either going inactive indefinitely or not being
able to commit squashed instructions. Fixed SEV instructions to behave like
interrupts and cause synchronous sqaushes inside the pipeline, eliminating
the race conditions. Also fixed up the semantics of the WFE instruction to
behave as documented in the ARMv7 ISA description to not sleep if SEV_MAILBOX=1
or unmasked interrupts are pending.
src/arch/arm/faults.cc
src/arch/arm/faults.hh
src/arch/arm/interrupts.hh
src/arch/arm/isa/insts/misc.isa
src/arch/arm/isa/templates/pred.isa
src/arch/arm/isa_traits.hh
src/cpu/o3/commit_impl.hh
src/cpu/o3/cpu.hh
src/cpu/o3/thread_context_impl.hh