Re: [PATCH V4] mfd: wm8994-core: Don't use managed regulator bulk get API

From: Viresh Kumar
Date: Fri Nov 25 2016 - 05:25:37 EST


On 25-11-16, 10:14, Lee Jones wrote:
> On Thu, 27 Oct 2016, Viresh Kumar wrote:
>
> > The kernel WARNs and then crashes today if wm8994_device_init() fails
> > after calling devm_regulator_bulk_get().
> >
> > That happens because there are multiple devices involved here and the
> > order in which managed resources are freed isn't correct.
> >
> > The regulators are added as children of wm8994->dev. Whereas,
> > devm_regulator_bulk_get() receives wm8994->dev as the device, though it
> > gets the same regulators which were added as children of wm8994->dev
> > earlier.
> >
> > During failures, the children are removed first and the core eventually
> > calls regulator_unregister() for them. As regulator_put() was never done
> > for them (opposite of devm_regulator_bulk_get()), the kernel WARNs at
> >
> > WARN_ON(rdev->open_count);
> >
> > And eventually it crashes from debugfs_remove_recursive().
>
> Is ...
>
> mfd: wm8994-core: disable regulators before removing them
>
> ... required as well, or is that separate?

It would be better if we get that too. Anyway, the $subject patch has a
dependency on it..

--
viresh