On 19/11/25 04:37PM, Dave Jiang wrote:


On 11/19/25 12:52 AM, Neeraj Kumar wrote:
create_pmem_region() creates cxl region based on region information
parsed from LSA. This routine required cxl root decoder and endpoint
decoder. Therefore added cxl_find_root_decoder_by_port() and
cxl_find_free_ep_decoder(). These routines find cxl root decoder and
free endpoint decoder on cxl bus using cxl port

Please consider:
create_pmem_region() creates CXL region based on region information
parsed from the Label Storage Area (LSA). This routine requires cxl root
decoder and endpoint decoder. Add cxl_find_root_decoder_by_port()
and cxl_find_free_ep_decoder() to find the root decoder and a free
endpoint decoder respectively.


Fixed it accordingly in V5


Signed-off-by: Neeraj Kumar <[email protected]>
---
 drivers/cxl/core/core.h        |  4 ++
 drivers/cxl/core/pmem_region.c | 97 ++++++++++++++++++++++++++++++++++
 drivers/cxl/core/region.c      | 13 +++--
 drivers/cxl/cxl.h              |  5 ++
 4 files changed, 115 insertions(+), 4 deletions(-)

diff --git a/drivers/cxl/core/core.h b/drivers/cxl/core/core.h
index beeb9b7527b8..dd2efd3deb5e 100644
--- a/drivers/cxl/core/core.h
+++ b/drivers/cxl/core/core.h
@@ -35,6 +35,7 @@ int cxl_decoder_detach(struct cxl_region *cxlr,
 #define CXL_REGION_TYPE(x) (&cxl_region_type)
 #define SET_CXL_REGION_ATTR(x) (&dev_attr_##x.attr),
 #define CXL_DAX_REGION_TYPE(x) (&cxl_dax_region_type)
+int verify_free_decoder(struct device *dev);
 int cxl_region_init(void);
 void cxl_region_exit(void);
 int cxl_get_poison_by_endpoint(struct cxl_port *port);
@@ -88,6 +89,9 @@ static inline struct cxl_region *to_cxl_region(struct device 
*dev)
 {
        return NULL;
 }
+static inline int verify_free_decoder(struct device *dev)
+{

this function needs to return something

Thanks for catching this. Fixed it in V5


+}
 #define CXL_REGION_ATTR(x) NULL
 #define CXL_REGION_TYPE(x) NULL
 #define SET_CXL_REGION_ATTR(x)
diff --git a/drivers/cxl/core/pmem_region.c b/drivers/cxl/core/pmem_region.c
index be4feb73aafc..06665937c180 100644
--- a/drivers/cxl/core/pmem_region.c
+++ b/drivers/cxl/core/pmem_region.c
@@ -291,3 +291,100 @@ int devm_cxl_add_pmem_region(struct cxl_region *cxlr)
        cxlr->cxl_nvb = NULL;
        return rc;
 }
+
+static int match_root_decoder(struct device *dev, const void *data)
+{
+       return is_root_decoder(dev);

Is it suppose to just grab the first root decoder? If so the function should be 
match_first_root_decoder(). However, should the root decoder cover the region 
it's trying to match to? Should there be some checks to see if the region fits 
under the root decoder range? Also, should it not check the root decoder flags 
to see if it has CXL_DECODER_F_PMEM set so the CFMWS can cover PMEM?


Yes Dave, Here we should check as you suggested. Also currently its only
considering only first decoder but it should return the root decoder
associated with particular endpoint decoder. I have fixed this in V5.



Regards,
Neeraj


Reply via email to