changeset 38eca2df1124 in /z/repo/m5
details: http://repo.m5sim.org/m5?cmd=changeset;node=38eca2df1124
description:
MessagePort: implement the virtual recvTiming function to avoid double
pkt delete
Double packet delete problem is due to an interrupt device deleting a
packet that the SimpleTimingPort also deletes. Since MessagePort descends from
SimpleTimingPort, simply reimplement the failing code from SimpleTimingPort:
recvTiming.
diffstat:
src/arch/x86/interrupts.cc | 2 --
src/dev/x86/intdev.cc | 8 ++++++--
src/dev/x86/intdev.hh | 2 --
3 files changed, 6 insertions(+), 6 deletions(-)
diffs (44 lines):
diff -r 73bc24002f82 -r 38eca2df1124 src/arch/x86/interrupts.cc
--- a/src/arch/x86/interrupts.cc Sun Feb 06 22:14:17 2011 -0800
+++ b/src/arch/x86/interrupts.cc Sun Feb 06 22:14:17 2011 -0800
@@ -340,8 +340,6 @@
low.deliveryStatus = 0;
regs[APIC_INTERRUPT_COMMAND_LOW] = low;
}
- delete pkt->req;
- delete pkt;
DPRINTF(LocalApic, "ICR is now idle.\n");
return 0;
}
diff -r 73bc24002f82 -r 38eca2df1124 src/dev/x86/intdev.cc
--- a/src/dev/x86/intdev.cc Sun Feb 06 22:14:17 2011 -0800
+++ b/src/dev/x86/intdev.cc Sun Feb 06 22:14:17 2011 -0800
@@ -37,10 +37,14 @@
ApicList::iterator apicIt;
for (apicIt = apics.begin(); apicIt != apics.end(); apicIt++) {
PacketPtr pkt = buildIntRequest(*apicIt, message);
- if (timing)
+ if (timing) {
sendMessageTiming(pkt, latency);
- else
+ // The target handles cleaning up the packet in timing mode.
+ } else {
sendMessageAtomic(pkt);
+ delete pkt->req;
+ delete pkt;
+ }
}
}
diff -r 73bc24002f82 -r 38eca2df1124 src/dev/x86/intdev.hh
--- a/src/dev/x86/intdev.hh Sun Feb 06 22:14:17 2011 -0800
+++ b/src/dev/x86/intdev.hh Sun Feb 06 22:14:17 2011 -0800
@@ -138,8 +138,6 @@
virtual Tick
recvResponse(PacketPtr pkt)
{
- delete pkt->req;
- delete pkt;
return 0;
}
_______________________________________________
m5-dev mailing list
[email protected]
http://m5sim.org/mailman/listinfo/m5-dev