summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSergey Senozhatsky <senozhatsky@chromium.org>2020-11-05 02:47:44 +0100
committerGerd Hoffmann <kraxel@redhat.com>2020-11-05 12:33:26 +0100
commitea86f3defd55f141a44146e66cbf8ffb683d60da (patch)
treea1cb12249233efb6d17c3338a05a4315454a38de
parentdrm: document that blobs are ref'counted (diff)
downloadlinux-ea86f3defd55f141a44146e66cbf8ffb683d60da.tar.xz
linux-ea86f3defd55f141a44146e66cbf8ffb683d60da.zip
drm/virtio: use kvmalloc for large allocations
We observed that some of virtio_gpu_object_shmem_init() allocations can be rather costly - order 6 - which can be difficult to fulfill under memory pressure conditions. Switch to kvmalloc_array() in virtio_gpu_object_shmem_init() and let the kernel vmalloc the entries array. Signed-off-by: Sergey Senozhatsky <senozhatsky@chromium.org> Link: http://patchwork.freedesktop.org/patch/msgid/20201105014744.1662226-1-senozhatsky@chromium.org Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
-rw-r--r--drivers/gpu/drm/virtio/virtgpu_object.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/drivers/gpu/drm/virtio/virtgpu_object.c b/drivers/gpu/drm/virtio/virtgpu_object.c
index 2d3aa7baffe4..d9ad27e00905 100644
--- a/drivers/gpu/drm/virtio/virtgpu_object.c
+++ b/drivers/gpu/drm/virtio/virtgpu_object.c
@@ -184,8 +184,9 @@ static int virtio_gpu_object_shmem_init(struct virtio_gpu_device *vgdev,
*nents = shmem->pages->orig_nents;
}
- *ents = kmalloc_array(*nents, sizeof(struct virtio_gpu_mem_entry),
- GFP_KERNEL);
+ *ents = kvmalloc_array(*nents,
+ sizeof(struct virtio_gpu_mem_entry),
+ GFP_KERNEL);
if (!(*ents)) {
DRM_ERROR("failed to allocate ent list\n");
return -ENOMEM;