aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Saurabh Sengar <ssengar@linux.microsoft.com> 2024-03-30 01:51:58 -0700
committerGravatar Greg Kroah-Hartman <gregkh@linuxfoundation.org> 2024-04-11 14:55:53 +0200
commite566ed5b64177a0c07b677568f623ed31d23406d (patch)
tree1cbe2781d080f0459c87727e455bf575ba05fc85
parentDrivers: hv: vmbus: Add utility function for querying ring size (diff)
downloadlinux-e566ed5b64177a0c07b677568f623ed31d23406d.tar.gz
linux-e566ed5b64177a0c07b677568f623ed31d23406d.tar.bz2
linux-e566ed5b64177a0c07b677568f623ed31d23406d.zip
uio_hv_generic: Query the ringbuffer size for device
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>
-rw-r--r--drivers/uio/uio_hv_generic.c7
1 files 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;