|
@@ -614,8 +614,9 @@ struct phy *phy_create(struct device *dev, const struct phy_ops *ops,
|
|
return phy;
|
|
return phy;
|
|
|
|
|
|
put_dev:
|
|
put_dev:
|
|
- put_device(&phy->dev);
|
|
|
|
- ida_remove(&phy_ida, phy->id);
|
|
|
|
|
|
+ put_device(&phy->dev); /* calls phy_release() which frees resources */
|
|
|
|
+ return ERR_PTR(ret);
|
|
|
|
+
|
|
free_phy:
|
|
free_phy:
|
|
kfree(phy);
|
|
kfree(phy);
|
|
return ERR_PTR(ret);
|
|
return ERR_PTR(ret);
|
|
@@ -799,7 +800,7 @@ static void phy_release(struct device *dev)
|
|
|
|
|
|
phy = to_phy(dev);
|
|
phy = to_phy(dev);
|
|
dev_vdbg(dev, "releasing '%s'\n", dev_name(dev));
|
|
dev_vdbg(dev, "releasing '%s'\n", dev_name(dev));
|
|
- ida_remove(&phy_ida, phy->id);
|
|
|
|
|
|
+ ida_simple_remove(&phy_ida, phy->id);
|
|
kfree(phy);
|
|
kfree(phy);
|
|
}
|
|
}
|
|
|
|
|