[PATCH v3 2/2] cxl/region: Use __free(put_device) in find_pos_and_ways()

Alison Schofield <[email protected]> Fri, 24 Jul 2026 15:28:02 -0700
Newsgroups org.kernel.vger.linux-cxl
Message-ID <550db1771b3d30277988d3e575f1a6893a26b0ae.1784931354.git.alison.schofield@intel.com>
Use __free(put_device) for the switch decoder reference returned by
device_find_child() instead of releasing it with an open-coded
put_device().

This matches the scoped device reference handling used elsewhere in
the file.

Suggested-by: Li Ming <[email protected]>
Reviewed-by: Li Ming <[email protected]>
Signed-off-by: Alison Schofield <[email protected]>
---

Changes in v3:
- Declare and assign dev in one statement per cleanup.h (Jonathan)
Changes in v2:
- New patch

 drivers/cxl/core/region.c | 7 ++-----
 1 file changed, 2 insertions(+), 5 deletions(-)

diff --git a/drivers/cxl/core/region.c b/drivers/cxl/core/region.c
index 6d902e1c4161..904e80e89206 100644
--- a/drivers/cxl/core/region.c
+++ b/drivers/cxl/core/region.c
@@ -1913,15 +1913,14 @@ static int find_pos_and_ways(struct cxl_port *port, struct range *range,
 {
 	struct cxl_switch_decoder *cxlsd;
 	struct cxl_port *parent;
-	struct device *dev;
 	int rc = -ENXIO;
 
 	parent = parent_port_of(port);
 	if (!parent)
 		return rc;
 
-	dev = device_find_child(&parent->dev, range,
-				match_switch_decoder_by_range);
+	struct device *dev __free(put_device) =
+		device_find_child(&parent->dev, range, match_switch_decoder_by_range);
 	if (!dev) {
 		dev_err(port->uport_dev,
 			"failed to find decoder mapping %#llx-%#llx\n",
@@ -1944,8 +1943,6 @@ static int find_pos_and_ways(struct cxl_port *port, struct range *range,
 			dev_name(&port->dev),
 			dev_name(port->parent_dport->dport_dev), dev_name(dev));
 
-	put_device(dev);
-
 	return rc;
 }
 
-- 
2.37.3