lkml.org 
[lkml]   [2018]   [Sep]   [17]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL 4.18 103/136] HID: i2c-hid: Use devm to allocate i2c_hid struct
    Date
    From: Stephen Boyd <swboyd@chromium.org>

    [ Upstream commit d6f83894110de247a81392ab7ef89e5498df7e80 ]

    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@redhat.com>
    Cc: Hans de Goede <hdegoede@redhat.com>
    Cc: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Cc: Dmitry Torokhov <dtor@chromium.org>
    Cc: Doug Anderson <dianders@chromium.org>
    Signed-off-by: Stephen Boyd <swboyd@chromium.org>
    Acked-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
    Signed-off-by: Jiri Kosina <jkosina@suse.cz>
    Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
    ---
    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 eae0cb3ddec6..3d1506f1c590 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);
    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;
    }

    --
    2.17.1
    \
     
     \ /
      Last update: 2018-09-17 05:31    [W:4.057 / U:0.076 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site