Query the ring buffer size from pre defined table per device.
Keep the size as is if the device doesn't have any preferred
ring size.

Signed-off-by: Saurabh Sengar <[email protected]>
---
 drivers/uio/uio_hv_generic.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/drivers/uio/uio_hv_generic.c b/drivers/uio/uio_hv_generic.c
index 20d9762331bd..4bda6b52e49e 100644
--- a/drivers/uio/uio_hv_generic.c
+++ b/drivers/uio/uio_hv_generic.c
@@ -238,6 +238,7 @@ hv_uio_probe(struct hv_device *dev,
        struct hv_uio_private_data *pdata;
        void *ring_buffer;
        int ret;
+       size_t ring_size = hv_dev_ring_size(channel);
 
        /* Communicating with host has to be via shared memory not hypercall */
        if (!channel->offermsg.monitor_allocated) {
@@ -245,12 +246,14 @@ hv_uio_probe(struct hv_device *dev,
                return -ENOTSUPP;
        }
 
+       if (!ring_size)
+               ring_size = HV_RING_SIZE * PAGE_SIZE;
+
        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);
+       ret = vmbus_alloc_ring(channel, ring_size, ring_size);
        if (ret)
                return ret;
 
-- 
2.34.1


Reply via email to