Patch "cxl/region: Fix x1 root-decoder granularity calculations" has been added to the 6.6-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    cxl/region: Fix x1 root-decoder granularity calculations

to the 6.6-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     cxl-region-fix-x1-root-decoder-granularity-calculati.patch
and it can be found in the queue-6.6 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 81d1fc2e5b8aa62e8d1ca5524b89b8e25127f2dd
Author: Jim Harris <jim.harris@xxxxxxxxxxx>
Date:   Thu Oct 26 10:09:06 2023 -0700

    cxl/region: Fix x1 root-decoder granularity calculations
    
    [ Upstream commit 98a04c7aced2b43b3ac4befe216c4eecc7257d4b ]
    
    Root decoder granularity must match value from CFWMS, which may not
    be the region's granularity for non-interleaved root decoders.
    
    So when calculating granularities for host bridge decoders, use the
    region's granularity instead of the root decoder's granularity to ensure
    the correct granularities are set for the host bridge decoders and any
    downstream switch decoders.
    
    Test configuration is 1 host bridge * 2 switches * 2 endpoints per switch.
    
    Region created with 2048 granularity using following command line:
    
    cxl create-region -m -d decoder0.0 -w 4 mem0 mem2 mem1 mem3 \
                      -g 2048 -s 2048M
    
    Use "cxl list -PDE | grep granularity" to get a view of the granularity
    set at each level of the topology.
    
    Before this patch:
            "interleave_granularity":2048,
            "interleave_granularity":2048,
        "interleave_granularity":512,
            "interleave_granularity":2048,
            "interleave_granularity":2048,
        "interleave_granularity":512,
    "interleave_granularity":256,
    
    After:
            "interleave_granularity":2048,
            "interleave_granularity":2048,
        "interleave_granularity":4096,
            "interleave_granularity":2048,
            "interleave_granularity":2048,
        "interleave_granularity":4096,
    "interleave_granularity":2048,
    
    Fixes: 27b3f8d13830 ("cxl/region: Program target lists")
    Cc: <stable@xxxxxxxxxxxxxxx>
    Signed-off-by: Jim Harris <jim.harris@xxxxxxxxxxx>
    Link: https://lore.kernel.org/r/169824893473.1403938.16110924262989774582.stgit@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    [djbw: fixup the prebuilt cxl_test region]
    Signed-off-by: Dan Williams <dan.j.williams@xxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/cxl/core/region.c b/drivers/cxl/core/region.c
index 359af06233021..9d60020c5cb3b 100644
--- a/drivers/cxl/core/region.c
+++ b/drivers/cxl/core/region.c
@@ -1127,7 +1127,14 @@ static int cxl_port_setup_targets(struct cxl_port *port,
 	}
 
 	if (is_cxl_root(parent_port)) {
-		parent_ig = cxlrd->cxlsd.cxld.interleave_granularity;
+		/*
+		 * Root decoder IG is always set to value in CFMWS which
+		 * may be different than this region's IG.  We can use the
+		 * region's IG here since interleave_granularity_store()
+		 * does not allow interleaved host-bridges with
+		 * root IG != region IG.
+		 */
+		parent_ig = p->interleave_granularity;
 		parent_iw = cxlrd->cxlsd.cxld.interleave_ways;
 		/*
 		 * For purposes of address bit routing, use power-of-2 math for
diff --git a/tools/testing/cxl/test/cxl.c b/tools/testing/cxl/test/cxl.c
index fb6ab9cef84f7..b885462999022 100644
--- a/tools/testing/cxl/test/cxl.c
+++ b/tools/testing/cxl/test/cxl.c
@@ -831,7 +831,7 @@ static void mock_init_hdm_decoder(struct cxl_decoder *cxld)
 			cxld->interleave_ways = 2;
 		else
 			cxld->interleave_ways = 1;
-		cxld->interleave_granularity = 256;
+		cxld->interleave_granularity = 4096;
 		cxld->hpa_range = (struct range) {
 			.start = base,
 			.end = base + size - 1,



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux