Hi Dmitry, On Wed, Jul 03, 2024 at 02:37:52PM -0700, Dmitry Torokhov wrote: > In preparation to have dev->vals memory pre-allocated rearrange > code in input_alloc_device() so that it allows handling multiple > points of failure. > > Signed-off-by: Dmitry Torokhov <dmitry.torokhov@xxxxxxxxx> Reviewed-by: Jeff LaBundy <jeff@xxxxxxxxxxx> > --- > drivers/input/input.c | 37 ++++++++++++++++++++++--------------- > 1 file changed, 22 insertions(+), 15 deletions(-) > > diff --git a/drivers/input/input.c b/drivers/input/input.c > index 40a04154f99d..9981fdfaee9f 100644 > --- a/drivers/input/input.c > +++ b/drivers/input/input.c > @@ -1982,21 +1982,28 @@ struct input_dev *input_allocate_device(void) > struct input_dev *dev; > > dev = kzalloc(sizeof(*dev), GFP_KERNEL); > - if (dev) { > - dev->dev.type = &input_dev_type; > - dev->dev.class = &input_class; > - device_initialize(&dev->dev); > - mutex_init(&dev->mutex); > - spin_lock_init(&dev->event_lock); > - timer_setup(&dev->timer, NULL, 0); > - INIT_LIST_HEAD(&dev->h_list); > - INIT_LIST_HEAD(&dev->node); > - > - dev_set_name(&dev->dev, "input%lu", > - (unsigned long)atomic_inc_return(&input_no)); > - > - __module_get(THIS_MODULE); > - } > + if (!dev) > + return NULL; > + > + mutex_init(&dev->mutex); > + spin_lock_init(&dev->event_lock); > + timer_setup(&dev->timer, NULL, 0); > + INIT_LIST_HEAD(&dev->h_list); > + INIT_LIST_HEAD(&dev->node); > + > + dev->dev.type = &input_dev_type; > + dev->dev.class = &input_class; > + device_initialize(&dev->dev); > + /* > + * From this point on we can no longer simply "kfree(dev)", we need > + * to use input_free_device() so that device core properly frees its > + * resources associated with the input device. > + */ > + > + dev_set_name(&dev->dev, "input%lu", > + (unsigned long)atomic_inc_return(&input_no)); > + > + __module_get(THIS_MODULE); > > return dev; > } > -- > 2.45.2.803.g4e1b14247a-goog > Kind regards, Jeff LaBundy