drm/i915: Zero fill the request structure
authorJohn Harrison <John.C.Harrison@Intel.com>
Fri, 5 Dec 2014 13:49:34 +0000 (13:49 +0000)
committerDaniel Vetter <daniel.vetter@ffwll.ch>
Sat, 6 Dec 2014 00:46:26 +0000 (01:46 +0100)
There is a general theory that kzmalloc is better/safer than kmalloc, especially
for interesting data structures. This change updates the request structure
allocation to be zero filled.

This also fixes crashes in the reset code. Quoting Mika's patch:

"Clean the request structure on alloc. Otherwise we might end up
referencing uninitialized fields.  This is apparent when we try to
cleanup the preallocated request on ring reset, before any request has
been submitted to the ring.  The request->ctx is foobar and we end up
freeing the foobarness."

Note that this fixes a regression introduced in

commit 9eba5d4a1d79d5094321469479b4dbe418f60110
Author: John Harrison <John.C.Harrison@Intel.com>
Date:   Mon Nov 24 18:49:23 2014 +0000

    drm/i915: Ensure OLS & PLR are always in sync

References: https://bugs.freedesktop.org/show_bug.cgi?id=86959
References: https://bugs.freedesktop.org/show_bug.cgi?id=86962
References: https://bugs.freedesktop.org/show_bug.cgi?id=86992
Change-Id: I68715ef758025fab8db763941ef63bf60d7031e2
For: VIZ-4377
Signed-off-by: John Harrison <John.C.Harrison@Intel.com>
Reviewed-by: Thomas Daniel <Thomas.Daniel@intel.com>
Cc: Mika Kuoppala <mika.kuoppala@intel.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
drivers/gpu/drm/i915/intel_lrc.c
drivers/gpu/drm/i915/intel_ringbuffer.c

index 7986eb3e50273735ffaf00c6e09073489a62de0c..782e97638ed8bb640048d2818c6ed5fb3441ca18 100644 (file)
@@ -885,7 +885,7 @@ static int logical_ring_alloc_request(struct intel_engine_cs *ring,
        if (ring->outstanding_lazy_request)
                return 0;
 
-       request = kmalloc(sizeof(*request), GFP_KERNEL);
+       request = kzalloc(sizeof(*request), GFP_KERNEL);
        if (request == NULL)
                return -ENOMEM;
 
index f52101521653a2ffb0a3ff10f61020de9932a44f..8828219139374ae8f4273388f8b3ea1d239df613 100644 (file)
@@ -2032,7 +2032,7 @@ intel_ring_alloc_request(struct intel_engine_cs *ring)
        if (ring->outstanding_lazy_request)
                return 0;
 
-       request = kmalloc(sizeof(*request), GFP_KERNEL);
+       request = kzalloc(sizeof(*request), GFP_KERNEL);
        if (request == NULL)
                return -ENOMEM;