Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1642359

Re: [PATCH] iio: adc: sun4i-gpadc-iio: fix parent device being used in devm function

From Maxime Ripard <maxime.ripard@free-electrons.com>
Newsgroups linux.kernel
Subject Re: [PATCH] iio: adc: sun4i-gpadc-iio: fix parent device being used in devm function
Date 2017-05-16 11:40 +0200
Message-ID <tHH7s-3Qc-9@gated-at.bofh.it> (permalink)
References <tHiVs-57h-5@gated-at.bofh.it> <tHkky-6aZ-17@gated-at.bofh.it> <tHkkz-6aZ-31@gated-at.bofh.it>
Organization linux.* mail to news gateway

Show all headers | View raw


[Multipart message — attachments visible in raw view] - view raw

On Mon, May 15, 2017 at 11:18:45AM +0200, Quentin Schulz wrote:
> Hi Maxime,
> 
> On 15/05/2017 11:11, Maxime Ripard wrote:
> > On Mon, May 15, 2017 at 09:39:02AM +0200, Quentin Schulz wrote:
> >> For the sake of DT binding stability, this IIO driver is a child of an
> >> MFD driver for Allwinner A10, A13 and A31 because there already exists a
> >> DT binding for this IP. The MFD driver has a DT node but the IIO driver
> >> does not.
> >>
> >> The IIO device registers the temperature sensor in the thermal framework
> >> using the DT node of the parent, the MFD device, so the thermal
> >> framework could match the phandle to the MFD device in the DT and the
> >> struct device used to register in the thermal framework.
> >>
> >> devm_thermal_zone_of_sensor_register was previously used to register the
> >> thermal sensor with the parent struct device of the IIO device,
> >> representing the MFD device. By doing so, we registered actually the
> >> parent in the devm routine and not the actual IIO device.
> >>
> >> This lead to the devm unregister function not being called when the IIO
> >> module driver is removed. It resulted in the thermal framework still
> >> polling the get_temp function of the IIO module while the device doesn't
> >> exist anymore, thus generated a kernel panic.
> >>
> >> Use the non-devm function instead and do the unregister manually in the
> >> remove function.
> >>
> >> Fixes: d1caa9905538 ("iio: adc: add support for Allwinner SoCs ADC")
> >>
> >> Signed-off-by: Quentin Schulz <quentin.schulz@free-electrons.com>
> >> Reported-by: Corentin Labbe <clabbe.montjoie@gmail.com>
> >> ---
> [...]
> >> @@ -688,6 +687,12 @@ static int sun4i_gpadc_remove(struct platform_device *pdev)
> >>  
> >>  	pm_runtime_put(&pdev->dev);
> >>  	pm_runtime_disable(&pdev->dev);
> >> +
> >> +	if (pdev->dev.of_node)
> >> +		thermal_zone_of_sensor_unregister(&pdev->dev, info->tzd);
> >> +	else
> >> +		thermal_zone_of_sensor_unregister(pdev->dev.parent, info->tzd);
> >> +
> > 
> > Can't we just store the device used to create the zone in the
> > structure as well, that would avoid that non-trivial logic.
> > 
> 
> Yes we could.
> 
> I've that same condition in the probe function, if pdev->dev.of_node
> then I continue in the probe dedicated to device probed from DT, or I
> continue with the probe dedicated to device probed via MFD.
> 
> The thermal_zone_of_sensor_register is different in those two functions,
> thus, I thought that it would make more sense to replicate the same
> condition in the remove to make the relation between the device used in
> thermal_zone_of_sensor_register and unregister clear.
> 
> That's just a matter of taste for me, so I'm definitely ok to write a v2
> for this change.

My point was only a cosmetic one. It's true that you have teh same
condition somewhere else, but you also have a lot of comments to
explain why there, and you don't have them here.

Adding a pointer to the structure would make it trivial for the
reader, without having to duplicate the comments.

Maxime

-- 
Maxime Ripard, Free Electrons
Embedded Linux and Kernel engineering
http://free-electrons.com

Back to linux.kernel | Previous | Next — Previous in thread | Find similar | Unroll thread


Thread

[PATCH] iio: adc: sun4i-gpadc-iio: fix parent device being used in devm function Quentin Schulz <quentin.schulz@free-electrons.com> - 2017-05-15 09:50 +0200
  Re: [PATCH] iio: adc: sun4i-gpadc-iio: fix parent device being used  in devm function Maxime Ripard <maxime.ripard@free-electrons.com> - 2017-05-15 11:20 +0200
    Re: [PATCH] iio: adc: sun4i-gpadc-iio: fix parent device being used  in devm function Quentin Schulz <quentin.schulz@free-electrons.com> - 2017-05-15 11:20 +0200
      Re: [PATCH] iio: adc: sun4i-gpadc-iio: fix parent device being used  in devm function Maxime Ripard <maxime.ripard@free-electrons.com> - 2017-05-16 11:40 +0200

csiph-web