diff options
author | Daniel R. Carvalho <odanrc@yahoo.com.br> | 2019-01-24 15:00:18 +0100 |
---|---|---|
committer | Daniel Carvalho <odanrc@yahoo.com.br> | 2019-04-19 16:34:00 +0000 |
commit | 2d84dc46babdcbd6b6f061d3fe3fec34b999ff5c (patch) | |
tree | 7727de5e51977e3584b4943b2961782eefb329d1 /src/mem/cache/queue_entry.hh | |
parent | d4cee4dc66e175dd6cea7e9bcbe815a7d2d35462 (diff) | |
download | gem5-2d84dc46babdcbd6b6f061d3fe3fec34b999ff5c.tar.xz |
mem-cache: Add match functions to QueueEntry
Having the caller decide the matching logic is error-prone, and
frequently ends up with the secure bit being forgotten. This
change adds matching functions to the QueueEntry to avoid this
problem.
As a side effect the signature of findPending has been changed.
Change-Id: I6e494a821c1e6e841ab103ec69632c0e1b269a08
Signed-off-by: Daniel R. Carvalho <odanrc@yahoo.com.br>
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/17530
Tested-by: kokoro <noreply+kokoro@google.com>
Reviewed-by: Nikos Nikoleris <nikos.nikoleris@arm.com>
Maintainer: Nikos Nikoleris <nikos.nikoleris@arm.com>
Diffstat (limited to 'src/mem/cache/queue_entry.hh')
-rw-r--r-- | src/mem/cache/queue_entry.hh | 33 |
1 files changed, 30 insertions, 3 deletions
diff --git a/src/mem/cache/queue_entry.hh b/src/mem/cache/queue_entry.hh index 39ee0a0b9..61c898dd4 100644 --- a/src/mem/cache/queue_entry.hh +++ b/src/mem/cache/queue_entry.hh @@ -119,14 +119,41 @@ class QueueEntry : public Packet::SenderState /** True if the entry targets the secure memory space. */ bool isSecure; - QueueEntry() : readyTime(0), _isUncacheable(false), - inService(false), order(0), blkAddr(0), blkSize(0), - isSecure(false) + QueueEntry() + : readyTime(0), _isUncacheable(false), + inService(false), order(0), blkAddr(0), blkSize(0), isSecure(false) {} bool isUncacheable() const { return _isUncacheable; } /** + * Check if entry corresponds to the one being looked for. + * + * @param addr Address to match against. + * @param is_secure Whether the target should be in secure space or not. + * @return True if entry matches given information. + */ + virtual bool matchBlockAddr(const Addr addr, const bool is_secure) + const = 0; + + /** + * Check if entry contains a packet that corresponds to the one being + * looked for. + * + * @param pkt The packet to search for. + * @return True if any of its targets' packets matches the given one. + */ + virtual bool matchBlockAddr(const PacketPtr pkt) const = 0; + + /** + * Check if given entry's packets conflict with this' entries packets. + * + * @param entry Other entry to compare against. + * @return True if entry matches given information. + */ + virtual bool conflictAddr(const QueueEntry* entry) const = 0; + + /** * Send this queue entry as a downstream packet, with the exact * behaviour depending on the specific entry type. */ |