Hi, On Fri, Apr 25, 2014 at 12:03:31AM +0900, Chanwoo Choi wrote: > On Thu, Apr 24, 2014 at 11:44 PM, Felipe Balbi <ba...@ti.com> wrote: > > On Thu, Apr 24, 2014 at 09:34:50PM +0900, Chanwoo Choi wrote: > >> This patch add device managed devm_extcon_dev_{allocate,free} to > >> automatically > >> free the memory of extcon_dev structure without handling free operation. > >> > >> Signed-off-by: Chanwoo Choi <cw00.c...@samsung.com> > >> --- > >> drivers/extcon/extcon-class.c | 70 > >> +++++++++++++++++++++++++++++++++++-------- > >> include/linux/extcon.h | 11 +++++++ > >> 2 files changed, 69 insertions(+), 12 deletions(-) > >> > >> diff --git a/drivers/extcon/extcon-class.c b/drivers/extcon/extcon-class.c > >> index bec66d4..f369168 100644 > >> --- a/drivers/extcon/extcon-class.c > >> +++ b/drivers/extcon/extcon-class.c > >> @@ -604,6 +604,64 @@ void extcon_dev_free(struct extcon_dev *edev) > >> } > >> EXPORT_SYMBOL_GPL(extcon_dev_free); > >> > >> +static int devm_extcon_dev_match(struct device *dev, void *res, void > >> *data) > >> +{ > >> + struct extcon_dev **r = res; > >> + > >> + if (!r || !*r) { > >> + WARN_ON(!r || !*r); > >> + return 0; > >> + } > >> + > >> + return *r == data; > >> +} > >> + > >> +static void devm_extcon_dev_release(struct device *dev, void *res) > >> +{ > >> + extcon_dev_free(*(struct extcon_dev **)res); > >> +} > >> + > >> +/** > >> + * devm_extcon_dev_allocate - Allocate managed extcon device > >> + * @dev: device owning the extcon device being created > >> + * @supported_cable: Array of supported cable names ending with NULL. > >> + * If supported_cable is NULL, cable name related APIs > >> + * are disabled. > >> + * > >> + * This function manages automatically the memory of extcon device using > >> device > >> + * resource management and simplify the control of freeing the memory of > >> extcon > >> + * device. > >> + * > >> + * Returns the pointer memory of allocated extcon_dev if success or NULL > >> if fail > >> + */ > >> +struct extcon_dev *devm_extcon_dev_allocate(struct device *dev, > >> + const char **supported_cable) > >> +{ > >> + struct extcon_dev **ptr, *edev; > >> + > >> + ptr = devres_alloc(devm_extcon_dev_release, sizeof(*ptr), > >> GFP_KERNEL); > >> + if (!ptr) > >> + return NULL; > > > > if this fails you return NULL; > > > >> + > >> + edev = extcon_dev_allocate(supported_cable); > > > > if this fails, you return -ENOMEM. Not very nice, if you ask me. > > I'll fix it as following: > > If both extcon_dev_allocate() and devm_excon_dev_allocate() failed to > allocate memory, > two functions would return NULL pointer instead of ERR_PTR(-ENOMEM).
your call, I'd rather see them both returning ERR_PTR(-ENOMEM), but no strong feelings. cheers -- balbi
signature.asc
Description: Digital signature