This is a minor cleanup for the management of the private object of this
driver. The allocation can be tied to the life-time of the hv_device
object.
This cleans up a bit the exit & error paths, since the object doesn't need
to be explicitly free'd anymore.

Signed-off-by: Alexandru Ardelean <alexandru.ardel...@analog.com>
---
 drivers/uio/uio_hv_generic.c | 8 ++------
 1 file changed, 2 insertions(+), 6 deletions(-)

diff --git a/drivers/uio/uio_hv_generic.c b/drivers/uio/uio_hv_generic.c
index 4dae2320b103..0330ba99730e 100644
--- a/drivers/uio/uio_hv_generic.c
+++ b/drivers/uio/uio_hv_generic.c
@@ -247,14 +247,14 @@ hv_uio_probe(struct hv_device *dev,
                return -ENOTSUPP;
        }
 
-       pdata = kzalloc(sizeof(*pdata), GFP_KERNEL);
+       pdata = devm_kzalloc(&dev->device, sizeof(*pdata), GFP_KERNEL);
        if (!pdata)
                return -ENOMEM;
 
        ret = vmbus_alloc_ring(channel, HV_RING_SIZE * PAGE_SIZE,
                               HV_RING_SIZE * PAGE_SIZE);
        if (ret)
-               goto fail;
+               return ret;
 
        set_channel_read_mode(channel, HV_CALL_ISR);
 
@@ -347,8 +347,6 @@ hv_uio_probe(struct hv_device *dev,
 
 fail_close:
        hv_uio_cleanup(dev, pdata);
-fail:
-       kfree(pdata);
 
        return ret;
 }
@@ -364,10 +362,8 @@ hv_uio_remove(struct hv_device *dev)
        sysfs_remove_bin_file(&dev->channel->kobj, &ring_buffer_bin_attr);
        uio_unregister_device(&pdata->info);
        hv_uio_cleanup(dev, pdata);
-       hv_set_drvdata(dev, NULL);
 
        vmbus_free_ring(dev->channel);
-       kfree(pdata);
        return 0;
 }
 
-- 
2.17.1

Reply via email to