diff -r 4b63fd0bad53 -r 2a10e5484eae src/mem/cache/base.cc --- a/src/mem/cache/base.cc Tue Mar 08 22:51:58 2016 +0000 +++ b/src/mem/cache/base.cc Tue Mar 08 23:05:48 2016 +0000 @@ -68,8 +68,8 @@ BaseCache::BaseCache(const BaseCacheParams *p, unsigned blk_size) : MemObject(p), cpuSidePort(nullptr), memSidePort(nullptr), - mshrQueue("MSHRs", p->mshrs, 4, p->demand_mshr_reserve), - writeBuffer("write buffer", p->write_buffers, p->mshrs+1000), + mshrQueue("MSHRs", p->mshrs, 0, p->demand_mshr_reserve), // see below + writeBuffer("write buffer", p->write_buffers, p->mshrs), // see below blkSize(blk_size), lookupLatency(p->hit_latency), forwardLatency(p->hit_latency), @@ -85,6 +85,12 @@ addrRanges(p->addr_ranges.begin(), p->addr_ranges.end()), system(p->system) { + // the MSHR queue has no reserve entries as we check the MSHR + // queue on every single allocation, whereas the write queue has + // as many reserve entries as we have MSHRs, since every MSHR may + // eventually require a writeback, and we do not check the write + // buffer before committing to an MSHR + // forward snoops is overridden in init() once we can query // whether the connected master is actually snooping or not } diff -r 4b63fd0bad53 -r 2a10e5484eae src/mem/cache/queue.hh --- a/src/mem/cache/queue.hh Tue Mar 08 22:51:58 2016 +0000 +++ b/src/mem/cache/queue.hh Tue Mar 08 23:05:48 2016 +0000 @@ -69,7 +69,7 @@ /** * The total number of entries in this queue. This number is set - * as the number of entries requested plus (numReserve - 1). This + * as the number of entries requested plus any reserve. This * allows for the same number of effective entries while still * maintaining an overflow reserve. */ @@ -120,10 +120,10 @@ * Create a queue with a given number of entries. * * @param num_entries The number of entries in this queue. - * @param num_overflow The extra overflow entries needed. + * @param reserve The extra overflow entries needed. */ Queue(const std::string &_label, int num_entries, int reserve) : - label(_label), numEntries(num_entries + reserve - 1), + label(_label), numEntries(num_entries + reserve), numReserve(reserve), entries(numEntries), _numInService(0), allocated(0) { @@ -139,7 +139,7 @@ bool isFull() const { - return (allocated > numEntries - numReserve); + return (allocated >= numEntries - numReserve); } int numInService() const