Messages in this thread Patch in this message | | | From | "Zhijian Li (Fujitsu)" <> | Subject | Re: [PATCH 2/2] cxl/region: Fix missing put_device(region_dev) | Date | Mon, 29 Apr 2024 08:35:43 +0000 |
| |
TBH, even though this patch seems correct, there are still a few to_cxl_region() callers where they dereference the return value directly without checking if it's NULL.
So I'm fine to drop this one because to_cxl_region() will trigger a WARN before returning NULL.
static struct cxl_region *to_cxl_region(struct device *dev) { if (dev_WARN_ONCE(dev, dev->type != &cxl_region_type, "not a cxl_region device\n")) return NULL; return container_of(dev, struct cxl_region, dev); }
Let me know your thoughts.
Thanks Zhijian
On 29/04/2024 09:31, Li Zhijian wrote: >> mutex_lock(&cxlrd->range_lock); >> region_dev = device_find_child(&cxlrd->cxlsd.cxld.dev, hpa, >> match_region_by_range); >> if (!region_dev) >> cxlr = construct_region(cxlrd, cxled); >> else >> cxlr = to_cxl_region(region_dev); >> mutex_unlock(&cxlrd->range_lock); >> >> rc = PTR_ERR_OR_ZERO(cxlr); >> if (rc) >> goto out; >> >> if (!region_dev) >> region_dev = &cxlr->dev; > > When to_cxl_region(region_dev) fails, put_device(region_dev) should be > called to decrease the reference count added by device_find_child(). > > Simply put_device(region_dev) if region_dev is valid in the error path. > > Fixes: a32320b71f08 ("cxl/region: Add region autodiscovery") > Signed-off-by: Li Zhijian <lizhijian@fujitsu.com> > --- > drivers/cxl/core/region.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/drivers/cxl/core/region.c b/drivers/cxl/core/region.c > index 3c80aa263a65..75390865382f 100644 > --- a/drivers/cxl/core/region.c > +++ b/drivers/cxl/core/region.c > @@ -3117,8 +3117,9 @@ int cxl_add_to_region(struct cxl_port *root, struct cxl_endpoint_decoder *cxled) > p->res); > } > > - put_device(region_dev); > out: > + if (region_dev) > + put_device(region_dev); > put_device(cxlrd_dev); > return rc; > }
| |