From patchwork Wed Nov 1 05:02:18 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jim Harris X-Patchwork-Id: 13442535 Received: from lindbergh.monkeyblade.net (lindbergh.monkeyblade.net [23.128.96.19]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id EFC0C7F for ; Wed, 1 Nov 2023 05:02:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=samsung.com header.i=@samsung.com header.b="c5OIqUZN" Received: from mailout2.w2.samsung.com (mailout2.w2.samsung.com [211.189.100.12]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7B069B9 for ; Tue, 31 Oct 2023 22:02:22 -0700 (PDT) Received: from uscas1p2.samsung.com (unknown [182.198.245.207]) by mailout2.w2.samsung.com (KnoxPortal) with ESMTP id 20231101050220usoutp029b9c945ccdc77dd4da70b8b6eb88375c~TZzACgugF2476024760usoutp02a; Wed, 1 Nov 2023 05:02:20 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout2.w2.samsung.com 20231101050220usoutp029b9c945ccdc77dd4da70b8b6eb88375c~TZzACgugF2476024760usoutp02a DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1698814940; bh=tQTHs/gYNHOcGbPEdItKPnrMO20t/d6gdKqp41xw92U=; h=From:To:Subject:Date:In-Reply-To:References:From; b=c5OIqUZNHAkyCVY8RI7eLHIy4kC7rp5wdFhBxSthkwsfj/iUK1BDfp1HWS5PRARC+ GYyDIH0JLsGI/t3DtFY0rLQksM1qWdHYbnDB7ZpNTb1xLGKT3KxlZdykHRg9zSOFLB 7I4YIUGv0N2Qh8hUl817O5+I+bxQdbdmLf6Jid0A= Received: from ussmges3new.samsung.com (u112.gpu85.samsung.co.kr [203.254.195.112]) by uscas1p1.samsung.com (KnoxPortal) with ESMTP id 20231101050220uscas1p12ab9fe8c647ea7810e1232f4d677282c~TZy-81dku1677816778uscas1p19; Wed, 1 Nov 2023 05:02:20 +0000 (GMT) Received: from uscas1p1.samsung.com ( [182.198.245.206]) by ussmges3new.samsung.com (USCPEMTA) with SMTP id A8.DF.62237.CDBD1456; Wed, 1 Nov 2023 01:02:20 -0400 (EDT) Received: from ussmgxs2new.samsung.com (u91.gpu85.samsung.co.kr [203.254.195.91]) by uscas1p2.samsung.com (KnoxPortal) with ESMTP id 20231101050219uscas1p25227a9255ab06201798ca35cae137194~TZy-XI_I90056600566uscas1p2G; Wed, 1 Nov 2023 05:02:19 +0000 (GMT) X-AuditID: cbfec370-b17ff7000001f31d-56-6541dbdccfc7 Received: from SSI-EX2.ssi.samsung.com ( [105.128.3.67]) by ussmgxs2new.samsung.com (USCPEXMTA) with SMTP id 13.4B.31200.BDBD1456; Wed, 1 Nov 2023 01:02:19 -0400 (EDT) Received: from SSI-EX2.ssi.samsung.com (105.128.2.227) by SSI-EX2.ssi.samsung.com (105.128.2.227) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.1.2375.24; Tue, 31 Oct 2023 22:02:18 -0700 Received: from SSI-EX2.ssi.samsung.com ([105.128.2.227]) by SSI-EX2.ssi.samsung.com ([105.128.2.227]) with mapi id 15.01.2375.024; Tue, 31 Oct 2023 22:02:18 -0700 From: Jim Harris To: "dan.j.williams@intel.com" , "linux-cxl@vger.kernel.org" Subject: [PATCH v2] cxl/region: Refactor logic around check_last_peer() Thread-Topic: [PATCH v2] cxl/region: Refactor logic around check_last_peer() Thread-Index: AQHaDICW459/0DvhCUuFzM0Q8Rjdtw== Date: Wed, 1 Nov 2023 05:02:18 +0000 Message-ID: <169881493839.1770063.6493881963554580869.stgit@bgt-140510-bm03.eng.stellus.in> In-Reply-To: <169696721124.1190606.18028412676865061799.stgit@bgt-140510-bm03.eng.stellus.in> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [105.128.2.176] Content-ID: Precedence: bulk X-Mailing-List: linux-cxl@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-CFilter-Loop: Reflected X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFmpgleLIzCtJLcpLzFFi42LZduzrOd07tx1TDc5+Y7OYPvUCo8X5WadY HJg8Fu95yeTxeZNcAFMUl01Kak5mWWqRvl0CV8bFK7OZCj4oVGzc9J21gbFFoYuRk0NCwETi UNcc9i5GLg4hgZWMEvcfr2WEcFqZJD4u/88CUzX37TeoxBpGicl/50A5nxgl+t7uZIVwljFK XJy0lgmkhU1AU+LXlTVANgeHiECJxLPTNiBhYQF3ieWPG5khwj4Sn9uSQMIiAnoSq3bOBFvG IqAi0XFiItgUXoFoiRnX3jKD2JwCsRITz58DizMKiEl8P7UGzGYWEJe49WQ+E8ShghKLZu9h hrDFJP7tesgGYStK3P/+kh1kLTPQZet36UO02knsu3uRFcJWlJjS/ZAdYq2gxMmZT6B+l5Q4 uOIGC8iHEgITOSQ2HVrFCpFwkTh7ZgM7hC0t8ffuMqgbsiVWru8A+1xCoECi4UgQRNhaYuGf 9VAn80n8/fWIcQKj8iwkH8xCuG4WkutmIbluFpLrFjCyrmIULy0uzk1PLTbOSy3XK07MLS7N S9dLzs/dxAhMJKf/HS7YwXjr1ke9Q4xMHIyHGCU4mJVEeA+bOqQK8aYkVlalFuXHF5XmpBYf YpTmYFES5zW0PZksJJCeWJKanZpakFoEk2Xi4JRqYOr+fNN85U+z/5zPzjyZ+oanxHhplUGF tJDbAysF+3NSGbXRm2ZzrW1lrbq42OW6ckv6fK/EK9ebpaIX5wZLXrzo+LIon+WbxJ/LLqyG CrG/9j9zXSYcsGeV1LklURKpsfs3vjj29K6GzxvFSRd/HC0o7Tn/xjt9VbzQpMltt/8WN5zO UndRfHBTwOnf9vAOltmbZbv59x1ddTKhVSBdhIuhN+rV/cAucTVdnjMflvqc/mty7t39gAcz KzdasNzxSg2arfng73uZBStW2WSx6O6VnbekyaBXtjW9fhHj/LW/ltUl1PI9Cv6WunqLuvrl c696Pu3ZHH76zfN1lxeumNe1T+vXc/mfjz1zf+QfEY5SYinOSDTUYi4qTgQAvMquRpMDAAA= X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFprIIsWRmVeSWpSXmKPExsWS2cDsrHv7tmOqwcdlchbTp15gtDg/6xSL A5PH4j0vmTw+b5ILYIrisklJzcksSy3St0vgyrh4ZTZTwQeFio2bvrM2MLYodDFyckgImEjM ffuNsYuRi0NIYBWjxLWZ65lBEkICnxgl1k9JhUgsY5S407OFESTBJqAp8evKGqYuRg4OEYES iWenbUDCwgLuEssfNzJDhH0kPrclgYRFBPQkVu2cyQJiswioSHScmMgEYvMKREvMuPYWalWM RMPF7WA1nAKxEhPPnwOrYRQQk/h+ag2YzSwgLnHryXwmiJsFJJbsOc8MYYtKvHz8jxXCVpS4 //0lO8gJzEBXrt+lD9FqJ7Hv7kVWCFtRYkr3Q3aIEwQlTs58wgLRKilxcMUNlgmM4rOQbJuF MGkWkkmzkEyahWTSAkbWVYzipcXFuekVxUZ5qeV6xYm5xaV56XrJ+bmbGIGxdvrf4egdjLdv fdQ7xMjEwXiIUYKDWUmE97CpQ6oQb0piZVVqUX58UWlOavEhRmkOFiVx3rsPNFKFBNITS1Kz U1MLUotgskwcnFINTGKhNdzzr/cu135/11Toue2LyIsPfSy2s7m0XH1vErq2uy37ZkHhvKfx Mjf/zTjFlewTpsywgumW+eTKR60XymbfeF3wNrSpNmyWhKFMmr5rO3fArMnphxc5PjjruVfo RGTk53nvPJeoTvDMi768Kvjiw1sOi9bW3/CRrJFYxpquEpVZ+EtBRtWSoZr1cNnRnZ+OMEpN Z6pa9VlGYJuF2J9aRnU289Mcec+X/JIyiTlv9fllk9BMnuzGzuSnQqq/Ci+ZrvvnIf0jZ/YB AcM/7kYTEhcFqgrVVn0pm3hEI5uTIU7wRsn6mczpqitdnP7prl98mOX9jQN7zqh838TIwLnc e82u0v/cNz+v/BJ0U4mlOCPRUIu5qDgRAF3lh1gkAwAA X-CMS-MailID: 20231101050219uscas1p25227a9255ab06201798ca35cae137194 CMS-TYPE: 301P X-CMS-RootMailID: 20231101050219uscas1p25227a9255ab06201798ca35cae137194 References: <169696721124.1190606.18028412676865061799.stgit@bgt-140510-bm03.eng.stellus.in> 'distance' is equivalent to the product of the interleave_ways of the "ancestor" decoders of the port's decoder we are setting up in cxl_port_setup_targets(). So use the term "ancestral_ways" instead of "distance" to better clarify the meaning of this value. Also move all logic around this value directly into check_last_peer() so that all necessary calculations are in one place. It also allows eliminating a parameter to that function. Signed-off-by: Jim Harris Reviewed-by: Alison Schofield --- drivers/cxl/core/region.c | 33 +++++++++++++++++++-------------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/drivers/cxl/core/region.c b/drivers/cxl/core/region.c index a1eac592c66a..2edfc02bb766 100644 --- a/drivers/cxl/core/region.c +++ b/drivers/cxl/core/region.c @@ -1037,8 +1037,7 @@ static void cxl_port_detach_region(struct cxl_port *port, } static int check_last_peer(struct cxl_endpoint_decoder *cxled, - struct cxl_ep *ep, struct cxl_region_ref *cxl_rr, - int distance) + struct cxl_ep *ep, struct cxl_region_ref *cxl_rr) { struct cxl_memdev *cxlmd = cxled_to_memdev(cxled); struct cxl_region *cxlr = cxl_rr->region; @@ -1048,19 +1047,30 @@ static int check_last_peer(struct cxl_endpoint_decoder *cxled, struct cxl_memdev *cxlmd_peer; struct cxl_ep *ep_peer; int pos = cxled->pos; + int ancestral_ways; + + if (cxl_rr->nr_targets == 1) { + /* + * Passthrough decoders impose no positioning requirements + * between peers. + */ + return 0; + } + + ancestral_ways = p->nr_targets / cxl_rr->nr_targets; /* * If this position wants to share a dport with the last endpoint mapped - * then that endpoint, at index 'position - distance', must also be + * then that endpoint, at index 'position - ancestral_ways', must also be * mapped by this dport. */ - if (pos < distance) { + if (pos < ancestral_ways) { dev_dbg(&cxlr->dev, "%s:%s: cannot host %s:%s at %d\n", dev_name(port->uport_dev), dev_name(&port->dev), dev_name(&cxlmd->dev), dev_name(&cxled->cxld.dev), pos); return -ENXIO; } - cxled_peer = p->targets[pos - distance]; + cxled_peer = p->targets[pos - ancestral_ways]; cxlmd_peer = cxled_to_memdev(cxled_peer); ep_peer = cxl_ep_load(port, cxlmd_peer); if (ep->dport != ep_peer->dport) { @@ -1105,20 +1115,15 @@ static int cxl_port_setup_targets(struct cxl_port *port, cxlsd = to_cxl_switch_decoder(&cxld->dev); if (cxl_rr->nr_targets_set) { - int i, distance; + int i; /* - * Passthrough decoders impose no distance requirements between - * peers + * Check if this ep is already in the switch target list and + * if so ensure it meets relative positioning requirements. */ - if (cxl_rr->nr_targets == 1) - distance = 0; - else - distance = p->nr_targets / cxl_rr->nr_targets; for (i = 0; i < cxl_rr->nr_targets_set; i++) if (ep->dport == cxlsd->target[i]) { - rc = check_last_peer(cxled, ep, cxl_rr, - distance); + rc = check_last_peer(cxled, ep, cxl_rr); if (rc) return rc; goto out_target_set;