Make default ID unique (not broadcast)
authorRon Dreslinski <rdreslin@umich.edu>
Thu, 12 Oct 2006 00:54:06 +0000 (20:54 -0400)
committerRon Dreslinski <rdreslin@umich.edu>
Thu, 12 Oct 2006 00:54:06 +0000 (20:54 -0400)
Fix a segfault associated with DefaultId

src/mem/bus.cc:
    Handle a segfault in the bus when DefaultPort was being used
src/mem/bus.hh:
    Make the Default ID more unique (it overlapped with Broadcast ID)

--HG--
extra : convert_revision : 9182805c5cf4d9fe004e6c5be8547a8f41ed7bfe

src/mem/bus.cc
src/mem/bus.hh

index 8dd16874a6b2ac6280a48828fe5eaf1fea1f5799..75ffed0d2d5cef4d69b0613319938be50e401346 100644 (file)
@@ -144,7 +144,10 @@ Bus::recvTiming(Packet *pkt)
     DPRINTF(Bus, "recvTiming: packet src %d dest %d addr 0x%x cmd %s\n",
             pkt->getSrc(), pkt->getDest(), pkt->getAddr(), pkt->cmdString());
 
-    BusPort *pktPort = interfaces[pkt->getSrc()];
+    BusPort *pktPort;
+    if (pkt->getSrc() == defaultId)
+        pktPort = defaultPort;
+    else pktPort = interfaces[pkt->getSrc()];
 
     // If the bus is busy, or other devices are in line ahead of the current
     // one, put this device on the retry list.
@@ -392,7 +395,7 @@ Bus::recvStatusChange(Port::Status status, int id)
         }
     } else {
 
-        assert((id < interfaces.size() && id >= 0) || id == -1);
+        assert((id < interfaces.size() && id >= 0) || id == defaultId);
         Port *port = interfaces[id];
         std::vector<DevMap>::iterator portIter;
         std::vector<DevMap>::iterator snoopIter;
index 6e93f60c49b678acde6c0cbefd9b2b07f57dd65c..509b8cf9b58b095938531ad505ccf09a2a075824 100644 (file)
@@ -59,7 +59,7 @@ class Bus : public MemObject
     /** the next tick at which the bus will be idle */
     Tick tickNextIdle;
 
-    static const int defaultId = -1;
+    static const int defaultId = -3; //Make it unique from Broadcast
 
     struct DevMap {
         int portId;
@@ -238,7 +238,7 @@ class Bus : public MemObject
     }
 
     /** Port that handles requests that don't match any of the interfaces.*/
-    Port *defaultPort;
+    BusPort *defaultPort;
 
   public: