diff options
Diffstat (limited to 'src/mem/cache/mshr_queue.hh')
-rw-r--r-- | src/mem/cache/mshr_queue.hh | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/src/mem/cache/mshr_queue.hh b/src/mem/cache/mshr_queue.hh index 7ab3c7e74..7050421fe 100644 --- a/src/mem/cache/mshr_queue.hh +++ b/src/mem/cache/mshr_queue.hh @@ -77,6 +77,12 @@ class MSHRQueue : public Drainable */ const int numReserve; + /** + * The number of entries to reserve for future demand accesses. + * Prevent prefetcher from taking all mshr entries + */ + const int demandReserve; + /** MSHR storage. */ std::vector<MSHR> registers; /** Holds pointers to all allocated entries. */ @@ -106,9 +112,11 @@ class MSHRQueue : public Drainable * @param num_entrys The number of entries in this queue. * @param reserve The minimum number of entries needed to satisfy * any access. + * @param demand_reserve The minimum number of entries needed to satisfy + * demand accesses. */ MSHRQueue(const std::string &_label, int num_entries, int reserve, - int index); + int demand_reserve, int index); /** * Find the first MSHR that matches the provided address. @@ -218,6 +226,15 @@ class MSHRQueue : public Drainable } /** + * Returns true if sufficient mshrs for prefetch. + * @return True if sufficient mshrs for prefetch. + */ + bool canPrefetch() const + { + return (allocated < numEntries - (numReserve + demandReserve)); + } + + /** * Returns the MSHR at the head of the readyList. * @return The next request to service. */ |