On Fri, Mar 19, 2021 at 1:05 PM Ahmad Fatoum <a.fat...@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.shevche...@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.fat...@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