changeset 46d327d42036 in /z/repo/m5
details: http://repo.m5sim.org/m5?cmd=changeset;node=46d327d42036
description:
X86: Add a function which gets called when an interrupt message has
been delivered.
diffstat:
5 files changed, 22 insertions(+), 5 deletions(-)
src/arch/x86/interrupts.cc | 3 +--
src/arch/x86/interrupts.hh | 1 +
src/dev/x86/intdev.cc | 5 +++--
src/dev/x86/intdev.hh | 13 +++++++++++++
src/mem/mport.cc | 5 ++++-
diffs (84 lines):
diff -r 5e719a1e5d82 -r 46d327d42036 src/arch/x86/interrupts.cc
--- a/src/arch/x86/interrupts.cc Sun Apr 19 03:53:29 2009 -0700
+++ b/src/arch/x86/interrupts.cc Sun Apr 19 03:54:11 2009 -0700
@@ -327,8 +327,7 @@
offset);
break;
}
- delete pkt->req;
- delete pkt;
+ pkt->makeAtomicResponse();
return latency;
}
diff -r 5e719a1e5d82 -r 46d327d42036 src/arch/x86/interrupts.hh
--- a/src/arch/x86/interrupts.hh Sun Apr 19 03:53:29 2009 -0700
+++ b/src/arch/x86/interrupts.hh Sun Apr 19 03:54:11 2009 -0700
@@ -213,6 +213,7 @@
Tick read(PacketPtr pkt);
Tick write(PacketPtr pkt);
Tick recvMessage(PacketPtr pkt);
+ Tick recvResponse(PacketPtr pkt);
bool
triggerTimerInterrupt()
diff -r 5e719a1e5d82 -r 46d327d42036 src/dev/x86/intdev.cc
--- a/src/dev/x86/intdev.cc Sun Apr 19 03:53:29 2009 -0700
+++ b/src/dev/x86/intdev.cc Sun Apr 19 03:54:11 2009 -0700
@@ -45,10 +45,11 @@
DPRINTF(IntDev,
"Sending interrupt to APIC ID %d.\n", message.destination);
PacketPtr pkt = buildIntRequest(message.destination, message);
- if (timing)
+ if (timing) {
sendMessageTiming(pkt, latency);
- else
+ } else {
sendMessageAtomic(pkt);
+ }
} else {
DPRINTF(IntDev, "Sending interrupts to APIC IDs:"
"%s%s%s%s%s%s%s%s\n",
diff -r 5e719a1e5d82 -r 46d327d42036 src/dev/x86/intdev.hh
--- a/src/dev/x86/intdev.hh Sun Apr 19 03:53:29 2009 -0700
+++ b/src/dev/x86/intdev.hh Sun Apr 19 03:54:11 2009 -0700
@@ -71,6 +71,11 @@
return device->recvMessage(pkt);
}
+ Tick recvResponse(PacketPtr pkt)
+ {
+ return device->recvResponse(pkt);
+ }
+
// This is x86 focused, so if this class becomes generic, this would
// need to be moved into a subclass.
void sendMessage(TriggerIntMessage message, bool timing);
@@ -125,6 +130,14 @@
return 0;
}
+ virtual Tick
+ recvResponse(PacketPtr pkt)
+ {
+ delete pkt->req;
+ delete pkt;
+ return 0;
+ }
+
virtual void
getIntAddrRange(AddrRangeList &range_list)
{
diff -r 5e719a1e5d82 -r 46d327d42036 src/mem/mport.cc
--- a/src/mem/mport.cc Sun Apr 19 03:53:29 2009 -0700
+++ b/src/mem/mport.cc Sun Apr 19 03:54:11 2009 -0700
@@ -56,5 +56,8 @@
Tick
MessagePort::sendMessageAtomic(PacketPtr pkt)
{
- return sendAtomic(pkt);
+ Tick latency = sendAtomic(pkt);
+ assert(pkt->isResponse());
+ latency += recvResponse(pkt);
+ return latency;
}
_______________________________________________
m5-dev mailing list
[email protected]
http://m5sim.org/mailman/listinfo/m5-dev