diff --git a/src/mem/bus.cc b/src/mem/bus.cc index e1f10860d..e37449b6e 100644 --- a/src/mem/bus.cc +++ b/src/mem/bus.cc @@ -56,8 +56,9 @@ Bus::Bus(const BusParams *p) : MemObject(p), busId(p->bus_id), clock(p->clock), headerCycles(p->header_cycles), width(p->width), tickNextIdle(0), - drainEvent(NULL), busIdle(this), inRetry(false), defaultPortId(-1), - useDefaultRange(p->use_default_range), defaultBlockSize(p->block_size), + drainEvent(NULL), busIdle(this), inRetry(false), + defaultPortId(INVALID_PORT_ID), useDefaultRange(p->use_default_range), + defaultBlockSize(p->block_size), cachedBlockSize(0), cachedBlockSizeValid(false) { //width, clock period, and header cycles must be positive @@ -76,7 +77,7 @@ Bus::getPort(const std::string &if_name, int idx) std::string portName; int id = interfaces.size(); if (if_name == "default") { - if (defaultPortId == -1) { + if (defaultPortId == INVALID_PORT_ID) { defaultPortId = id; portName = csprintf("%s-default", name()); } else @@ -301,7 +302,7 @@ Bus::findPort(Addr addr) int dest_id; dest_id = checkPortCache(addr); - if (dest_id != -1) + if (dest_id != INVALID_PORT_ID) return dest_id; // Check normal port ranges @@ -321,13 +322,16 @@ Bus::findPort(Addr addr) return defaultPortId; } } - - panic("Unable to find destination for addr %#llx\n", addr); + } else if (defaultPortId != INVALID_PORT_ID) { + DPRINTF(Bus, "Unable to find destination for addr %#llx, " + "will use default port\n", addr); + return defaultPortId; } - DPRINTF(Bus, "Unable to find destination for addr %#llx, " - "will use default port\n", addr); - return defaultPortId; + // we should use the range for the default port and it did not + // match, or the default port is not set + fatal("Unable to find destination for addr %#llx on bus %s\n", addr, + name()); } diff --git a/src/mem/bus.hh b/src/mem/bus.hh index 3117bf4e1..f7f69e08e 100644 --- a/src/mem/bus.hh +++ b/src/mem/bus.hh @@ -220,7 +220,7 @@ class Bus : public MemObject return portCache[2].id; } - return -1; + return INVALID_PORT_ID; } // Clears the earliest entry of the cache and inserts a new port entry @@ -317,6 +317,9 @@ class Bus : public MemObject /** Port that handles requests that don't match any of the interfaces.*/ short defaultPortId; + /** A symbolic name for a port id that denotes no port. */ + static const short INVALID_PORT_ID = -1; + /** If true, use address range provided by default device. Any address not handled by another port and not in default device's range will cause a fatal error. If false, just send all