diff -r 2629f0b99e8d -r 2e8e61ee1288 src/mem/bus.hh --- a/src/mem/bus.hh Mon Feb 20 08:11:14 2012 -0800 +++ b/src/mem/bus.hh Thu Feb 23 08:49:34 2012 +0000 @@ -220,7 +220,7 @@ 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 @@ /** 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 diff -r 2629f0b99e8d -r 2e8e61ee1288 src/mem/bus.cc --- a/src/mem/bus.cc Mon Feb 20 08:11:14 2012 -0800 +++ b/src/mem/bus.cc Thu Feb 23 08:49:34 2012 +0000 @@ -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 @@ 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 @@ 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 @@ 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()); }