On Fri, Jun 22, 2018 at 4:27 AM, Stephen Boyd <swboyd@xxxxxxxxxxxx> wrote: > Use devm here to save some lines and prepare for bulk regulator usage in > this driver. Otherwise, when we devm bulk get regulators we'll free the > containing i2c_hid structure and try to put regulator pointers from > freed memory. > > Cc: Benjamin Tissoires <benjamin.tissoires@xxxxxxxxxx> > Cc: Hans de Goede <hdegoede@xxxxxxxxxx> > Cc: Andy Shevchenko <andriy.shevchenko@xxxxxxxxxxxxxxx> > Cc: Dmitry Torokhov <dtor@xxxxxxxxxxxx> > Cc: Doug Anderson <dianders@xxxxxxxxxxxx> > Signed-off-by: Stephen Boyd <swboyd@xxxxxxxxxxxx> > --- > drivers/hid/i2c-hid/i2c-hid.c | 9 +++------ > 1 file changed, 3 insertions(+), 6 deletions(-) > > diff --git a/drivers/hid/i2c-hid/i2c-hid.c b/drivers/hid/i2c-hid/i2c-hid.c > index c1652bb7bd15..c7d6738dc524 100644 > --- a/drivers/hid/i2c-hid/i2c-hid.c > +++ b/drivers/hid/i2c-hid/i2c-hid.c > @@ -1002,18 +1002,18 @@ static int i2c_hid_probe(struct i2c_client *client, > return client->irq; > } > > - ihid = kzalloc(sizeof(struct i2c_hid), GFP_KERNEL); > + ihid = devm_kzalloc(&client->dev, sizeof(*ihid), GFP_KERNEL); IIRC, I never made the switch towards devm for i2c_hid because at the time there was a "all or nothing" rule regarding devm. But given that the regulator already has a devm inside, I think we are screwed here and we should probably try to devm-ize the module. I seem to remember that someone posted a devm version of hid_allocate_device/hid-add_device, but I don't think this ever went upstream (because no use). Otherwise, for the series: Acked-by: Benjamin Tissoires <benjamin.tissoires@xxxxxxxxxx> Cheers, Benjamin > if (!ihid) > return -ENOMEM; > > if (client->dev.of_node) { > ret = i2c_hid_of_probe(client, &ihid->pdata); > if (ret) > - goto err; > + return ret; > } else if (!platform_data) { > ret = i2c_hid_acpi_pdata(client, &ihid->pdata); > if (ret) > - goto err; > + return ret; > } else { > ihid->pdata = *platform_data; > } > @@ -1126,7 +1126,6 @@ static int i2c_hid_probe(struct i2c_client *client, > > err: > i2c_hid_free_buffers(ihid); > - kfree(ihid); > return ret; > } > > @@ -1150,8 +1149,6 @@ static int i2c_hid_remove(struct i2c_client *client) > > regulator_disable(ihid->pdata.supply); > > - kfree(ihid); > - > return 0; > } > > -- > Sent by a computer through tubes > -- To unsubscribe from this list: send the line "unsubscribe linux-input" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html