From 150099426a3818e06311c787ac3d9126ef6f4c82 Mon Sep 17 00:00:00 2001 From: Tiago Muck Date: Fri, 17 May 2019 13:15:33 -0500 Subject: [PATCH] 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 Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/18788 Reviewed-by: Nikos Nikoleris Maintainer: Jason Lowe-Power Tested-by: kokoro --- src/base/addr_range.hh | 6 ++++++ 1 file changed, 6 insertions(+) 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; } } -- 2.30.2