From: Naman Jain <namjain@xxxxxxxxxxxxxxxxxxx> Sent: Thursday, January 2, 2025 6:53 AM > > Receive and send buffer allocation was originally introduced to support > DPDK's networking use case. These buffer sizes were further increased to > meet DPDK performance requirements. However, these large buffers are > unnecessary for any other UIO use cases. > Restrict the allocation of receive and send buffers only for HV_NIC device > type, saving 47 MB of memory per device. > > While at it, fix some of the syntax related issues in the touched code > which are reported by "--strict" option of checkpatch. > > Signed-off-by: Naman Jain <namjain@xxxxxxxxxxxxxxxxxxx> > --- > Changes since v1: > https://lore.kernel.org/all/20241125125015.1500-1-namjain@xxxxxxxxxxxxxxxxxxx/ > Rephrased commit msg as per Saurabh's suggestion. > --- > drivers/uio/uio_hv_generic.c | 86 ++++++++++++++++++------------------ > 1 file changed, 43 insertions(+), 43 deletions(-) > > diff --git a/drivers/uio/uio_hv_generic.c b/drivers/uio/uio_hv_generic.c > index 3976360d0096..1b19b5647495 100644 > --- a/drivers/uio/uio_hv_generic.c > +++ b/drivers/uio/uio_hv_generic.c > @@ -296,51 +296,51 @@ hv_uio_probe(struct hv_device *dev, > pdata->info.mem[MON_PAGE_MAP].size = PAGE_SIZE; > pdata->info.mem[MON_PAGE_MAP].memtype = UIO_MEM_LOGICAL; > > - pdata->recv_buf = vzalloc(RECV_BUFFER_SIZE); > - if (pdata->recv_buf == NULL) { > - ret = -ENOMEM; > - goto fail_free_ring; > + if (channel->device_id == HV_NIC) { > + pdata->recv_buf = vzalloc(RECV_BUFFER_SIZE); > + if (!pdata->recv_buf) { > + ret = -ENOMEM; > + goto fail_free_ring; > + } > + > + ret = vmbus_establish_gpadl(channel, pdata->recv_buf, > + RECV_BUFFER_SIZE, &pdata->recv_gpadl); > + if (ret) { > + if (!pdata->recv_gpadl.decrypted) > + vfree(pdata->recv_buf); > + goto fail_close; > + } > + > + /* put Global Physical Address Label in name */ > + snprintf(pdata->recv_name, sizeof(pdata->recv_name), > + "recv:%u", pdata->recv_gpadl.gpadl_handle); > + pdata->info.mem[RECV_BUF_MAP].name = pdata->recv_name; > + pdata->info.mem[RECV_BUF_MAP].addr = (uintptr_t)pdata->recv_buf; > + pdata->info.mem[RECV_BUF_MAP].size = RECV_BUFFER_SIZE; > + pdata->info.mem[RECV_BUF_MAP].memtype = UIO_MEM_VIRTUAL; > + > + pdata->send_buf = vzalloc(SEND_BUFFER_SIZE); > + if (!pdata->send_buf) { > + ret = -ENOMEM; > + goto fail_close; > + } > + > + ret = vmbus_establish_gpadl(channel, pdata->send_buf, > + SEND_BUFFER_SIZE, &pdata->send_gpadl); > + if (ret) { > + if (!pdata->send_gpadl.decrypted) > + vfree(pdata->send_buf); > + goto fail_close; > + } > + > + snprintf(pdata->send_name, sizeof(pdata->send_name), > + "send:%u", pdata->send_gpadl.gpadl_handle); > + pdata->info.mem[SEND_BUF_MAP].name = pdata->send_name; > + pdata->info.mem[SEND_BUF_MAP].addr = (uintptr_t)pdata- > >send_buf; > + pdata->info.mem[SEND_BUF_MAP].size = SEND_BUFFER_SIZE; > + pdata->info.mem[SEND_BUF_MAP].memtype = UIO_MEM_VIRTUAL; > } > > - ret = vmbus_establish_gpadl(channel, pdata->recv_buf, > - RECV_BUFFER_SIZE, &pdata->recv_gpadl); > - if (ret) { > - if (!pdata->recv_gpadl.decrypted) > - vfree(pdata->recv_buf); > - goto fail_close; > - } > - > - /* put Global Physical Address Label in name */ > - snprintf(pdata->recv_name, sizeof(pdata->recv_name), > - "recv:%u", pdata->recv_gpadl.gpadl_handle); > - pdata->info.mem[RECV_BUF_MAP].name = pdata->recv_name; > - pdata->info.mem[RECV_BUF_MAP].addr > - = (uintptr_t)pdata->recv_buf; > - pdata->info.mem[RECV_BUF_MAP].size = RECV_BUFFER_SIZE; > - pdata->info.mem[RECV_BUF_MAP].memtype = UIO_MEM_VIRTUAL; > - > - pdata->send_buf = vzalloc(SEND_BUFFER_SIZE); > - if (pdata->send_buf == NULL) { > - ret = -ENOMEM; > - goto fail_close; > - } > - > - ret = vmbus_establish_gpadl(channel, pdata->send_buf, > - SEND_BUFFER_SIZE, &pdata->send_gpadl); > - if (ret) { > - if (!pdata->send_gpadl.decrypted) > - vfree(pdata->send_buf); > - goto fail_close; > - } > - > - snprintf(pdata->send_name, sizeof(pdata->send_name), > - "send:%u", pdata->send_gpadl.gpadl_handle); > - pdata->info.mem[SEND_BUF_MAP].name = pdata->send_name; > - pdata->info.mem[SEND_BUF_MAP].addr > - = (uintptr_t)pdata->send_buf; > - pdata->info.mem[SEND_BUF_MAP].size = SEND_BUFFER_SIZE; > - pdata->info.mem[SEND_BUF_MAP].memtype = UIO_MEM_VIRTUAL; > - > pdata->info.priv = pdata; > pdata->device = dev; > > > base-commit: 3d6fbc065983fabd3fcfef4d66c9cf8a587f9ddc > -- > 2.43.0 > Reviewed-by: Michael Kelley <mhklinux@xxxxxxxxxxx>