mirror of
https://github.com/torvalds/linux.git
synced 2024-11-22 20:22:09 +00:00
drivers/base: fix devres handling for master device
We weren't handling the devres issues for the master device failing a bind, or being unbound properly. Add a devres group to contain these, and release the resources at the appropriate points. Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
da9846ae15
commit
9e1ccb4a77
@ -133,9 +133,16 @@ static int try_to_bring_up_master(struct master *master,
|
|||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!devres_open_group(master->dev, NULL, GFP_KERNEL)) {
|
||||||
|
ret = -ENOMEM;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
/* Found all components */
|
/* Found all components */
|
||||||
ret = master->ops->bind(master->dev);
|
ret = master->ops->bind(master->dev);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
|
devres_release_group(master->dev, NULL);
|
||||||
|
dev_info(master->dev, "master bind failed: %d\n", ret);
|
||||||
master_remove_components(master);
|
master_remove_components(master);
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
@ -166,6 +173,7 @@ static void take_down_master(struct master *master)
|
|||||||
{
|
{
|
||||||
if (master->bound) {
|
if (master->bound) {
|
||||||
master->ops->unbind(master->dev);
|
master->ops->unbind(master->dev);
|
||||||
|
devres_release_group(master->dev, NULL);
|
||||||
master->bound = false;
|
master->bound = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user