o3cpu: commit: changes interrupt handling
authorNilay Vaish <nilay@cs.wisc.edu>
Fri, 29 Mar 2013 19:05:26 +0000 (14:05 -0500)
committerNilay Vaish <nilay@cs.wisc.edu>
Fri, 29 Mar 2013 19:05:26 +0000 (14:05 -0500)
Currently the commit stage keeps a local copy of the interrupt object.
Since the interrupt is usually handled several cycles after the commit
stage becomes aware of it, it is possible that the local copy of the
interrupt object may not be the interrupt that is actually handled.
It is possible that another interrupt occurred in the
interval between interrupt detection and interrupt handling.

This patch creates a copy of the interrupt just before the interrupt
is handled. The local copy is ignored.

src/cpu/o3/commit_impl.hh

index c7b2551236c96f8e28233d2fdb6e9cee313d2ae4..2c1c9fef208b000d3741e1c17629219df457537e 100644 (file)
@@ -752,8 +752,10 @@ DefaultCommit<Impl>::handleInterrupt()
             cpu->checker->handlePendingInt();
         }
 
-        // CPU will handle interrupt.
-        cpu->processInterrupts(interrupt);
+        // CPU will handle interrupt. Note that we ignore the local copy of
+        // interrupt. This is because the local copy may no longer be the
+        // interrupt that the interrupt controller thinks is being handled.
+        cpu->processInterrupts(cpu->getInterrupts());
 
         thread[0]->noSquashFromTC = false;