From: Tiago Muck Date: Fri, 17 May 2019 18:15:33 +0000 (-0500) Subject: base: AddrRange does not merge single interleaved ranges X-Git-Tag: v19.0.0.0~763 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=150099426a3818e06311c787ac3d9126ef6f4c82;p=gem5.git 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 --- 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; } }