Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1233610 > unrolled thread
| Started by | Vaishali Thakkar <vthakkar1994@gmail.com> |
|---|---|
| First post | 2015-09-27 06:20 +0200 |
| Last post | 2015-09-29 12:30 +0200 |
| Articles | 5 — 3 participants |
Back to article view | Back to linux.kernel
This discussion starts older than the indexed window; earlier articles aren't shown. The article labeled Started by
below is the oldest one visible, not the original post.
Re: [PATCH] iio: gyro: ssp_gyro_sensor: Use devm_iio_device_register Vaishali Thakkar <vthakkar1994@gmail.com> - 2015-09-27 06:20 +0200
Re: [PATCH] iio: gyro: ssp_gyro_sensor: Use devm_iio_device_register Jonathan Cameron <jic23@kernel.org> - 2015-09-27 15:40 +0200
Re: [PATCH] iio: gyro: ssp_gyro_sensor: Use devm_iio_device_register Vaishali Thakkar <vthakkar1994@gmail.com> - 2015-09-28 03:20 +0200
Re: [PATCH] iio: gyro: ssp_gyro_sensor: Use devm_iio_device_register Vaishali Thakkar <vthakkar1994@gmail.com> - 2015-09-28 12:10 +0200
Re: [PATCH] iio: gyro: ssp_gyro_sensor: Use devm_iio_device_register Karol Wrona <k.wrona@samsung.com> - 2015-09-29 12:30 +0200
| From | Vaishali Thakkar <vthakkar1994@gmail.com> |
|---|---|
| Date | 2015-09-27 06:20 +0200 |
| Subject | Re: [PATCH] iio: gyro: ssp_gyro_sensor: Use devm_iio_device_register |
| Message-ID | <qdbBo-4ra-5@gated-at.bofh.it> |
On Mon, Sep 21, 2015 at 4:48 PM, Karol Wrona <k.wrona@samsung.com> wrote:
> On 09/21/2015 11:53 AM, Jonathan Cameron wrote:
>>
>>
>> On 21 September 2015 09:18:39 BST, Karol Wrona <k.wrona@samsung.com> wrote:
>>> On 09/20/2015 09:18 PM, Jonathan Cameron wrote:
>>>> On 14/09/15 17:08, Vaishali Thakkar wrote:
>>>>> Use resourced managed function devm_iio_device_register to
>>>>> make error path simpler. To be compatible with the change,
>>>>> the remove function is removed as it is now redundant.
>>>>>
>>>>> Signed-off-by: Vaishali Thakkar <vthakkar1994@gmail.com>
>>>> This patch is reasonable, but makes me wonder if there is an issue
>>>> in the remove path for this driver. It relies on the ssp_sensors
>>> common
>>>> module. That in ssp_spi.c uses the fact ssp_register_consumer
>>>> has saved the struct iio_dev into a local array in the core driver.
>>>> I think this means that a remove of this function will leave a
>>> possible
>>>> null pointer de reference.
>>> You are right. In this case we need something like
>>> ssp_deregister_consumer(...) in ssp_dev.c. So I think that "remove
>>> func"
>>> should stay. Of course we can switch to devm iio register.
>> Not if you want to remove the userspace interface before doing you new function call. Doing so gives a nasty race.
> So better leave it out:
> iio_device_unregister(indio_dev) will disable the buffers and through
> ops disables the sensor and than remove iio dev ptr from the internal table.
>
Sorry for the late reply. Yes, I guess I missed the point that
'ssp_register_consumer' is
used in probe function. And I believe that devm_iio_register is useful
only when we
can convert all other functions to their devm counterparts and remove
function will go
away.
But then why don't we need ssp_deregister_consumer here in the remove function?
Is it automatically handled by iio_device_unregister? I guess Karol
tried to explain
the same thing but I am still confused. Same case applies for
ssp_sensors/ssp_dev.c.
>>>
>>> Also the same can (rather should) be done for accelerometer sensor
>>> (ssp_accel_sensor.c).
>>>
>>> Vaishali, if you want please feel free and send patch.
>>>
>>>>
>>>> Now I suspect that case doesn't actually occur because the relevant
>>>> device elements are disabled whenever this module is removed. Having
>>>> said that we might expect an ssp_unregister_consumer function that
>>>> sets the relevant pointer back to null on removal so as to avoid
>>>> any possible race conditions around driver removal / reprobing.
>>>> A spot of defensive programming rather than necessarily a bug to be
>>>> fixed!
>>>>
>>>> One little process thing. This driver was written by Karol so patches
>>>> should probably always cc Karol as well as the more general
>>>> maintainer / reviewers for IIO. Added cc.
>>>>
>>>> Jonathan
>>>>> ---
>>>>> drivers/iio/gyro/ssp_gyro_sensor.c | 12 +-----------
>>>>> 1 file changed, 1 insertion(+), 11 deletions(-)
>>>>>
>>>>> diff --git a/drivers/iio/gyro/ssp_gyro_sensor.c
>>> b/drivers/iio/gyro/ssp_gyro_sensor.c
>>>>> index 0a8afdd..ac88de7 100644
>>>>> --- a/drivers/iio/gyro/ssp_gyro_sensor.c
>>>>> +++ b/drivers/iio/gyro/ssp_gyro_sensor.c
>>>>> @@ -134,7 +134,7 @@ static int ssp_gyro_probe(struct platform_device
>>> *pdev)
>>>>>
>>>>> platform_set_drvdata(pdev, indio_dev);
>>>>>
>>>>> - ret = iio_device_register(indio_dev);
>>>>> + ret = devm_iio_device_register(&pdev->dev, indio_dev);
>>>>> if (ret < 0)
>>>>> return ret;
>>>>>
>>>>> @@ -144,21 +144,11 @@ static int ssp_gyro_probe(struct
>>> platform_device *pdev)
>>>>> return 0;
>>>>> }
>>>>>
>>>>> -static int ssp_gyro_remove(struct platform_device *pdev)
>>>>> -{
>>>>> - struct iio_dev *indio_dev = platform_get_drvdata(pdev);
>>>>> -
>>>>> - iio_device_unregister(indio_dev);
>>>>> -
>>>>> - return 0;
>>>>> -}
>>>>> -
>>>>> static struct platform_driver ssp_gyro_driver = {
>>>>> .driver = {
>>>>> .name = SSP_GYROSCOPE_NAME,
>>>>> },
>>>>> .probe = ssp_gyro_probe,
>>>>> - .remove = ssp_gyro_remove,
>>>>> };
>>>>>
>>>>> module_platform_driver(ssp_gyro_driver);
>>>>>
>>>>
>>>> --
>>>> To unsubscribe from this list: send the line "unsubscribe linux-iio"
>>> in
>>>> the body of a message to majordomo@vger.kernel.org
>>>> More majordomo info at http://vger.kernel.org/majordomo-info.html
>>>>
>>
>
--
Vaishali
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
[toc] | [next] | [standalone]
| From | Jonathan Cameron <jic23@kernel.org> |
|---|---|
| Date | 2015-09-27 15:40 +0200 |
| Message-ID | <qdklj-95-13@gated-at.bofh.it> |
| In reply to | #1233610 |
On 27/09/15 05:16, Vaishali Thakkar wrote:
> On Mon, Sep 21, 2015 at 4:48 PM, Karol Wrona <k.wrona@samsung.com> wrote:
>> On 09/21/2015 11:53 AM, Jonathan Cameron wrote:
>>>
>>>
>>> On 21 September 2015 09:18:39 BST, Karol Wrona <k.wrona@samsung.com> wrote:
>>>> On 09/20/2015 09:18 PM, Jonathan Cameron wrote:
>>>>> On 14/09/15 17:08, Vaishali Thakkar wrote:
>>>>>> Use resourced managed function devm_iio_device_register to
>>>>>> make error path simpler. To be compatible with the change,
>>>>>> the remove function is removed as it is now redundant.
>>>>>>
>>>>>> Signed-off-by: Vaishali Thakkar <vthakkar1994@gmail.com>
>>>>> This patch is reasonable, but makes me wonder if there is an issue
>>>>> in the remove path for this driver. It relies on the ssp_sensors
>>>> common
>>>>> module. That in ssp_spi.c uses the fact ssp_register_consumer
>>>>> has saved the struct iio_dev into a local array in the core driver.
>>>>> I think this means that a remove of this function will leave a
>>>> possible
>>>>> null pointer de reference.
>>>> You are right. In this case we need something like
>>>> ssp_deregister_consumer(...) in ssp_dev.c. So I think that "remove
>>>> func"
>>>> should stay. Of course we can switch to devm iio register.
>>> Not if you want to remove the userspace interface before doing you new function call. Doing so gives a nasty race.
>> So better leave it out:
>> iio_device_unregister(indio_dev) will disable the buffers and through
>> ops disables the sensor and than remove iio dev ptr from the internal table.
>>
>
> Sorry for the late reply. Yes, I guess I missed the point that
> 'ssp_register_consumer' is
> used in probe function. And I believe that devm_iio_register is useful
> only when we
> can convert all other functions to their devm counterparts and remove
> function will go
> away.
Yes. Exactly.
>
> But then why don't we need ssp_deregister_consumer here in the remove function?
> Is it automatically handled by iio_device_unregister? I guess Karol
> tried to explain
> the same thing but I am still confused. Same case applies for
> ssp_sensors/ssp_dev.c.
We do indeed need an ssp_deregister_consumer function to be called in the remove.
I don't think one currently exists, so that needs fixing.
>
>>>>
>>>> Also the same can (rather should) be done for accelerometer sensor
>>>> (ssp_accel_sensor.c).
>>>>
>>>> Vaishali, if you want please feel free and send patch.
>>>>
>>>>>
>>>>> Now I suspect that case doesn't actually occur because the relevant
>>>>> device elements are disabled whenever this module is removed. Having
>>>>> said that we might expect an ssp_unregister_consumer function that
>>>>> sets the relevant pointer back to null on removal so as to avoid
>>>>> any possible race conditions around driver removal / reprobing.
>>>>> A spot of defensive programming rather than necessarily a bug to be
>>>>> fixed!
>>>>>
>>>>> One little process thing. This driver was written by Karol so patches
>>>>> should probably always cc Karol as well as the more general
>>>>> maintainer / reviewers for IIO. Added cc.
>>>>>
>>>>> Jonathan
>>>>>> ---
>>>>>> drivers/iio/gyro/ssp_gyro_sensor.c | 12 +-----------
>>>>>> 1 file changed, 1 insertion(+), 11 deletions(-)
>>>>>>
>>>>>> diff --git a/drivers/iio/gyro/ssp_gyro_sensor.c
>>>> b/drivers/iio/gyro/ssp_gyro_sensor.c
>>>>>> index 0a8afdd..ac88de7 100644
>>>>>> --- a/drivers/iio/gyro/ssp_gyro_sensor.c
>>>>>> +++ b/drivers/iio/gyro/ssp_gyro_sensor.c
>>>>>> @@ -134,7 +134,7 @@ static int ssp_gyro_probe(struct platform_device
>>>> *pdev)
>>>>>>
>>>>>> platform_set_drvdata(pdev, indio_dev);
>>>>>>
>>>>>> - ret = iio_device_register(indio_dev);
>>>>>> + ret = devm_iio_device_register(&pdev->dev, indio_dev);
>>>>>> if (ret < 0)
>>>>>> return ret;
>>>>>>
>>>>>> @@ -144,21 +144,11 @@ static int ssp_gyro_probe(struct
>>>> platform_device *pdev)
>>>>>> return 0;
>>>>>> }
>>>>>>
>>>>>> -static int ssp_gyro_remove(struct platform_device *pdev)
>>>>>> -{
>>>>>> - struct iio_dev *indio_dev = platform_get_drvdata(pdev);
>>>>>> -
>>>>>> - iio_device_unregister(indio_dev);
>>>>>> -
>>>>>> - return 0;
>>>>>> -}
>>>>>> -
>>>>>> static struct platform_driver ssp_gyro_driver = {
>>>>>> .driver = {
>>>>>> .name = SSP_GYROSCOPE_NAME,
>>>>>> },
>>>>>> .probe = ssp_gyro_probe,
>>>>>> - .remove = ssp_gyro_remove,
>>>>>> };
>>>>>>
>>>>>> module_platform_driver(ssp_gyro_driver);
>>>>>>
>>>>>
>>>>> --
>>>>> To unsubscribe from this list: send the line "unsubscribe linux-iio"
>>>> in
>>>>> the body of a message to majordomo@vger.kernel.org
>>>>> More majordomo info at http://vger.kernel.org/majordomo-info.html
>>>>>
>>>
>>
>
>
>
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
[toc] | [prev] | [next] | [standalone]
| From | Vaishali Thakkar <vthakkar1994@gmail.com> |
|---|---|
| Date | 2015-09-28 03:20 +0200 |
| Message-ID | <qdvgK-7rU-9@gated-at.bofh.it> |
| In reply to | #1233664 |
On Sun, Sep 27, 2015 at 7:01 PM, Jonathan Cameron <jic23@kernel.org> wrote:
> On 27/09/15 05:16, Vaishali Thakkar wrote:
>> On Mon, Sep 21, 2015 at 4:48 PM, Karol Wrona <k.wrona@samsung.com> wrote:
>>> On 09/21/2015 11:53 AM, Jonathan Cameron wrote:
>>>>
>>>>
>>>> On 21 September 2015 09:18:39 BST, Karol Wrona <k.wrona@samsung.com> wrote:
>>>>> On 09/20/2015 09:18 PM, Jonathan Cameron wrote:
>>>>>> On 14/09/15 17:08, Vaishali Thakkar wrote:
>>>>>>> Use resourced managed function devm_iio_device_register to
>>>>>>> make error path simpler. To be compatible with the change,
>>>>>>> the remove function is removed as it is now redundant.
>>>>>>>
>>>>>>> Signed-off-by: Vaishali Thakkar <vthakkar1994@gmail.com>
>>>>>> This patch is reasonable, but makes me wonder if there is an issue
>>>>>> in the remove path for this driver. It relies on the ssp_sensors
>>>>> common
>>>>>> module. That in ssp_spi.c uses the fact ssp_register_consumer
>>>>>> has saved the struct iio_dev into a local array in the core driver.
>>>>>> I think this means that a remove of this function will leave a
>>>>> possible
>>>>>> null pointer de reference.
>>>>> You are right. In this case we need something like
>>>>> ssp_deregister_consumer(...) in ssp_dev.c. So I think that "remove
>>>>> func"
>>>>> should stay. Of course we can switch to devm iio register.
>>>> Not if you want to remove the userspace interface before doing you new function call. Doing so gives a nasty race.
>>> So better leave it out:
>>> iio_device_unregister(indio_dev) will disable the buffers and through
>>> ops disables the sensor and than remove iio dev ptr from the internal table.
>>>
>>
>> Sorry for the late reply. Yes, I guess I missed the point that
>> 'ssp_register_consumer' is
>> used in probe function. And I believe that devm_iio_register is useful
>> only when we
>> can convert all other functions to their devm counterparts and remove
>> function will go
>> away.
> Yes. Exactly.
>>
>> But then why don't we need ssp_deregister_consumer here in the remove function?
>> Is it automatically handled by iio_device_unregister? I guess Karol
>> tried to explain
>> the same thing but I am still confused. Same case applies for
>> ssp_sensors/ssp_dev.c.
> We do indeed need an ssp_deregister_consumer function to be called in the remove.
> I don't think one currently exists, so that needs fixing.
Ok. Then I'll send patches for both of these files.
>>>>>
>>>>> Also the same can (rather should) be done for accelerometer sensor
>>>>> (ssp_accel_sensor.c).
>>>>>
>>>>> Vaishali, if you want please feel free and send patch.
>>>>>
>>>>>>
>>>>>> Now I suspect that case doesn't actually occur because the relevant
>>>>>> device elements are disabled whenever this module is removed. Having
>>>>>> said that we might expect an ssp_unregister_consumer function that
>>>>>> sets the relevant pointer back to null on removal so as to avoid
>>>>>> any possible race conditions around driver removal / reprobing.
>>>>>> A spot of defensive programming rather than necessarily a bug to be
>>>>>> fixed!
>>>>>>
>>>>>> One little process thing. This driver was written by Karol so patches
>>>>>> should probably always cc Karol as well as the more general
>>>>>> maintainer / reviewers for IIO. Added cc.
>>>>>>
>>>>>> Jonathan
>>>>>>> ---
>>>>>>> drivers/iio/gyro/ssp_gyro_sensor.c | 12 +-----------
>>>>>>> 1 file changed, 1 insertion(+), 11 deletions(-)
>>>>>>>
>>>>>>> diff --git a/drivers/iio/gyro/ssp_gyro_sensor.c
>>>>> b/drivers/iio/gyro/ssp_gyro_sensor.c
>>>>>>> index 0a8afdd..ac88de7 100644
>>>>>>> --- a/drivers/iio/gyro/ssp_gyro_sensor.c
>>>>>>> +++ b/drivers/iio/gyro/ssp_gyro_sensor.c
>>>>>>> @@ -134,7 +134,7 @@ static int ssp_gyro_probe(struct platform_device
>>>>> *pdev)
>>>>>>>
>>>>>>> platform_set_drvdata(pdev, indio_dev);
>>>>>>>
>>>>>>> - ret = iio_device_register(indio_dev);
>>>>>>> + ret = devm_iio_device_register(&pdev->dev, indio_dev);
>>>>>>> if (ret < 0)
>>>>>>> return ret;
>>>>>>>
>>>>>>> @@ -144,21 +144,11 @@ static int ssp_gyro_probe(struct
>>>>> platform_device *pdev)
>>>>>>> return 0;
>>>>>>> }
>>>>>>>
>>>>>>> -static int ssp_gyro_remove(struct platform_device *pdev)
>>>>>>> -{
>>>>>>> - struct iio_dev *indio_dev = platform_get_drvdata(pdev);
>>>>>>> -
>>>>>>> - iio_device_unregister(indio_dev);
>>>>>>> -
>>>>>>> - return 0;
>>>>>>> -}
>>>>>>> -
>>>>>>> static struct platform_driver ssp_gyro_driver = {
>>>>>>> .driver = {
>>>>>>> .name = SSP_GYROSCOPE_NAME,
>>>>>>> },
>>>>>>> .probe = ssp_gyro_probe,
>>>>>>> - .remove = ssp_gyro_remove,
>>>>>>> };
>>>>>>>
>>>>>>> module_platform_driver(ssp_gyro_driver);
>>>>>>>
>>>>>>
>>>>>> --
>>>>>> To unsubscribe from this list: send the line "unsubscribe linux-iio"
>>>>> in
>>>>>> the body of a message to majordomo@vger.kernel.org
>>>>>> More majordomo info at http://vger.kernel.org/majordomo-info.html
>>>>>>
>>>>
>>>
>>
>>
>>
>
--
Vaishali
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
[toc] | [prev] | [next] | [standalone]
| From | Vaishali Thakkar <vthakkar1994@gmail.com> |
|---|---|
| Date | 2015-09-28 12:10 +0200 |
| Message-ID | <qdDxE-2zm-7@gated-at.bofh.it> |
| In reply to | #1233809 |
On Mon, Sep 28, 2015 at 6:42 AM, Vaishali Thakkar
<vthakkar1994@gmail.com> wrote:
> On Sun, Sep 27, 2015 at 7:01 PM, Jonathan Cameron <jic23@kernel.org> wrote:
>> On 27/09/15 05:16, Vaishali Thakkar wrote:
>>> On Mon, Sep 21, 2015 at 4:48 PM, Karol Wrona <k.wrona@samsung.com> wrote:
>>>> On 09/21/2015 11:53 AM, Jonathan Cameron wrote:
>>>>>
>>>>>
>>>>> On 21 September 2015 09:18:39 BST, Karol Wrona <k.wrona@samsung.com> wrote:
>>>>>> On 09/20/2015 09:18 PM, Jonathan Cameron wrote:
>>>>>>> On 14/09/15 17:08, Vaishali Thakkar wrote:
>>>>>>>> Use resourced managed function devm_iio_device_register to
>>>>>>>> make error path simpler. To be compatible with the change,
>>>>>>>> the remove function is removed as it is now redundant.
>>>>>>>>
>>>>>>>> Signed-off-by: Vaishali Thakkar <vthakkar1994@gmail.com>
>>>>>>> This patch is reasonable, but makes me wonder if there is an issue
>>>>>>> in the remove path for this driver. It relies on the ssp_sensors
>>>>>> common
>>>>>>> module. That in ssp_spi.c uses the fact ssp_register_consumer
>>>>>>> has saved the struct iio_dev into a local array in the core driver.
>>>>>>> I think this means that a remove of this function will leave a
>>>>>> possible
>>>>>>> null pointer de reference.
>>>>>> You are right. In this case we need something like
>>>>>> ssp_deregister_consumer(...) in ssp_dev.c. So I think that "remove
>>>>>> func"
>>>>>> should stay. Of course we can switch to devm iio register.
>>>>> Not if you want to remove the userspace interface before doing you new function call. Doing so gives a nasty race.
>>>> So better leave it out:
>>>> iio_device_unregister(indio_dev) will disable the buffers and through
>>>> ops disables the sensor and than remove iio dev ptr from the internal table.
>>>>
>>>
>>> Sorry for the late reply. Yes, I guess I missed the point that
>>> 'ssp_register_consumer' is
>>> used in probe function. And I believe that devm_iio_register is useful
>>> only when we
>>> can convert all other functions to their devm counterparts and remove
>>> function will go
>>> away.
>> Yes. Exactly.
>>>
>>> But then why don't we need ssp_deregister_consumer here in the remove function?
>>> Is it automatically handled by iio_device_unregister? I guess Karol
>>> tried to explain
>>> the same thing but I am still confused. Same case applies for
>>> ssp_sensors/ssp_dev.c.
>> We do indeed need an ssp_deregister_consumer function to be called in the remove.
>> I don't think one currently exists, so that needs fixing.
>
> Ok. Then I'll send patches for both of these files.
Sorry, probably I was not clear enough in my last mail. I mean I'll
send patches patches
once we will have something like 'ssp_deregister_consumer'. But is
there anyone who
is working on this? Is it possible to introduce devm counterpart of the same?
How much will it be useful [taking note that there are only 3-4 files
which are using it]?
>>>>>>
>>>>>> Also the same can (rather should) be done for accelerometer sensor
>>>>>> (ssp_accel_sensor.c).
>>>>>>
>>>>>> Vaishali, if you want please feel free and send patch.
>>>>>>
>>>>>>>
>>>>>>> Now I suspect that case doesn't actually occur because the relevant
>>>>>>> device elements are disabled whenever this module is removed. Having
>>>>>>> said that we might expect an ssp_unregister_consumer function that
>>>>>>> sets the relevant pointer back to null on removal so as to avoid
>>>>>>> any possible race conditions around driver removal / reprobing.
>>>>>>> A spot of defensive programming rather than necessarily a bug to be
>>>>>>> fixed!
>>>>>>>
>>>>>>> One little process thing. This driver was written by Karol so patches
>>>>>>> should probably always cc Karol as well as the more general
>>>>>>> maintainer / reviewers for IIO. Added cc.
>>>>>>>
>>>>>>> Jonathan
>>>>>>>> ---
>>>>>>>> drivers/iio/gyro/ssp_gyro_sensor.c | 12 +-----------
>>>>>>>> 1 file changed, 1 insertion(+), 11 deletions(-)
>>>>>>>>
>>>>>>>> diff --git a/drivers/iio/gyro/ssp_gyro_sensor.c
>>>>>> b/drivers/iio/gyro/ssp_gyro_sensor.c
>>>>>>>> index 0a8afdd..ac88de7 100644
>>>>>>>> --- a/drivers/iio/gyro/ssp_gyro_sensor.c
>>>>>>>> +++ b/drivers/iio/gyro/ssp_gyro_sensor.c
>>>>>>>> @@ -134,7 +134,7 @@ static int ssp_gyro_probe(struct platform_device
>>>>>> *pdev)
>>>>>>>>
>>>>>>>> platform_set_drvdata(pdev, indio_dev);
>>>>>>>>
>>>>>>>> - ret = iio_device_register(indio_dev);
>>>>>>>> + ret = devm_iio_device_register(&pdev->dev, indio_dev);
>>>>>>>> if (ret < 0)
>>>>>>>> return ret;
>>>>>>>>
>>>>>>>> @@ -144,21 +144,11 @@ static int ssp_gyro_probe(struct
>>>>>> platform_device *pdev)
>>>>>>>> return 0;
>>>>>>>> }
>>>>>>>>
>>>>>>>> -static int ssp_gyro_remove(struct platform_device *pdev)
>>>>>>>> -{
>>>>>>>> - struct iio_dev *indio_dev = platform_get_drvdata(pdev);
>>>>>>>> -
>>>>>>>> - iio_device_unregister(indio_dev);
>>>>>>>> -
>>>>>>>> - return 0;
>>>>>>>> -}
>>>>>>>> -
>>>>>>>> static struct platform_driver ssp_gyro_driver = {
>>>>>>>> .driver = {
>>>>>>>> .name = SSP_GYROSCOPE_NAME,
>>>>>>>> },
>>>>>>>> .probe = ssp_gyro_probe,
>>>>>>>> - .remove = ssp_gyro_remove,
>>>>>>>> };
>>>>>>>>
>>>>>>>> module_platform_driver(ssp_gyro_driver);
>>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>> To unsubscribe from this list: send the line "unsubscribe linux-iio"
>>>>>> in
>>>>>>> the body of a message to majordomo@vger.kernel.org
>>>>>>> More majordomo info at http://vger.kernel.org/majordomo-info.html
>>>>>>>
>>>>>
>>>>
>>>
>>>
>>>
>>
>
>
>
> --
> Vaishali
--
Vaishali
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
[toc] | [prev] | [next] | [standalone]
| From | Karol Wrona <k.wrona@samsung.com> |
|---|---|
| Date | 2015-09-29 12:30 +0200 |
| Message-ID | <qe0ky-3Hh-23@gated-at.bofh.it> |
| In reply to | #1234002 |
On 09/28/2015 12:08 PM, Vaishali Thakkar wrote:
> On Mon, Sep 28, 2015 at 6:42 AM, Vaishali Thakkar
> <vthakkar1994@gmail.com> wrote:
>> On Sun, Sep 27, 2015 at 7:01 PM, Jonathan Cameron <jic23@kernel.org> wrote:
>>> On 27/09/15 05:16, Vaishali Thakkar wrote:
>>>> On Mon, Sep 21, 2015 at 4:48 PM, Karol Wrona <k.wrona@samsung.com> wrote:
>>>>> On 09/21/2015 11:53 AM, Jonathan Cameron wrote:
>>>>>>
>>>>>>
>>>>>> On 21 September 2015 09:18:39 BST, Karol Wrona <k.wrona@samsung.com> wrote:
>>>>>>> On 09/20/2015 09:18 PM, Jonathan Cameron wrote:
>>>>>>>> On 14/09/15 17:08, Vaishali Thakkar wrote:
>>>>>>>>> Use resourced managed function devm_iio_device_register to
>>>>>>>>> make error path simpler. To be compatible with the change,
>>>>>>>>> the remove function is removed as it is now redundant.
>>>>>>>>>
>>>>>>>>> Signed-off-by: Vaishali Thakkar <vthakkar1994@gmail.com>
>>>>>>>> This patch is reasonable, but makes me wonder if there is an issue
>>>>>>>> in the remove path for this driver. It relies on the ssp_sensors
>>>>>>> common
>>>>>>>> module. That in ssp_spi.c uses the fact ssp_register_consumer
>>>>>>>> has saved the struct iio_dev into a local array in the core driver.
>>>>>>>> I think this means that a remove of this function will leave a
>>>>>>> possible
>>>>>>>> null pointer de reference.
>>>>>>> You are right. In this case we need something like
>>>>>>> ssp_deregister_consumer(...) in ssp_dev.c. So I think that "remove
>>>>>>> func"
>>>>>>> should stay. Of course we can switch to devm iio register.
>>>>>> Not if you want to remove the userspace interface before doing you new function call. Doing so gives a nasty race.
>>>>> So better leave it out:
>>>>> iio_device_unregister(indio_dev) will disable the buffers and through
>>>>> ops disables the sensor and than remove iio dev ptr from the internal table.
>>>>>
>>>>
>>>> Sorry for the late reply. Yes, I guess I missed the point that
>>>> 'ssp_register_consumer' is
>>>> used in probe function. And I believe that devm_iio_register is useful
>>>> only when we
>>>> can convert all other functions to their devm counterparts and remove
>>>> function will go
>>>> away.
>>> Yes. Exactly.
>>>>
>>>> But then why don't we need ssp_deregister_consumer here in the remove function?
>>>> Is it automatically handled by iio_device_unregister? I guess Karol
>>>> tried to explain
>>>> the same thing but I am still confused. Same case applies for
>>>> ssp_sensors/ssp_dev.c.
>>> We do indeed need an ssp_deregister_consumer function to be called in the remove.
>>> I don't think one currently exists, so that needs fixing.
>>
>> Ok. Then I'll send patches for both of these files.
>
> Sorry, probably I was not clear enough in my last mail. I mean I'll
> send patches patches
> once we will have something like 'ssp_deregister_consumer'. But is
> there anyone who
> is working on this? Is it possible to introduce devm counterpart of the same?
If you want you can simply add ssp_deregister_consumer (to ssp_dev.c)
function and use it in the remove (in ssp sensor platform driver). I
will test it.
We can use devm_iio_device_register for iio dev itself but better check
what is called first - driver remove callback or the devm removes.
If we deregister internally the iio device from ssp we should be quite safe.
> How much will it be useful [taking note that there are only 3-4 files
> which are using it]?
>
>>>>>>>
>>>>>>> Also the same can (rather should) be done for accelerometer sensor
>>>>>>> (ssp_accel_sensor.c).
>>>>>>>
>>>>>>> Vaishali, if you want please feel free and send patch.
>>>>>>>
>>>>>>>>
>>>>>>>> Now I suspect that case doesn't actually occur because the relevant
>>>>>>>> device elements are disabled whenever this module is removed. Having
>>>>>>>> said that we might expect an ssp_unregister_consumer function that
>>>>>>>> sets the relevant pointer back to null on removal so as to avoid
>>>>>>>> any possible race conditions around driver removal / reprobing.
>>>>>>>> A spot of defensive programming rather than necessarily a bug to be
>>>>>>>> fixed!
>>>>>>>>
>>>>>>>> One little process thing. This driver was written by Karol so patches
>>>>>>>> should probably always cc Karol as well as the more general
>>>>>>>> maintainer / reviewers for IIO. Added cc.
>>>>>>>>
>>>>>>>> Jonathan
>>>>>>>>> ---
>>>>>>>>> drivers/iio/gyro/ssp_gyro_sensor.c | 12 +-----------
>>>>>>>>> 1 file changed, 1 insertion(+), 11 deletions(-)
>>>>>>>>>
>>>>>>>>> diff --git a/drivers/iio/gyro/ssp_gyro_sensor.c
>>>>>>> b/drivers/iio/gyro/ssp_gyro_sensor.c
>>>>>>>>> index 0a8afdd..ac88de7 100644
>>>>>>>>> --- a/drivers/iio/gyro/ssp_gyro_sensor.c
>>>>>>>>> +++ b/drivers/iio/gyro/ssp_gyro_sensor.c
>>>>>>>>> @@ -134,7 +134,7 @@ static int ssp_gyro_probe(struct platform_device
>>>>>>> *pdev)
>>>>>>>>>
>>>>>>>>> platform_set_drvdata(pdev, indio_dev);
>>>>>>>>>
>>>>>>>>> - ret = iio_device_register(indio_dev);
>>>>>>>>> + ret = devm_iio_device_register(&pdev->dev, indio_dev);
>>>>>>>>> if (ret < 0)
>>>>>>>>> return ret;
>>>>>>>>>
>>>>>>>>> @@ -144,21 +144,11 @@ static int ssp_gyro_probe(struct
>>>>>>> platform_device *pdev)
>>>>>>>>> return 0;
>>>>>>>>> }
>>>>>>>>>
>>>>>>>>> -static int ssp_gyro_remove(struct platform_device *pdev)
>>>>>>>>> -{
>>>>>>>>> - struct iio_dev *indio_dev = platform_get_drvdata(pdev);
>>>>>>>>> -
>>>>>>>>> - iio_device_unregister(indio_dev);
>>>>>>>>> -
>>>>>>>>> - return 0;
>>>>>>>>> -}
>>>>>>>>> -
>>>>>>>>> static struct platform_driver ssp_gyro_driver = {
>>>>>>>>> .driver = {
>>>>>>>>> .name = SSP_GYROSCOPE_NAME,
>>>>>>>>> },
>>>>>>>>> .probe = ssp_gyro_probe,
>>>>>>>>> - .remove = ssp_gyro_remove,
>>>>>>>>> };
>>>>>>>>>
>>>>>>>>> module_platform_driver(ssp_gyro_driver);
>>>>>>>>>
>>>>>>>>
>>>>>>>> --
>>>>>>>> To unsubscribe from this list: send the line "unsubscribe linux-iio"
>>>>>>> in
>>>>>>>> the body of a message to majordomo@vger.kernel.org
>>>>>>>> More majordomo info at http://vger.kernel.org/majordomo-info.html
>>>>>>>>
>>>>>>
>>>>>
>>>>
>>>>
>>>>
>>>
>>
>>
>>
>> --
>> Vaishali
>
>
>
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
[toc] | [prev] | [standalone]
Back to top | Article view | linux.kernel
csiph-web