]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
uio: uio_hv_generic: use devm_kzalloc() for private data alloc
authorAlexandru Ardelean <alexandru.ardelean@analog.com>
Thu, 19 Nov 2020 15:49:03 +0000 (17:49 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 17 Jul 2025 16:27:40 +0000 (18:27 +0200)
[ Upstream commit 74e71964b1a9ffd34fa4b6ec8f2fa13e7cf0ac7a ]

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.ardelean@analog.com>
Link: https://lore.kernel.org/r/20201119154903.82099-4-alexandru.ardelean@analog.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Stable-dep-of: 0315fef2aff9 ("uio_hv_generic: Align ring size to system page")
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/uio/uio_hv_generic.c

index 67cfe838a7874309b023a5b099b388498e9ce229..f7f510630762791b595f965e601d20a6834d5a28 100644 (file)
@@ -256,14 +256,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);
 
@@ -360,8 +360,6 @@ hv_uio_probe(struct hv_device *dev,
 
 fail_close:
        hv_uio_cleanup(dev, pdata);
-fail:
-       kfree(pdata);
 
        return ret;
 }
@@ -377,10 +375,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;
 }