summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/mem/bridge.cc5
-rw-r--r--src/mem/coherent_xbar.cc5
-rw-r--r--src/mem/noncoherent_xbar.cc2
-rw-r--r--src/mem/packet.hh6
4 files changed, 11 insertions, 7 deletions
diff --git a/src/mem/bridge.cc b/src/mem/bridge.cc
index 085c97b53..b26da57e3 100644
--- a/src/mem/bridge.cc
+++ b/src/mem/bridge.cc
@@ -242,9 +242,8 @@ Bridge::BridgeSlavePort::schedTimingResp(PacketPtr pkt, Tick when)
pkt->setDest(req_state->origSrc);
delete req_state;
- // the bridge assumes that at least one crossbar has set the
- // destination field of the packet
- assert(pkt->isDestValid());
+ // the bridge sets the destination irrespective of it is valid or
+ // not, as it is checked in the crossbar
DPRINTF(Bridge, "response, new dest %d\n", pkt->getDest());
// If we're about to put this packet at the head of the queue, we
diff --git a/src/mem/coherent_xbar.cc b/src/mem/coherent_xbar.cc
index ce5116de9..6ad7b1785 100644
--- a/src/mem/coherent_xbar.cc
+++ b/src/mem/coherent_xbar.cc
@@ -272,6 +272,8 @@ CoherentXBar::recvTimingResp(PacketPtr pkt, PortID master_port_id)
// determine the destination based on what is stored in the packet
PortID slave_port_id = pkt->getDest();
+ assert(slave_port_id != InvalidPortID);
+ assert(slave_port_id < respLayers.size());
// test if the crossbar should be considered occupied for the
// current port
@@ -369,6 +371,7 @@ CoherentXBar::recvTimingSnoopResp(PacketPtr pkt, PortID slave_port_id)
// get the destination from the packet
PortID dest_port_id = pkt->getDest();
+ assert(dest_port_id != InvalidPortID);
// determine if the response is from a snoop request we
// created as the result of a normal request (in which case it
@@ -382,6 +385,7 @@ CoherentXBar::recvTimingSnoopResp(PacketPtr pkt, PortID slave_port_id)
// is being passed on as a normal response since this is occupying
// the response layer rather than the snoop response layer
if (forwardAsSnoop) {
+ assert(dest_port_id < snoopLayers.size());
if (!snoopLayers[dest_port_id]->tryTiming(src_port)) {
DPRINTF(CoherentXBar, "recvTimingSnoopResp: src %s %s 0x%x BUSY\n",
src_port->name(), pkt->cmdString(), pkt->getAddr());
@@ -390,6 +394,7 @@ CoherentXBar::recvTimingSnoopResp(PacketPtr pkt, PortID slave_port_id)
} else {
// get the master port that mirrors this slave port internally
MasterPort* snoop_port = snoopRespPorts[slave_port_id];
+ assert(dest_port_id < respLayers.size());
if (!respLayers[dest_port_id]->tryTiming(snoop_port)) {
DPRINTF(CoherentXBar, "recvTimingSnoopResp: src %s %s 0x%x BUSY\n",
snoop_port->name(), pkt->cmdString(), pkt->getAddr());
diff --git a/src/mem/noncoherent_xbar.cc b/src/mem/noncoherent_xbar.cc
index bc51be5a2..476b8314f 100644
--- a/src/mem/noncoherent_xbar.cc
+++ b/src/mem/noncoherent_xbar.cc
@@ -171,6 +171,8 @@ NoncoherentXBar::recvTimingResp(PacketPtr pkt, PortID master_port_id)
// determine the destination based on what is stored in the packet
PortID slave_port_id = pkt->getDest();
+ assert(slave_port_id != InvalidPortID);
+ assert(slave_port_id < respLayers.size());
// test if the layer should be considered occupied for the current
// port
diff --git a/src/mem/packet.hh b/src/mem/packet.hh
index dab1b1b95..9320d7886 100644
--- a/src/mem/packet.hh
+++ b/src/mem/packet.hh
@@ -544,15 +544,13 @@ class Packet : public Printable
bool hadBadAddress() const { return cmd == MemCmd::BadAddressError; }
void copyError(Packet *pkt) { assert(pkt->isError()); cmd = pkt->cmd; }
- bool isSrcValid() const { return src != InvalidPortID; }
/// Accessor function to get the source index of the packet.
- PortID getSrc() const { assert(isSrcValid()); return src; }
+ PortID getSrc() const { return src; }
/// Accessor function to set the source index of the packet.
void setSrc(PortID _src) { src = _src; }
- bool isDestValid() const { return dest != InvalidPortID; }
/// Accessor function for the destination index of the packet.
- PortID getDest() const { assert(isDestValid()); return dest; }
+ PortID getDest() const { return dest; }
/// Accessor function to set the destination index of the packet.
void setDest(PortID _dest) { dest = _dest; }
/// Reset destination field, e.g. to turn a response into a request again.