cxl/region: Fix cxl_region leak, cleanup targets at region delete
When a region is deleted any targets that have been previously assigned
to that region hold references to it. Trigger those references to
drop by detaching all targets at unregister_region() time.
Otherwise that region object will leak as userspace has lost the ability
to detach targets once region sysfs is torn down.
Cc: <stable@vger.kernel.org>
Fixes: b9686e8c8e
("cxl/region: Enable the assignment of endpoint decoders to regions")
Reviewed-by: Dave Jiang <dave.jiang@intel.com>
Reviewed-by: Vishal Verma <vishal.l.verma@intel.com>
Link: https://lore.kernel.org/r/166752183055.947915.17681995648556534844.stgit@dwillia2-xfh.jf.intel.com
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
This commit is contained in:
parent
a90accb358
commit
0d9e734018
|
@ -1557,8 +1557,19 @@ static struct cxl_region *to_cxl_region(struct device *dev)
|
|||
static void unregister_region(void *dev)
|
||||
{
|
||||
struct cxl_region *cxlr = to_cxl_region(dev);
|
||||
struct cxl_region_params *p = &cxlr->params;
|
||||
int i;
|
||||
|
||||
device_del(dev);
|
||||
|
||||
/*
|
||||
* Now that region sysfs is shutdown, the parameter block is now
|
||||
* read-only, so no need to hold the region rwsem to access the
|
||||
* region parameters.
|
||||
*/
|
||||
for (i = 0; i < p->interleave_ways; i++)
|
||||
detach_target(cxlr, i);
|
||||
|
||||
cxl_region_iomem_release(cxlr);
|
||||
put_device(dev);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue