From: Sergey Senozhatsky <senozhat...@chromium.org>

commit ea86f3defd55f141a44146e66cbf8ffb683d60da upstream.

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 <senozhat...@chromium.org>
Link: 
http://patchwork.freedesktop.org/patch/msgid/20201105014744.1662226-1-senozhat...@chromium.org
Signed-off-by: Gerd Hoffmann <kra...@redhat.com>
Signed-off-by: Doug Horn <dough...@google.com>
Signed-off-by: Greg Kroah-Hartman <gre...@linuxfoundation.org>
---
 drivers/gpu/drm/virtio/virtgpu_vq.c |    6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

--- a/drivers/gpu/drm/virtio/virtgpu_vq.c
+++ b/drivers/gpu/drm/virtio/virtgpu_vq.c
@@ -868,9 +868,9 @@ int virtio_gpu_object_attach(struct virt
        }
 
        /* gets freed when the ring has consumed it */
-       ents = kmalloc_array(obj->pages->nents,
-                            sizeof(struct virtio_gpu_mem_entry),
-                            GFP_KERNEL);
+       ents = kvmalloc_array(obj->pages->nents,
+                             sizeof(struct virtio_gpu_mem_entry),
+                             GFP_KERNEL);
        if (!ents) {
                DRM_ERROR("failed to allocate ent list\n");
                return -ENOMEM;


Reply via email to