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
This commit is contained in:
Ron Dreslinski 2006-10-11 20:54:06 -04:00
parent 14c8e8b227
commit 388d484269
2 changed files with 7 additions and 4 deletions

View 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;

View 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: