summaryrefslogtreecommitdiff
path: root/src/mem/cache
diff options
context:
space:
mode:
authorAndreas Hansson <andreas.hansson@arm.com>2014-12-02 06:07:52 -0500
committerAndreas Hansson <andreas.hansson@arm.com>2014-12-02 06:07:52 -0500
commitf012166bb600ebaeefa48e74f7dd7fdfc9742506 (patch)
treed7be12d21ec6629af877b03eeec224c699ac2e29 /src/mem/cache
parenta2ee51f631199f629f36baf2f59161e25be84bdc (diff)
downloadgem5-f012166bb600ebaeefa48e74f7dd7fdfc9742506.tar.xz
mem: Cleanup Packet::checkFunctional and hasData usage
This patch cleans up the use of hasData and checkFunctional in the packet. The hasData function is unfortunately suggesting that it checks if the packet has a valid data pointer, when it does in fact only check if the specific packet type is specified to have a data payload. The confusion led to a bug in checkFunctional. The latter function is also tidied up to avoid name overloading.
Diffstat (limited to 'src/mem/cache')
-rw-r--r--src/mem/cache/cache_impl.hh8
1 files changed, 7 insertions, 1 deletions
diff --git a/src/mem/cache/cache_impl.hh b/src/mem/cache/cache_impl.hh
index 8e8079d58..296f31ebd 100644
--- a/src/mem/cache/cache_impl.hh
+++ b/src/mem/cache/cache_impl.hh
@@ -1481,6 +1481,10 @@ Cache<TagStore>::handleFill(PacketPtr pkt, BlkType *blk,
if (blk == NULL) {
// better have read new data...
assert(pkt->hasData());
+
+ // only read reaponses have data
+ assert(pkt->isRead());
+
// need to do a replacement
blk = allocateBlock(addr, is_secure, writebacks);
if (blk == NULL) {
@@ -1538,8 +1542,10 @@ Cache<TagStore>::handleFill(PacketPtr pkt, BlkType *blk,
DPRINTF(Cache, "Block addr %x (%s) moving from state %x to %s\n",
addr, is_secure ? "s" : "ns", old_state, blk->print());
- // if we got new data, copy it in
+ // if we got new data, copy it in (checking for a read response
+ // and a response that has data is the same in the end)
if (pkt->isRead()) {
+ assert(pkt->hasData());
std::memcpy(blk->data, pkt->getConstPtr<uint8_t>(), blkSize);
}