From 0473286ab1e9992a906eff380000bf90c82eeccb Mon Sep 17 00:00:00 2001 From: Nikos Nikoleris Date: Mon, 12 Mar 2018 10:11:16 +0000 Subject: mem-cache: Allow clean operations when block allocation fails Block allocation can fail when there is an in-service MSHR that operates on the victim block. This can happed due to: * an upgrade operation: a request that needs a writable copy of the block finds a shared (non-writable) copy of the block in the cache and has allocates an MSHR for the pending upgrade operation, or * a clean operation: a clean request finds a dirty copy of the block and allocates an MSHR for the pending clean operation. This changes relaxes an assertion to allow for the 2nd case (cache clean operations). Change-Id: Ib51482160b5f2b3702ed744b0eac2029d34bc9d4 Reviewed-by: Curtis Dunham Reviewed-on: https://gem5-review.googlesource.com/9021 Reviewed-by: Jason Lowe-Power Maintainer: Gabe Black --- src/mem/cache/mshr.hh | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'src/mem/cache/mshr.hh') diff --git a/src/mem/cache/mshr.hh b/src/mem/cache/mshr.hh index 1f59607bf..5fe0fb92d 100644 --- a/src/mem/cache/mshr.hh +++ b/src/mem/cache/mshr.hh @@ -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 @@ -235,6 +235,11 @@ class MSHR : public QueueEntry, public Printable /** True if we need to get a writable copy of the block. */ bool needsWritable() const { return targets.needsWritable; } + bool isCleaning() const { + PacketPtr pkt = targets.front().pkt; + return pkt->isClean(); + } + bool isPendingModified() const { assert(inService); return pendingModified; } -- cgit v1.2.3