linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2 1/2] driver core: clear deferred probe reason on probe retry
@ 2021-03-19 11:04 ` Ahmad Fatoum
  2021-03-19 11:04   ` [PATCH v2 2/2] driver core: add helper for deferred probe reason setting Ahmad Fatoum
  2021-03-22  8:18   ` [PATCH v2 1/2] driver core: clear deferred probe reason on probe retry Andrzej Hajda
  0 siblings, 2 replies; 11+ messages in thread
From: Ahmad Fatoum @ 2021-03-19 11:04 UTC (permalink / raw)
  To: Greg Kroah-Hartman, Rafael J. Wysocki, Javier Martinez Canillas,
	Andrzej Hajda, Mark Brown
  Cc: kernel, andy.shevchenko, stable, Ahmad Fatoum, linux-kernel

When retrying a deferred probe, any old defer reason string should be
discarded. Otherwise, if the probe is deferred again at a different spot,
but without setting a message, the now incorrect probe reason will remain.

This was observed with the i.MX I2C driver, which ultimately failed
to probe due to lack of the GPIO driver. The probe defer for GPIO
doesn't record a message, but a previous probe defer to clock_get did.
This had the effect that /sys/kernel/debug/devices_deferred listed
a misleading probe deferral reason.

Cc: stable@kernel.org
Fixes: d090b70ede02 ("driver core: add deferring probe reason to devices_deferred property")
Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>
Signed-off-by: Ahmad Fatoum <a.fatoum@pengutronix.de>
---
v1 -> v2:
 - reworded commit message (Andy)
 - collected Andy's Reviewed-by
---
 drivers/base/dd.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/drivers/base/dd.c b/drivers/base/dd.c
index 9179825ff646..e2cf3b29123e 100644
--- a/drivers/base/dd.c
+++ b/drivers/base/dd.c
@@ -97,6 +97,9 @@ static void deferred_probe_work_func(struct work_struct *work)
 
 		get_device(dev);
 
+		kfree(dev->p->deferred_probe_reason);
+		dev->p->deferred_probe_reason = NULL;
+
 		/*
 		 * Drop the mutex while probing each device; the probe path may
 		 * manipulate the deferred list
-- 
2.29.2


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH v2 2/2] driver core: add helper for deferred probe reason setting
  2021-03-19 11:04 ` [PATCH v2 1/2] driver core: clear deferred probe reason on probe retry Ahmad Fatoum
@ 2021-03-19 11:04   ` Ahmad Fatoum
  2021-03-19 11:13     ` Andy Shevchenko
                       ` (2 more replies)
  2021-03-22  8:18   ` [PATCH v2 1/2] driver core: clear deferred probe reason on probe retry Andrzej Hajda
  1 sibling, 3 replies; 11+ messages in thread
From: Ahmad Fatoum @ 2021-03-19 11:04 UTC (permalink / raw)
  To: Greg Kroah-Hartman, Rafael J. Wysocki
  Cc: kernel, andy.shevchenko, Ahmad Fatoum, linux-kernel

We now have three places within the same file doing the same operation
of freeing this pointer and setting it anew. A helper make this
arguably easier to read, so add one.

Signed-off-by: Ahmad Fatoum <a.fatoum@pengutronix.de>
---
v1 -> v2:
 - no change
---
 drivers/base/dd.c | 17 +++++++++++------
 1 file changed, 11 insertions(+), 6 deletions(-)

diff --git a/drivers/base/dd.c b/drivers/base/dd.c
index e2cf3b29123e..4201baa1cc13 100644
--- a/drivers/base/dd.c
+++ b/drivers/base/dd.c
@@ -69,6 +69,12 @@ static char async_probe_drv_names[ASYNC_DRV_NAMES_MAX_LEN];
  */
 static bool defer_all_probes;
 
