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

Reply via email to