bus->recvRetry(-1);
}
-const char * Bus::BusFreeEvent::description()
+const char * Bus::BusFreeEvent::description() const
{
return "bus became available";
}
Bus::recvTiming(PacketPtr pkt)
{
short src = pkt->getSrc();
- DPRINTF(Bus, "recvTiming: packet src %d dest %d addr 0x%x cmd %s\n",
- src, pkt->getDest(), pkt->getAddr(), pkt->cmdString());
BusPort *src_port;
if (src == defaultId)
(retryList.size() && (!inRetry || src_port != retryList.front()))))
{
addToRetryList(src_port);
- DPRINTF(Bus, "recvTiming: Bus is busy, returning false\n");
+ DPRINTF(Bus, "recvTiming: src %d dst %d %s 0x%x BUSY\n",
+ src, pkt->getDest(), pkt->cmdString(), pkt->getAddr());
return false;
}
+ DPRINTF(Bus, "recvTiming: src %d dst %d %s 0x%x\n",
+ src, pkt->getDest(), pkt->cmdString(), pkt->getAddr());
+
if (!pkt->isExpressSnoop()) {
occupyBus(pkt);
}
// Packet not successfully sent. Leave or put it on the retry list.
// illegal to block responses... can lead to deadlock
assert(!pkt->isResponse());
- DPRINTF(Bus, "Adding2 a retry to RETRY list %d\n", src);
+ DPRINTF(Bus, "recvTiming: src %d dst %d %s 0x%x TGT RETRY\n",
+ src, pkt->getDest(), pkt->cmdString(), pkt->getAddr());
addToRetryList(src_port);
return false;
}
void
Bus::recvFunctional(PacketPtr pkt)
{
- DPRINTF(Bus, "recvFunctional: packet src %d dest %d addr 0x%x cmd %s\n",
- pkt->getSrc(), pkt->getDest(), pkt->getAddr(), pkt->cmdString());
+ if (!pkt->isPrint()) {
+ // don't do DPRINTFs on PrintReq as it clutters up the output
+ DPRINTF(Bus,
+ "recvFunctional: packet src %d dest %d addr 0x%x cmd %s\n",
+ pkt->getSrc(), pkt->getDest(), pkt->getAddr(),
+ pkt->cmdString());
+ }
assert(pkt->getDest() == Packet::Broadcast);
int port_id = findPort(pkt->getAddr());
//We should check that we're not "doing" anything, and that noone is
//waiting. We might be idle but have someone waiting if the device we
//contacted for a retry didn't actually retry.
- if (curTick >= tickNextIdle && retryList.size() == 0) {
- return 0;
- } else {
+ if (retryList.size() || (curTick < tickNextIdle && busIdle.scheduled())) {
drainEvent = de;
return 1;
}
+ return 0;
}
void