X-Git-Url: https://git.openpandora.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=drivers%2Fregulator%2Fcore.c;h=adba3d6495c0cda173e4263aeb42cab6b0170787;hb=3a8a47c5a3d71507abed60d05af1826f334d1e3e;hp=669d0216022195e36bcb8f59b25cf14de1dff6c9;hpb=c292fe4aae5aa5c089633bc40342d27c8275306a;p=pandora-kernel.git diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c index 669d02160221..adba3d6495c0 100644 --- a/drivers/regulator/core.c +++ b/drivers/regulator/core.c @@ -1314,12 +1314,14 @@ void regulator_put(struct regulator *regulator) device_remove_file(regulator->dev, ®ulator->dev_attr); kfree(regulator->dev_attr.attr.name); } + mutex_lock(&rdev->mutex); kfree(regulator->supply_name); list_del(®ulator->list); kfree(regulator); rdev->open_count--; rdev->exclusive = 0; + mutex_unlock(&rdev->mutex); module_put(rdev->owner); mutex_unlock(®ulator_list_mutex); @@ -2765,6 +2767,8 @@ unset_supplies: unset_regulator_supplies(rdev); scrub: + if (rdev->supply) + regulator_put(rdev->supply); kfree(rdev->constraints); device_unregister(&rdev->dev); /* device core frees rdev */ @@ -2799,8 +2803,8 @@ void regulator_unregister(struct regulator_dev *rdev) list_del(&rdev->list); if (rdev->supply) regulator_put(rdev->supply); - device_unregister(&rdev->dev); kfree(rdev->constraints); + device_unregister(&rdev->dev); mutex_unlock(®ulator_list_mutex); } EXPORT_SYMBOL_GPL(regulator_unregister);