Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider: - [Medium] When the devicetree's `ddc-i2c-bus` property explicitly points to the DP AUX I2C adapter, the module and device references acquired by `of_get_i2c_adapter_by_node()` are leaked during error cleanup and driver removal. --
--- Patch [1]: [PATCH] drm/panel-edp: take i2c adapter module reference --- commit 2c5917c76c861a6fb28736134884b2a3575fb31a Author: Johan Hovold <[email protected]> drm/panel-edp: take i2c adapter module reference The i2c subsystem currently blocks during adapter deregistration whenever there are consumers holding a reference. Switch to using of_get_i2c_adapter_by_node() which also takes a reference to the adapter module so that an attempt to unload the module while in use fails gracefully instead of blocking uninterruptibly. > diff --git a/drivers/gpu/drm/panel/panel-edp.c > b/drivers/gpu/drm/panel/panel-edp.c > index f66474d3ef65e..a65bfe50be817 100644 > --- a/drivers/gpu/drm/panel/panel-edp.c > +++ b/drivers/gpu/drm/panel/panel-edp.c > @@ -874,7 +874,7 @@ static int panel_edp_probe(struct device *dev, const > struct panel_desc *desc, > > ddc = of_parse_phandle(dev->of_node, "ddc-i2c-bus", 0); > if (ddc) { > - panel->ddc = of_find_i2c_adapter_by_node(ddc); > + panel->ddc = of_get_i2c_adapter_by_node(ddc); > of_node_put(ddc); [ ... ] > @@ -939,7 +939,7 @@ static int panel_edp_probe(struct device *dev, const > struct panel_desc *desc, > pm_runtime_disable(dev); > err_finished_ddc_init: > if (panel->ddc && (!panel->aux || panel->ddc != &panel->aux->ddc)) > - put_device(&panel->ddc->dev); > + i2c_put_adapter(panel->ddc); [Severity: Medium] If the devicetree's "ddc-i2c-bus" property explicitly points to the DP AUX I2C adapter node, panel->ddc will equal &panel->aux->ddc. While the check panel->ddc != &panel->aux->ddc was already present, switching to of_get_i2c_adapter_by_node() means a module reference is now acquired here if the node is parsed from the devicetree. Does skipping i2c_put_adapter() in this case cause a module reference leak when an error occurs during probe? > > return err; > } > @@ -984,7 +984,7 @@ static void panel_edp_remove(struct device *dev) > pm_runtime_dont_use_autosuspend(dev); > pm_runtime_disable(dev); > if (panel->ddc && (!panel->aux || panel->ddc != &panel->aux->ddc)) > - put_device(&panel->ddc->dev); > + i2c_put_adapter(panel->ddc); [Severity: Medium] Similarly, does this skip i2c_put_adapter() and leak the module reference during driver removal if the devicetree explicitly pointed to the AUX DDC adapter? -- Sashiko AI review ยท https://sashiko.dev/#/patchset/[email protected]?part=1
