summaryrefslogtreecommitdiff
path: root/src/cpu/func_unit.cc
diff options
context:
space:
mode:
authorMitch Hayenga <mitch.hayenga@arm.com>2014-09-03 07:42:45 -0400
committerMitch Hayenga <mitch.hayenga@arm.com>2014-09-03 07:42:45 -0400
commit659bdc1a6b50ace4803d754ad982cd6a79b5695f (patch)
treec9107ba714b79605e0ea90a003757cdf4b152a23 /src/cpu/func_unit.cc
parentbb1e6cf7c4d64a56b80d3d69ba25e8ff7d455bbd (diff)
downloadgem5-659bdc1a6b50ace4803d754ad982cd6a79b5695f.tar.xz
cpu: Fix o3 drain bug
For X86, the o3 CPU would get stuck with the commit stage not being drained if an interrupt arrived while drain was pending. isDrained() makes sure that pcState.microPC() == 0, thus ensuring that we are at an instruction boundary. However, when we take an interrupt we execute: pcState.upc(romMicroPC(entry)); pcState.nupc(romMicroPC(entry) + 1); tc->pcState(pcState); As a result, the MicroPC is no longer zero. This patch ensures the drain is delayed until no interrupts are present. Once draining, non-synchronous interrupts are deffered until after the switch.
Diffstat (limited to 'src/cpu/func_unit.cc')
0 files changed, 0 insertions, 0 deletions