[PATCH v2 08/15] cxl/region: Use the endpoint's SPA range to find a region

Robert Richter
2025-02-18T13:25:04Z

To find the correct region and root port of an endpoint of a system
needing address translation, the endpoint's HPA range must be
translated to each of the parent port address ranges up to the root
decoder.

Use the calculated SPA range of an endpoint to find the endpoint's
region.

Signed-off-by: Robert Richter <rrichter@amd.com>
---
drivers/cxl/core/region.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/drivers/cxl/core/region.c b/drivers/cxl/core/region.c
index 6d5ede5b4c43..ffe6038249ed 100644
--- a/drivers/cxl/core/region.c
+++ b/drivers/cxl/core/region.c
@@ -3535,7 +3535,6 @@ static struct cxl_region *construct_region(struct cxl_root_decoder *cxlrd,

static int cxl_endpoint_decoder_add(struct cxl_endpoint_decoder *cxled)
{
- struct range *hpa = &cxled->cxld.hpa_range;
struct cxl_root_decoder *cxlrd = cxled->cxlrd;
struct cxl_region_params *p;
struct cxl_region *cxlr;
@@ -3547,7 +3546,7 @@ static int cxl_endpoint_decoder_add(struct cxl_endpoint_decoder *cxled)
* one does the construction and the others add to that.
*/
mutex_lock(&cxlrd->range_lock);
- cxlr = cxl_find_region_by_range(cxlrd, hpa);
+ cxlr = cxl_find_region_by_range(cxlrd, &cxled->spa_range);
if (!cxlr)
cxlr = construct_region(cxlrd, cxled);
mutex_unlock(&cxlrd->range_lock);
--
2.39.5