]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
cxl/region: Constify cxl_region_resource_contains()
authorDan Williams <dan.j.williams@intel.com>
Fri, 27 Mar 2026 05:28:16 +0000 (22:28 -0700)
committerDave Jiang <dave.jiang@intel.com>
Wed, 1 Apr 2026 15:12:17 +0000 (08:12 -0700)
The call to cxl_region_resource_contains() in hmem_register_cxl_device()
need not cast away 'const'. The problem is the usage of the
bus_for_each_dev() API which does not mark its @data parameter as 'const'.
Switch to bus_find_device() which does take 'const' @data, fixup
cxl_region_resource_contains() and its caller.

Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Reviewed-by: Ira Weiny <ira.weiny@intel.com>
Reviewed-by: Alison Schofield <alison.schofield@intel.com>
Reviewed-by: Dave Jiang <dave.jiang@intel.com>
Link: https://patch.msgid.link/20260327052821.440749-5-dan.j.williams@intel.com
Signed-off-by: Dave Jiang <dave.jiang@intel.com>
drivers/cxl/core/region.c
drivers/cxl/cxl.h
drivers/dax/hmem/hmem.c

index 657844cf0379a61be837326d97cb922a4af0a41d..30787faef352659760283b0be8af0bbd4d4d2c81 100644 (file)
@@ -4225,9 +4225,9 @@ static int cxl_region_setup_poison(struct cxl_region *cxlr)
        return devm_add_action_or_reset(dev, remove_debugfs, dentry);
 }
 
-static int region_contains_resource(struct device *dev, void *data)
+static int region_contains_resource(struct device *dev, const void *data)
 {
-       struct resource *res = data;
+       const struct resource *res = data;
        struct cxl_region *cxlr;
        struct cxl_region_params *p;
 
@@ -4246,11 +4246,12 @@ static int region_contains_resource(struct device *dev, void *data)
        return resource_contains(p->res, res) ? 1 : 0;
 }
 
-bool cxl_region_contains_resource(struct resource *res)
+bool cxl_region_contains_resource(const struct resource *res)
 {
        guard(rwsem_read)(&cxl_rwsem.region);
-       return bus_for_each_dev(&cxl_bus_type, NULL, res,
-                               region_contains_resource) != 0;
+       struct device *dev __free(put_device) = bus_find_device(
+               &cxl_bus_type, NULL, res, region_contains_resource);
+       return !!dev;
 }
 EXPORT_SYMBOL_FOR_MODULES(cxl_region_contains_resource, "dax_hmem");
 
index 84ad04a02bdef4ca29a67a2f64d56bc6ed4d699d..340bdc9fcacc7d4fe508a6d99be6ef856a487996 100644 (file)
@@ -941,7 +941,7 @@ struct cxl_pmem_region *to_cxl_pmem_region(struct device *dev);
 int cxl_add_to_region(struct cxl_endpoint_decoder *cxled);
 struct cxl_dax_region *to_cxl_dax_region(struct device *dev);
 u64 cxl_port_get_spa_cache_alias(struct cxl_port *endpoint, u64 spa);
-bool cxl_region_contains_resource(struct resource *res);
+bool cxl_region_contains_resource(const struct resource *res);
 #else
 static inline bool is_cxl_pmem_region(struct device *dev)
 {
@@ -964,7 +964,7 @@ static inline u64 cxl_port_get_spa_cache_alias(struct cxl_port *endpoint,
 {
        return 0;
 }
-static inline bool cxl_region_contains_resource(struct resource *res)
+static inline bool cxl_region_contains_resource(const struct resource *res)
 {
        return false;
 }
index 0051e553c33f5de41991e8888979bfb03df2c167..b2ab1292fa81d6a8ab127407222b2f8f0082a859 100644 (file)
@@ -159,7 +159,7 @@ static int hmem_register_cxl_device(struct device *host, int target_nid,
                              IORES_DESC_CXL) == REGION_DISJOINT)
                return 0;
 
-       if (cxl_region_contains_resource((struct resource *)res)) {
+       if (cxl_region_contains_resource(res)) {
                dev_dbg(host, "CXL claims resource, dropping: %pr\n", res);
                return 0;
        }