mirror of
https://github.com/torvalds/linux.git
synced 2024-12-29 14:21:47 +00:00
cxl: Fix device reference leak in cxl_port_perf_data_calculate()
cxl_port_perf_data_calculate() calls find_cxl_root() and does not
dereference the 'struct device' in the cxl_root->port. find_cxl_root()
calls get_device() and takes a reference on the port 'struct device'
member. Use the __free() macro to ensure the dereference happens.
Fixes: 7a4f148dd8
("cxl: Compute the entire CXL path latency and bandwidth data")
Reviewed-by: Ira Weiny <ira.weiny@intel.com>
Signed-off-by: Dave Jiang <dave.jiang@intel.com>
Link: https://lore.kernel.org/r/170449246681.3779673.2288926019977963333.stgit@djiang5-mobl3
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
This commit is contained in:
parent
44cd71ef7b
commit
98e7ab3345
@ -162,7 +162,6 @@ static int cxl_port_perf_data_calculate(struct cxl_port *port,
|
||||
struct xarray *dsmas_xa)
|
||||
{
|
||||
struct access_coordinate c;
|
||||
struct cxl_root *cxl_root;
|
||||
struct dsmas_entry *dent;
|
||||
int valid_entries = 0;
|
||||
unsigned long index;
|
||||
@ -174,7 +173,11 @@ static int cxl_port_perf_data_calculate(struct cxl_port *port,
|
||||
return rc;
|
||||
}
|
||||
|
||||
cxl_root = find_cxl_root(port);
|
||||
struct cxl_root *cxl_root __free(put_cxl_root) = find_cxl_root(port);
|
||||
|
||||
if (!cxl_root)
|
||||
return -ENODEV;
|
||||
|
||||
if (!cxl_root->ops || !cxl_root->ops->qos_class)
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user