Re: [PATCH 2/9] regulator: helper routine to extract regulator_init_data

Grant Likely
2011-10-04T23:48:44Z

On Wed, Oct 05, 2011 at 12:01:27AM +0100, Russell King - ARM Linux wrote:
> On Tue, Sep 27, 2011 at 01:10:04PM +0100, Mark Brown wrote:
> > On Tue, Sep 27, 2011 at 03:42:45PM +0530, Rajendra Nayak wrote:
> >
> > > + init_data = devm_kzalloc(dev, sizeof(struct regulator_init_data),
> > > + GFP_KERNEL);
> > > + if (!init_data)
> > > + return NULL; /* Out of memory? */
> >
> > This means that the init data will be kept around for the entire
> > lifetime of the device rather than being discarded.
>
> May I remind you that devm_* lifetime expires whenever the associated
> driver is unbound, which can be much shorter than the lifetime of the
> struct device.
>
> It expires when any of the following occurs:
> 1. userspace asks the associated driver to be unbound
> 2. the driver is removed
> 3. any driver probe for this struct device fails
> 4. the struct device is unregistered.
>
> So: don't use devm_* for anything other than stuff inside a driver being
> associated with the struct device itself. Other uses are a bug waiting
> to happen.

Yes, Russell is right. There were a number of places where I
suggested using devm_* in entirely the wrong places. Double check
anyplace where you've added devm_ calls.

g.