+static void __device_set_deferred_probe_reason(const struct device *dev, char *reason)
+{
+	kfree(dev->p->deferred_probe_reason);
+	dev->p->deferred_probe_reason = reason;
+}
+
 /*
  * deferred_probe_work_func() - Retry probing devices in the active list.
  */
@@ -97,8 +103,7 @@ static void deferred_probe_work_func(struct work_struct *work)
 
 		get_device(dev);
 
-		kfree(dev->p->deferred_probe_reason);
-		dev->p->deferred_probe_reason = NULL;
+		__device_set_deferred_probe_reason(dev, NULL);
 
 		/*
 		 * Drop the mutex while probing each device; the probe path may
@@ -140,8 +145,7 @@ void driver_deferred_probe_del(struct device *dev)
 	if (!list_empty(&dev->p->deferred_probe)) {
 		dev_dbg(dev, "Removed from deferred list\n");
 		list_del_init(&dev->p->deferred_probe);
-		kfree(dev->p->deferred_probe_reason);
-		dev->p->deferred_probe_reason = NULL;
+		__device_set_deferred_probe_reason(dev, NULL);
 	}
 	mutex_unlock(&deferred_probe_mutex);
 }
@@ -220,11 +224,12 @@ void device_unblock_probing(void)
 void device_set_deferred_probe_reason(const struct device *dev, struct va_format *vaf)
 {
 	const char *drv = dev_driver_string(dev);
+	char *reason;
 
 	mutex_lock(&deferred_probe_mutex);
 
-	kfree(dev->p->deferred_probe_reason);
-	dev->p->deferred_probe_reason = kasprintf(GFP_KERNEL, "%s: %pV", drv, vaf);
+	reason = kasprintf(GFP_KERNEL, "%s: %pV", drv, vaf);
+	__device_set_deferred_probe_reason(dev, reason);
 
 	mutex_unlock(&deferred_probe_mutex);
 }
-- 
2.29.2


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* Re: [PATCH v2 2/2] driver core: add helper for deferred probe reason setting
  2021-03-19 11:04   ` [PATCH v2 2/2] driver core: add helper for deferred probe reason setting Ahmad Fatoum
@ 2021-03-19 11:13     ` Andy Shevchenko
  2021-03-19 11:46       ` Ahmad Fatoum
  2021-03-19 11:15     ` Andy Shevchenko
  2021-03-23 14:07     ` Greg Kroah-Hartman
  2 siblings, 1 reply; 11+ messages in thread
From: Andy Shevchenko @ 2021-03-19 11:13 UTC (permalink / raw)
  To: Ahmad Fatoum
  Cc: Greg Kroah-Hartman, Rafael J. Wysocki, Sascha Hauer,
	Linux Kernel Mailing List

On Fri, Mar 19, 2021 at 1:05 PM Ahmad Fatoum <a.fatoum@pengutronix.de> wrote:
>
> We now have three places within the same file doing the same operation
> of freeing this pointer and setting it anew. A helper make this

makes

> arguably easier to read, so add one.

FWIW,
Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>

Now I'm wondering why deferred_probe_reason is not defined with const.

Can you check and maybe squeeze a patch in the middle (before these
two of this series) to move to const?

> Signed-off-by: Ahmad Fatoum <a.fatoum@pengutronix.de>
> ---
> v1 -> v2:
>  - no change
> ---
>  drivers/base/dd.c | 17 +++++++++++------
>  1 file changed, 11 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/base/dd.c b/drivers/base/dd.c
> index e2cf3b29123e..4201baa1cc13 100644
> --- a/drivers/base/dd.c
> +++ b/drivers/base/dd.c
> @@ -69,6 +69,12 @@ static char async_probe_drv_names[ASYNC_DRV_NAMES_MAX_LEN];
>   */
>  static bool defer_all_probes;
>
> +static void __device_set_deferred_probe_reason(const struct device *dev, char *reason)
> +{
> +       kfree(dev->p->deferred_probe_reason);
> +       dev->p->deferred_probe_reason = reason;
> +}
> +
>  /*
>   * deferred_probe_work_func() - Retry probing devices in the active list.
>   */
> @@ -97,8 +103,7 @@ static void deferred_probe_work_func(struct work_struct *work)
>
>                 get_device(dev);
>
> -               kfree(dev->p->deferred_probe_reason);
> -               dev->p->deferred_probe_reason = NULL;
> +               __device_set_deferred_probe_reason(dev, NULL);
>
>                 /*
>                  * Drop the mutex while probing each device; the probe path may
> @@ -140,8 +145,7 @@ void driver_deferred_probe_del(struct device *dev)
>         if (!list_empty(&dev->p->deferred_probe)) {
>                 dev_dbg(dev, "Removed from deferred list\n");
>                 list_del_init(&dev->p->deferred_probe);
> -               kfree(dev->p->deferred_probe_reason);
> -               dev->p->deferred_probe_reason = NULL;
> +               __device_set_deferred_probe_reason(dev, NULL);
>         }
>         mutex_unlock(&deferred_probe_mutex);
>  }
> @@ -220,11 +224,12 @@ void device_unblock_probing(void)
>  void device_set_deferred_probe_reason(const struct device *dev, struct va_format *vaf)
>  {
>         const char *drv = dev_driver_string(dev);
> +       char *reason;
>
>         mutex_lock(&deferred_probe_mutex);
>
> -       kfree(dev->p->deferred_probe_reason);
> -       dev->p->deferred_probe_reason = kasprintf(GFP_KERNEL, "%s: %pV", drv, vaf);
> +       reason = kasprintf(GFP_KERNEL, "%s: %pV", drv, vaf);
> +       __device_set_deferred_probe_reason(dev, reason);
>
>         mutex_unlock(&deferred_probe_mutex);
>  }
> --
> 2.29.2
>


-- 
With Best Regards,
Andy Shevchenko

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH v2 2/2] driver core: add helper for deferred probe reason setting
  2021-03-19 11:04   ` [PATCH v2 2/2] driver core: add helper for deferred probe reason setting Ahmad Fatoum
  2021-03-19 11:13     ` Andy Shevchenko
@ 2021-03-19 11:15     ` Andy Shevchenko
  2021-03-19 11:47       ` Ahmad Fatoum
  2021-03-23 14:07     ` Greg Kroah-Hartman
  2 siblings, 1 reply; 11+ messages in thread
From: Andy Shevchenko @ 2021-03-19 11:15 UTC (permalink / raw)
  To: Ahmad Fatoum
  Cc: Greg Kroah-Hartman, Rafael J. Wysocki, Sascha Hauer,
	Linux Kernel Mailing List

On Fri, Mar 19, 2021 at 1:05 PM Ahmad Fatoum <a.fatoum@pengutronix.de> wrote:
>
> We now have three places within the same file doing the same operation
> of freeing this pointer and setting it anew. A helper make this
> arguably easier to read, so add one.

> Signed-off-by: Ahmad Fatoum <a.fatoum@pengutronix.de>

One thing: Suggested-by?

-- 
With Best Regards,
Andy Shevchenko

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH v2 2/2] driver core: add helper for deferred probe reason setting
  2021-03-19 11:13     ` Andy Shevchenko
@ 2021-03-19 11:46       ` Ahmad Fatoum
  2021-03-19 12:16         ` Andy Shevchenko
  0 siblings, 1 reply; 11+ messages in thread
From: Ahmad Fatoum @ 2021-03-19 11:46 UTC (permalink / raw)
  To: Andy Shevchenko
  Cc: Greg Kroah-Hartman, Rafael J. Wysocki, Sascha Hauer,
	Linux Kernel Mailing List

On 19.03.21 12:13, Andy Shevchenko wrote:
> On Fri, Mar 19, 2021 at 1:05 PM Ahmad Fatoum <a.fatoum@pengutronix.de> wrote:
>>
>> We now have three places within the same file doing the same operation
>> of freeing this pointer and setting it anew. A helper make this
> 
> makes
> 
>> arguably easier to read, so add one.
> 
> FWIW,
> Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>

Thanks will add for v3.

> Now I'm wondering why deferred_probe_reason is not defined with const.
> 
> Can you check and maybe squeeze a patch in the middle (before these
> two of this series) to move to const?

The deferred_probe_reason is only used in this file and it either holds
NULL or a pointer to a dynamically allocated string. I don't see a reason
why the member should be const.

Cheers,
Ahmad

>> Signed-off-by: Ahmad Fatoum <a.fatoum@pengutronix.de>
>> ---
>> v1 -> v2:
>>  - no change
>> ---
>>  drivers/base/dd.c | 17 +++++++++++------
>>  1 file changed, 11 insertions(+), 6 deletions(-)
>>
>> diff --git a/drivers/base/dd.c b/drivers/base/dd.c
>> index e2cf3b29123e..4201baa1cc13 100644
>> --- a/drivers/base/dd.c
>> +++ b/drivers/base/dd.c
>> @@ -69,6 +69,12 @@ static char async_probe_drv_names[ASYNC_DRV_NAMES_MAX_LEN];
>>   */
>>  static bool defer_all_probes;
>>
>> +static void __device_set_deferred_probe_reason(const struct device *dev, char *reason)
>> +{
>> +       kfree(dev->p->deferred_probe_reason);
>> +       dev->p->deferred_probe_reason = reason;
>> +}
>> +
>>  /*
>>   * deferred_probe_work_func() - Retry probing devices in the active list.
>>   */
>> @@ -97,8 +103,7 @@ static void deferred_probe_work_func(struct work_struct *work)
>>
>>                 get_device(dev);
>>
>> -               kfree(dev->p->deferred_probe_reason);
>> -               dev->p->deferred_probe_reason = NULL;
>> +               __device_set_deferred_probe_reason(dev, NULL);
>>
>>                 /*
>>                  * Drop the mutex while probing each device; the probe path may
>> @@ -140,8 +145,7 @@ void driver_deferred_probe_del(struct device *dev)
>>         if (!list_empty(&dev->p->deferred_probe)) {
>>                 dev_dbg(dev, "Removed from deferred list\n");
>>                 list_del_init(&dev->p->deferred_probe);
>> -               kfree(dev->p->deferred_probe_reason);
>> -               dev->p->deferred_probe_reason = NULL;
>> +               __device_set_deferred_probe_reason(dev, NULL);
>>         }
>>         mutex_unlock(&deferred_probe_mutex);
>>  }
>> @@ -220,11 +224,12 @@ void device_unblock_probing(void)
>>  void device_set_deferred_probe_reason(const struct device *dev, struct va_format *vaf)
>>  {
>>         const char *drv = dev_driver_string(dev);
>> +       char *reason;
>>
>>         mutex_lock(&deferred_probe_mutex);
>>
>> -       kfree(dev->p->deferred_probe_reason);
>> -       dev->p->deferred_probe_reason = kasprintf(GFP_KERNEL, "%s: %pV", drv, vaf);
>> +       reason = kasprintf(GFP_KERNEL, "%s: %pV", drv, vaf);
>> +       __device_set_deferred_probe_reason(dev, reason);
>>
>>         mutex_unlock(&deferred_probe_mutex);
>>  }
>> --
>> 2.29.2
>>
> 
> 

-- 
Pengutronix e.K.                           |                             |
Steuerwalder Str. 21                       | http://www.pengutronix.de/  |
31137 Hildesheim, Germany                  | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH v2 2/2] driver core: add helper for deferred probe reason setting
  2021-03-19 11:15     ` Andy Shevchenko
@ 2021-03-19 11:47       ` Ahmad Fatoum
  0 siblings, 0 replies; 11+ messages in thread
From: Ahmad Fatoum @ 2021-03-19 11:47 UTC (permalink / raw)
  To: Andy Shevchenko
  Cc: Greg Kroah-Hartman, Rafael J. Wysocki, Sascha Hauer,
	Linux Kernel Mailing List

Hi,

On 19.03.21 12:15, Andy Shevchenko wrote:
> On Fri, Mar 19, 2021 at 1:05 PM Ahmad Fatoum <a.fatoum@pengutronix.de> wrote:
>>
>> We now have three places within the same file doing the same operation
>> of freeing this pointer and setting it anew. A helper make this
>> arguably easier to read, so add one.
> 
>> Signed-off-by: Ahmad Fatoum <a.fatoum@pengutronix.de>
> 
> One thing: Suggested-by?

I suggested it to myself while drafting the first patch.

Cheers,
Ahmad

> 

-- 
Pengutronix e.K.                           |                             |
Steuerwalder Str. 21                       | http://www.pengutronix.de/  |
31137 Hildesheim, Germany                  | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH v2 2/2] driver core: add helper for deferred probe reason setting
  2021-03-19 11:46       ` Ahmad Fatoum
@ 2021-03-19 12:16         ` Andy Shevchenko
  2021-03-19 16:08           ` Ahmad Fatoum
  0 siblings, 1 reply; 11+ messages in thread
From: Andy Shevchenko @ 2021-03-19 12:16 UTC (permalink / raw)
  To: Ahmad Fatoum
  Cc: Greg Kroah-Hartman, Rafael J. Wysocki, Sascha Hauer,
	Linux Kernel Mailing List

On Fri, Mar 19, 2021 at 1:46 PM Ahmad Fatoum <a.fatoum@pengutronix.de> wrote:
> On 19.03.21 12:13, Andy Shevchenko wrote:
> > On Fri, Mar 19, 2021 at 1:05 PM Ahmad Fatoum <a.fatoum@pengutronix.de> wrote:
> >>
> >> We now have three places within the same file doing the same operation
> >> of freeing this pointer and setting it anew. A helper make this
> >
> > makes
> >
> >> arguably easier to read, so add one.
> >
> > FWIW,
> > Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>
>
> Thanks will add for v3.
>
> > Now I'm wondering why deferred_probe_reason is not defined with const.
> >
> > Can you check and maybe squeeze a patch in the middle (before these
> > two of this series) to move to const?
>
> The deferred_probe_reason is only used in this file and it either holds
> NULL or a pointer to a dynamically allocated string. I don't see a reason
> why the member should be const.

But we want to be reliant on the contents of the string, right?
I would put this why it shouldn't be const.

As far as I understand the strictness here is for good.

--
With Best Regards,
Andy Shevchenko

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH v2 2/2] driver core: add helper for deferred probe reason setting
  2021-03-19 12:16         ` Andy Shevchenko
@ 2021-03-19 16:08           ` Ahmad Fatoum
  0 siblings, 0 replies; 11+ messages in thread
From: Ahmad Fatoum @ 2021-03-19 16:08 UTC (permalink / raw)
  To: Andy Shevchenko
  Cc: Greg Kroah-Hartman, Rafael J. Wysocki, Sascha Hauer,
	Linux Kernel Mailing List

Hello Andy,

On 19.03.21 13:16, Andy Shevchenko wrote:
> On Fri, Mar 19, 2021 at 1:46 PM Ahmad Fatoum <a.fatoum@pengutronix.de> wrote:
>> On 19.03.21 12:13, Andy Shevchenko wrote:
>>> On Fri, Mar 19, 2021 at 1:05 PM Ahmad Fatoum <a.fatoum@pengutronix.de> wrote:
>>>>
>>>> We now have three places within the same file doing the same operation
>>>> of freeing this pointer and setting it anew. A helper make this
>>>
>>> makes
>>>
>>>> arguably easier to read, so add one.
>>>
>>> FWIW,
>>> Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>
>>
>> Thanks will add for v3.
>>
>>> Now I'm wondering why deferred_probe_reason is not defined with const.
>>>
>>> Can you check and maybe squeeze a patch in the middle (before these
>>> two of this series) to move to const?
>>
>> The deferred_probe_reason is only used in this file and it either holds
>> NULL or a pointer to a dynamically allocated string. I don't see a reason
>> why the member should be const.
> 
> But we want to be reliant on the contents of the string, right?
> I would put this why it shouldn't be const.
> 
> As far as I understand the strictness here is for good.

I don't understand. Mind sending a patch that I can squash?

Cheers,
Ahmad

> 
> --
> With Best Regards,
> Andy Shevchenko
> 

-- 
Pengutronix e.K.                           |                             |
Steuerwalder Str. 21                       | http://www.pengutronix.de/  |
31137 Hildesheim, Germany                  | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH v2 1/2] driver core: clear deferred probe reason on probe retry
  2021-03-19 11:04 ` [PATCH v2 1/2] driver core: clear deferred probe reason on probe retry Ahmad Fatoum
  2021-03-19 11:04   ` [PATCH v2 2/2] driver core: add helper for deferred probe reason setting Ahmad Fatoum
@ 2021-03-22  8:18   ` Andrzej Hajda
  1 sibling, 0 replies; 11+ messages in thread
From: Andrzej Hajda @ 2021-03-22  8:18 UTC (permalink / raw)
  To: Ahmad Fatoum, Greg Kroah-Hartman, Rafael J. Wysocki,
	Javier Martinez Canillas, Mark Brown
  Cc: kernel, andy.shevchenko, stable, linux-kernel

Hi Ahmad,

W dniu 19.03.2021 o 12:04, Ahmad Fatoum pisze:
> When retrying a deferred probe, any old defer reason string should be
> discarded. Otherwise, if the probe is deferred again at a different spot,
> but without setting a message, the now incorrect probe reason will remain.
>
> This was observed with the i.MX I2C driver, which ultimately failed
> to probe due to lack of the GPIO driver. The probe defer for GPIO
> doesn't record a message, but a previous probe defer to clock_get did.
> This had the effect that /sys/kernel/debug/devices_deferred listed
> a misleading probe deferral reason.
>
> Cc: stable@kernel.org
> Fixes: d090b70ede02 ("driver core: add deferring probe reason to devices_deferred property")
> Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>
> Signed-off-by: Ahmad Fatoum <a.fatoum@pengutronix.de>


Reviewed-by: Andrzej Hajda <a.hajda@samsung.com>


Regards

Andrzej


> ---
> v1 -> v2:
>   - reworded commit message (Andy)
>   - collected Andy's Reviewed-by
> ---
>   drivers/base/dd.c | 3 +++
>   1 file changed, 3 insertions(+)
>
> diff --git a/drivers/base/dd.c b/drivers/base/dd.c
> index 9179825ff646..e2cf3b29123e 100644
> --- a/drivers/base/dd.c
> +++ b/drivers/base/dd.c
> @@ -97,6 +97,9 @@ static void deferred_probe_work_func(struct work_struct *work)
>   
>   		get_device(dev);
>   
> +		kfree(dev->p->deferred_probe_reason);
> +		dev->p->deferred_probe_reason = NULL;
> +
>   		/*
>   		 * Drop the mutex while probing each device; the probe path may
>   		 * manipulate the deferred list

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH v2 2/2] driver core: add helper for deferred probe reason setting
  2021-03-19 11:04   ` [PATCH v2 2/2] driver core: add helper for deferred probe reason setting Ahmad Fatoum
  2021-03-19 11:13     ` Andy Shevchenko
  2021-03-19 11:15     ` Andy Shevchenko
@ 2021-03-23 14:07     ` Greg Kroah-Hartman
  2021-03-23 15:27       ` Ahmad Fatoum
  2 siblings, 1 reply; 11+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-23 14:07 UTC (permalink / raw)
  To: Ahmad Fatoum; +Cc: Rafael J. Wysocki, kernel, andy.shevchenko, linux-kernel

On Fri, Mar 19, 2021 at 12:04:58PM +0100, Ahmad Fatoum wrote:
> We now have three places within the same file doing the same operation
> of freeing this pointer and setting it anew. A helper make this
> arguably easier to read, so add one.
> 
> Signed-off-by: Ahmad Fatoum <a.fatoum@pengutronix.de>
> ---
> v1 -> v2:
>  - no change
> ---
>  drivers/base/dd.c | 17 +++++++++++------
>  1 file changed, 11 insertions(+), 6 deletions(-)
> 
> diff --git a/drivers/base/dd.c b/drivers/base/dd.c
> index e2cf3b29123e..4201baa1cc13 100644
> --- a/drivers/base/dd.c
> +++ b/drivers/base/dd.c
> @@ -69,6 +69,12 @@ static char async_probe_drv_names[ASYNC_DRV_NAMES_MAX_LEN];
>   */
>  static bool defer_all_probes;
>  
> +static void __device_set_deferred_probe_reason(const struct device *dev, char *reason)
> +{
> +	kfree(dev->p->deferred_probe_reason);
> +	dev->p->deferred_probe_reason = reason;
> +}
> +
>  /*
>   * deferred_probe_work_func() - Retry probing devices in the active list.
>   */
> @@ -97,8 +103,7 @@ static void deferred_probe_work_func(struct work_struct *work)
>  
>  		get_device(dev);
>  
> -		kfree(dev->p->deferred_probe_reason);
> -		dev->p->deferred_probe_reason = NULL;
> +		__device_set_deferred_probe_reason(dev, NULL);
>  
>  		/*
>  		 * Drop the mutex while probing each device; the probe path may
> @@ -140,8 +145,7 @@ void driver_deferred_probe_del(struct device *dev)
>  	if (!list_empty(&dev->p->deferred_probe)) {
>  		dev_dbg(dev, "Removed from deferred list\n");
>  		list_del_init(&dev->p->deferred_probe);
> -		kfree(dev->p->deferred_probe_reason);
> -		dev->p->deferred_probe_reason = NULL;
> +		__device_set_deferred_probe_reason(dev, NULL);
>  	}
>  	mutex_unlock(&deferred_probe_mutex);
>  }
> @@ -220,11 +224,12 @@ void device_unblock_probing(void)
>  void device_set_deferred_probe_reason(const struct device *dev, struct va_format *vaf)
>  {
>  	const char *drv = dev_driver_string(dev);
> +	char *reason;
>  
>  	mutex_lock(&deferred_probe_mutex);
>  
> -	kfree(dev->p->deferred_probe_reason);
> -	dev->p->deferred_probe_reason = kasprintf(GFP_KERNEL, "%s: %pV", drv, vaf);
> +	reason = kasprintf(GFP_KERNEL, "%s: %pV", drv, vaf);

No error checking?

:(


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH v2 2/2] driver core: add helper for deferred probe reason setting
  2021-03-23 14:07     ` Greg Kroah-Hartman
@ 2021-03-23 15:27       ` Ahmad Fatoum
  0 siblings, 0 replies; 11+ messages in thread
From: Ahmad Fatoum @ 2021-03-23 15:27 UTC (permalink / raw)
  To: Greg Kroah-Hartman
  Cc: Rafael J. Wysocki, kernel, andy.shevchenko, linux-kernel

Hello,

On 23.03.21 15:07, Greg Kroah-Hartman wrote:
> On Fri, Mar 19, 2021 at 12:04:58PM +0100, Ahmad Fatoum wrote:
>> We now have three places within the same file doing the same operation
>> of freeing this pointer and setting it anew. A helper make this
>> arguably easier to read, so add one.
>>
>> Signed-off-by: Ahmad Fatoum <a.fatoum@pengutronix.de>
>> ---
>> v1 -> v2:
>>  - no change
>> ---
>>  drivers/base/dd.c | 17 +++++++++++------
>>  1 file changed, 11 insertions(+), 6 deletions(-)
>>
>> diff --git a/drivers/base/dd.c b/drivers/base/dd.c
>> index e2cf3b29123e..4201baa1cc13 100644
>> --- a/drivers/base/dd.c
>> +++ b/drivers/base/dd.c
>> @@ -69,6 +69,12 @@ static char async_probe_drv_names[ASYNC_DRV_NAMES_MAX_LEN];
>>   */
>>  static bool defer_all_probes;
>>  
>> +static void __device_set_deferred_probe_reason(const struct device *dev, char *reason)
>> +{
>> +	kfree(dev->p->deferred_probe_reason);
>> +	dev->p->deferred_probe_reason = reason;
>> +}
>> +
>>  /*
>>   * deferred_probe_work_func() - Retry probing devices in the active list.
>>   */
>> @@ -97,8 +103,7 @@ static void deferred_probe_work_func(struct work_struct *work)
>>  
>>  		get_device(dev);
>>  
>> -		kfree(dev->p->deferred_probe_reason);
>> -		dev->p->deferred_probe_reason = NULL;
>> +		__device_set_deferred_probe_reason(dev, NULL);
>>  
>>  		/*
>>  		 * Drop the mutex while probing each device; the probe path may
>> @@ -140,8 +145,7 @@ void driver_deferred_probe_del(struct device *dev)
>>  	if (!list_empty(&dev->p->deferred_probe)) {
>>  		dev_dbg(dev, "Removed from deferred list\n");
>>  		list_del_init(&dev->p->deferred_probe);
>> -		kfree(dev->p->deferred_probe_reason);
>> -		dev->p->deferred_probe_reason = NULL;
>> +		__device_set_deferred_probe_reason(dev, NULL);
>>  	}
>>  	mutex_unlock(&deferred_probe_mutex);
>>  }
>> @@ -220,11 +224,12 @@ void device_unblock_probing(void)
>>  void device_set_deferred_probe_reason(const struct device *dev, struct va_format *vaf)
>>  {
>>  	const char *drv = dev_driver_string(dev);
>> +	char *reason;
>>  
>>  	mutex_lock(&deferred_probe_mutex);
>>  
>> -	kfree(dev->p->deferred_probe_reason);
>> -	dev->p->deferred_probe_reason = kasprintf(GFP_KERNEL, "%s: %pV", drv, vaf);
>> +	reason = kasprintf(GFP_KERNEL, "%s: %pV", drv, vaf);
> 
> No error checking?

There wasn't any before and I think silent failure to set the defer reason
is completely adequate behavior.

Cheers,
Ahmad

> 
> :(
> 
> 

-- 
Pengutronix e.K.                           |                             |
Steuerwalder Str. 21                       | http://www.pengutronix.de/  |
31137 Hildesheim, Germany                  | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |

^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2021-03-23 15:27 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <CGME20210319110516eucas1p1d4e5152af8a1873f192f4edba8cfbb8f@eucas1p1.samsung.com>
2021-03-19 11:04 ` [PATCH v2 1/2] driver core: clear deferred probe reason on probe retry Ahmad Fatoum
2021-03-19 11:04   ` [PATCH v2 2/2] driver core: add helper for deferred probe reason setting Ahmad Fatoum
2021-03-19 11:13     ` Andy Shevchenko
2021-03-19 11:46       ` Ahmad Fatoum
2021-03-19 12:16         ` Andy Shevchenko
2021-03-19 16:08           ` Ahmad Fatoum
2021-03-19 11:15     ` Andy Shevchenko
2021-03-19 11:47       ` Ahmad Fatoum
2021-03-23 14:07     ` Greg Kroah-Hartman
2021-03-23 15:27       ` Ahmad Fatoum
2021-03-22  8:18   ` [PATCH v2 1/2] driver core: clear deferred probe reason on probe retry Andrzej Hajda

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).