summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTiago Muck <tiago.muck@arm.com>2019-05-17 13:15:33 -0500
committerTiago Mück <tiago.muck@arm.com>2019-06-13 18:23:50 +0000
commit150099426a3818e06311c787ac3d9126ef6f4c82 (patch)
tree038dec67cfec43c0f62547263b75d9527feafd67
parentb871f124c410a82b944e3db58f6b9ded5c77f432 (diff)
downloadgem5-150099426a3818e06311c787ac3d9126ef6f4c82.tar.xz
base: AddrRange does not merge single interleaved ranges
AddrRange does not attempt to merge interleaved address ranges if it has only one of the ranges. This is needed to allow XBars to accept request targeting only one part of a interleaved address range. A use case for this would be modeling distributed LLCs in which a XBar is used solely to encapsulate the snoop filter of a single LLC slice. Change-Id: If71c9cf1444ee11916611afb51eab3a4f1d93985 Signed-off-by: Tiago Muck <tiago.muck@arm.com> Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/18788 Reviewed-by: Nikos Nikoleris <nikos.nikoleris@arm.com> Maintainer: Jason Lowe-Power <jason@lowepower.com> Tested-by: kokoro <noreply+kokoro@google.com>
-rw-r--r--src/base/addr_range.hh6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/base/addr_range.hh b/src/base/addr_range.hh
index 1d2dc731f..cda6ccfb2 100644
--- a/src/base/addr_range.hh
+++ b/src/base/addr_range.hh
@@ -213,6 +213,11 @@ class AddrRange
_start = ranges.front()._start;
_end = ranges.front()._end;
masks = ranges.front().masks;
+ intlvMatch = ranges.front().intlvMatch;
+ }
+ // either merge if got all ranges or keep this equal to the single
+ // interleaved range
+ if (ranges.size() > 1) {
if (ranges.size() != (ULL(1) << masks.size()))
fatal("Got %d ranges spanning %d interleaving bits\n",
@@ -231,6 +236,7 @@ class AddrRange
++match;
}
masks.clear();
+ intlvMatch = 0;
}
}