diff -r b150b965d402 -r 5fe50a8b3c55 src/mem/cache/base.cc --- a/src/mem/cache/base.cc Sun Mar 06 17:26:21 2016 +0000 +++ b/src/mem/cache/base.cc Sun Mar 06 17:37:53 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), + writeBuffer("write buffer", p->write_buffers, p->mshrs), 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 b150b965d402 -r 5fe50a8b3c55 src/mem/cache/queue.hh --- a/src/mem/cache/queue.hh Sun Mar 06 17:26:21 2016 +0000 +++ b/src/mem/cache/queue.hh Sun Mar 06 17:37:53 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