Currently, the memory to the composition frame is being allocated using
the kzmalloc. This comes with the limitation of maximum size of one
page size(which in the x86_64 is 4Kb and 4MB for default and hugepage
respectively).

Somes test of igt (e.g. kms_plane@pixel-format) uses more than 4MB when
testing some pixel formats like ARGB16161616.

This problem is addessed by allocating the memory using kvzalloc that
circunvents this limitation.

Signed-off-by: Igor Torrente <igormtorre...@gmail.com>
---
 drivers/gpu/drm/vkms/vkms_composer.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/gpu/drm/vkms/vkms_composer.c 
b/drivers/gpu/drm/vkms/vkms_composer.c
index 9e8204be9a14..82f79e508f81 100644
--- a/drivers/gpu/drm/vkms/vkms_composer.c
+++ b/drivers/gpu/drm/vkms/vkms_composer.c
@@ -180,7 +180,7 @@ static int compose_active_planes(void **vaddr_out,
        int i;
 
        if (!*vaddr_out) {
-               *vaddr_out = kzalloc(gem_obj->size, GFP_KERNEL);
+               *vaddr_out = kvzalloc(gem_obj->size, GFP_KERNEL);
                if (!*vaddr_out) {
                        DRM_ERROR("Cannot allocate memory for output frame.");
                        return -ENOMEM;
@@ -263,7 +263,7 @@ void vkms_composer_worker(struct work_struct *work)
                                    crtc_state);
        if (ret) {
                if (ret == -EINVAL && !wb_pending)
-                       kfree(vaddr_out);
+                       kvfree(vaddr_out);
                return;
        }
 
@@ -275,7 +275,7 @@ void vkms_composer_worker(struct work_struct *work)
                crtc_state->wb_pending = false;
                spin_unlock_irq(&out->composer_lock);
        } else {
-               kfree(vaddr_out);
+               kvfree(vaddr_out);
        }
 
        /*
-- 
2.30.2

Reply via email to