diff options
author | Nikos Nikoleris <nikos.nikoleris@arm.com> | 2016-10-10 13:48:08 +0100 |
---|---|---|
committer | Nikos Nikoleris <nikos.nikoleris@arm.com> | 2018-10-18 09:40:05 +0000 |
commit | bf305c14c47c4bd228c0910ea3bb30ab4bc935e1 (patch) | |
tree | 0effb6c54e8e8206c4f549cc78eba9d05bdd4765 /src/mem/cache/mshr_queue.cc | |
parent | e57d8f2d897bc26aade774e090842367e38e974b (diff) | |
download | gem5-bf305c14c47c4bd228c0910ea3bb30ab4bc935e1.tar.xz |
mem: Delay servicing an MSHR after its allocation
An MSHR is allocated and the computed latency determines when the MSHR
will be ready and can be serviced by the cache. This patch adds a
function that allows changing the time that an MSHR is ready and
adjusts the queue such that other MSHRs can be serviced first if they
are ready.
Change-Id: Ie908191fcb3c2d84d4c6f855c8b1e41ca5881bff
Reviewed-on: https://gem5-review.googlesource.com/c/12906
Reviewed-by: Daniel Carvalho <odanrc@yahoo.com.br>
Maintainer: Nikos Nikoleris <nikos.nikoleris@arm.com>
Diffstat (limited to 'src/mem/cache/mshr_queue.cc')
-rw-r--r-- | src/mem/cache/mshr_queue.cc | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/src/mem/cache/mshr_queue.cc b/src/mem/cache/mshr_queue.cc index e44a21954..f4b80540c 100644 --- a/src/mem/cache/mshr_queue.cc +++ b/src/mem/cache/mshr_queue.cc @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012-2013, 2015-2016 ARM Limited + * Copyright (c) 2012-2013, 2015-2016, 2018 ARM Limited * All rights reserved. * * The license below extends only to copyright in the software and shall @@ -85,6 +85,17 @@ MSHRQueue::moveToFront(MSHR *mshr) } void +MSHRQueue::delay(MSHR *mshr, Tick delay_ticks) +{ + mshr->delay(delay_ticks); + auto it = std::find_if(mshr->readyIter, readyList.end(), + [mshr] (const MSHR* _mshr) { + return mshr->readyTime >= _mshr->readyTime; + }); + readyList.splice(it, readyList, mshr->readyIter); +} + +void MSHRQueue::markInService(MSHR *mshr, bool pending_modified_resp) { mshr->markInService(pending_modified_resp); |