Quoting Tri Vo (2019-08-05 10:58:46) > diff --git a/drivers/base/power/wakeup.c b/drivers/base/power/wakeup.c > index ee31d4f8d856..3938892c8903 100644 > --- a/drivers/base/power/wakeup.c > +++ b/drivers/base/power/wakeup.c > @@ -72,23 +72,6 @@ static struct wakeup_source deleted_ws = { > .lock = __SPIN_LOCK_UNLOCKED(deleted_ws.lock), > }; > > -/** > - * wakeup_source_prepare - Prepare a new wakeup source for initialization. > - * @ws: Wakeup source to prepare. > - * @name: Pointer to the name of the new wakeup source. > - * > - * Callers must ensure that the @name string won't be freed when @ws is > still in > - * use. > - */ > -void wakeup_source_prepare(struct wakeup_source *ws, const char *name) > -{ > - if (ws) { > - memset(ws, 0, sizeof(*ws)); > - ws->name = name; > - } > -} > -EXPORT_SYMBOL_GPL(wakeup_source_prepare); > - > /** > * wakeup_source_create - Create a struct wakeup_source object. > * @name: Name of the new wakeup source. > @@ -96,13 +79,23 @@ EXPORT_SYMBOL_GPL(wakeup_source_prepare); > struct wakeup_source *wakeup_source_create(const char *name) > { > struct wakeup_source *ws; > + const char *ws_name; > > - ws = kmalloc(sizeof(*ws), GFP_KERNEL); > + ws = kzalloc(sizeof(*ws), GFP_KERNEL); > if (!ws) > - return NULL; > + goto err_ws; > + > + ws_name = kstrdup_const(name, GFP_KERNEL); > + if (!ws_name)
Does this intentionally change this function to return an error if 'name' is NULL? Before, wakeup_source_prepare() would just assign ws->name to NULL, but now it errors out. I don't see how it's good or useful to allow NULL for the wakeup source name, but it is what it is. > + goto err_name; > + ws->name = ws_name; > > - wakeup_source_prepare(ws, name ? kstrdup_const(name, GFP_KERNEL) : > NULL); > return ws; > + > +err_name: > + kfree(ws); > +err_ws: > + return NULL; > } > EXPORT_SYMBOL_GPL(wakeup_source_create); >