uio_hv_generic: Query the ringbuffer size for device
authorSaurabh Sengar <ssengar@linux.microsoft.com>
Sat, 30 Mar 2024 08:51:58 +0000 (01:51 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 11 Apr 2024 12:55:53 +0000 (14:55 +0200)
Query the ring buffer size from pre defined table per device
and use that value for allocating the ring buffer for that
device. Keep the size as current default which is 2 MB if
the device doesn't have any preferred ring size.

Signed-off-by: Saurabh Sengar <ssengar@linux.microsoft.com>
Reviewed-by: Long Li <longli@microsoft.com>
Link: https://lore.kernel.org/r/1711788723-8593-3-git-send-email-ssengar@linux.microsoft.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/uio/uio_hv_generic.c

index 20d9762331bd767aa88c7b04d3f4c2e84ff72648..4bda6b52e49ea28b57efed9e785fa7228dd528f6 100644 (file)
@@ -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;