Skip to content

Commit

Permalink
pinctrl: ocelot: add missing destroy_workqueue() in error path in oce…
Browse files Browse the repository at this point in the history
…lot_pinctrl_probe()

[ Upstream commit 8ada020 ]

Using devm_add_action_or_reset() to make workqueue device-managed, so it can be
destroy whenever the driver is unbound.

Fixes: c297561 ("pinctrl: ocelot: Fix interrupt controller")
Signed-off-by: Yang Yingliang <yangyingliang@huawei.com>
Reviewed-by: Horatiu Vultur <horatiu.vultur@microchip.com>
Link: https://lore.kernel.org/r/20220925021258.1492905-1-yangyingliang@huawei.com
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
  • Loading branch information
Yang Yingliang authored and gregkh committed Dec 31, 2022
1 parent 55442d2 commit e02b42f
Showing 1 changed file with 10 additions and 10 deletions.
20 changes: 10 additions & 10 deletions drivers/pinctrl/pinctrl-ocelot.c
Original file line number Diff line number Diff line change
Expand Up @@ -2047,6 +2047,11 @@ static struct regmap *ocelot_pinctrl_create_pincfg(struct platform_device *pdev,
return devm_regmap_init_mmio(&pdev->dev, base, &regmap_config);
}

static void ocelot_destroy_workqueue(void *data)
{
destroy_workqueue(data);
}

static int ocelot_pinctrl_probe(struct platform_device *pdev)
{
const struct ocelot_match_data *data;
Expand Down Expand Up @@ -2078,6 +2083,11 @@ static int ocelot_pinctrl_probe(struct platform_device *pdev)
if (!info->wq)
return -ENOMEM;

ret = devm_add_action_or_reset(dev, ocelot_destroy_workqueue,
info->wq);
if (ret)
return ret;

info->pincfg_data = &data->pincfg_data;

reset = devm_reset_control_get_optional_shared(dev, "switch");
Expand Down Expand Up @@ -2119,23 +2129,13 @@ static int ocelot_pinctrl_probe(struct platform_device *pdev)
return 0;
}

static int ocelot_pinctrl_remove(struct platform_device *pdev)
{
struct ocelot_pinctrl *info = platform_get_drvdata(pdev);

destroy_workqueue(info->wq);

return 0;
}

static struct platform_driver ocelot_pinctrl_driver = {
.driver = {
.name = "pinctrl-ocelot",
.of_match_table = of_match_ptr(ocelot_pinctrl_of_match),
.suppress_bind_attrs = true,
},
.probe = ocelot_pinctrl_probe,
.remove = ocelot_pinctrl_remove,
};
module_platform_driver(ocelot_pinctrl_driver);

Expand Down

0 comments on commit e02b42f

Please sign in to comment.