]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
cxl/memdev: Pin parents for entire memdev lifetime
authorDan Williams <djbw@kernel.org>
Tue, 19 May 2026 21:01:56 +0000 (14:01 -0700)
committerDave Jiang <dave.jiang@intel.com>
Fri, 12 Jun 2026 20:47:29 +0000 (13:47 -0700)
In order to be able to manage the driver that uses a memdev attach
mechanism the parent needs to stick around for the
device_release_driver(cxlmd->dev.parent) event.

Fixes: 29317f8dc6ed ("cxl/mem: Introduce cxl_memdev_attach for CXL-dependent operation")
Signed-off-by: Dan Williams <djbw@kernel.org>
Reviewed-by: Alejandro Lucero <alucerop@amd.com>
Tested-by: ALejandro Lucero <alucerop@amd.com>
Reviewed-by: Dave Jiang <dave.jiang@intel.com>
Link: https://patch.msgid.link/20260519210158.1499795-4-djbw@kernel.org
Signed-off-by: Dave Jiang <dave.jiang@intel.com>
drivers/cxl/core/memdev.c

index 80e65690eb773e7e043bea2e52933e698ae8f8e9..91c99eeea92ce4d6c2fffc6222a39a239af46d33 100644 (file)
@@ -25,9 +25,11 @@ static DEFINE_IDA(cxl_memdev_ida);
 static void cxl_memdev_release(struct device *dev)
 {
        struct cxl_memdev *cxlmd = to_cxl_memdev(dev);
+       struct device *parent = dev->parent;
 
        ida_free(&cxl_memdev_ida, cxlmd->id);
        kfree(cxlmd);
+       put_device(parent);
 }
 
 static char *cxl_memdev_devnode(const struct device *dev, umode_t *mode, kuid_t *uid,
@@ -707,7 +709,7 @@ static struct cxl_memdev *cxl_memdev_alloc(struct cxl_dev_state *cxlds,
        dev = &cxlmd->dev;
        device_initialize(dev);
        lockdep_set_class(&dev->mutex, &cxl_memdev_key);
-       dev->parent = cxlds->dev;
+       dev->parent = get_device(cxlds->dev);
        dev->bus = &cxl_bus_type;
        dev->devt = MKDEV(cxl_mem_major, cxlmd->id);
        dev->type = &cxl_memdev_type;