summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRon Dreslinski <rdreslin@umich.edu>2006-10-11 20:54:06 -0400
committerRon Dreslinski <rdreslin@umich.edu>2006-10-11 20:54:06 -0400
commit388d484269ea9f68967d22a52edbb9d669ba6cdc (patch)
treea6170a3fcd9304c9d6ee799ff351ecdb8c3ac24e
parent14c8e8b2271a78cb3f9f1887a212d9de9f4fcc28 (diff)
downloadgem5-388d484269ea9f68967d22a52edbb9d669ba6cdc.tar.xz
Make default ID unique (not broadcast)
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
-rw-r--r--src/mem/bus.cc7
-rw-r--r--src/mem/bus.hh4
2 files changed, 7 insertions, 4 deletions
diff --git a/src/mem/bus.cc b/src/mem/bus.cc
index 8dd16874a..75ffed0d2 100644
--- a/src/mem/bus.cc
+++ b/src/mem/bus.cc
@@ -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;
diff --git a/src/mem/bus.hh b/src/mem/bus.hh
index 6e93f60c4..509b8cf9b 100644
--- a/src/mem/bus.hh
+++ b/src/mem/bus.hh
@@ -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: