Skip to content

Commit

Permalink
driver core: add helper for deferred probe reason setting
Browse files Browse the repository at this point in the history
We now have three places within the same file doing the same operation
of freeing this pointer and setting it anew. A helper makes this
arguably easier to read, so add one.

Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>
Reviewed-by: Andrzej Hajda <a.hajda@samsung.com>
Signed-off-by: Ahmad Fatoum <a.fatoum@pengutronix.de>
Link: https://lore.kernel.org/r/20210323153714.25120-2-a.fatoum@pengutronix.de
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  • Loading branch information
a3f authored and gregkh committed Apr 5, 2021
1 parent d46f3e3 commit 72a91f1
Showing 1 changed file with 11 additions and 6 deletions.
17 changes: 11 additions & 6 deletions drivers/base/dd.c
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,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.
*/
Expand Down Expand Up @@ -96,8 +102,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
Expand Down Expand Up @@ -142,8 +147,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);
}
Expand Down Expand Up @@ -222,11 +226,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);
}
Expand Down

0 comments on commit 72a91f1

Please sign in to comment.