mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/
synced 2025-04-19 20:58:31 +09:00
uio_hv_generic: Add a check for HV_NIC for send, receive buffers setup
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@linux.microsoft.com> Reviewed-by: Michael Kelley <mhklinux@outlook.com> Link: https://lore.kernel.org/r/20250102145243.2088-1-namjain@linux.microsoft.com Signed-off-by: Wei Liu <wei.liu@kernel.org> Message-ID: <20250102145243.2088-1-namjain@linux.microsoft.com>
This commit is contained in:
parent
4f6b64f3d3
commit
5fa1da972f
@ -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;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user