freedreno/drm: fix invalid-cmdstream-size with older kernels
authorRob Clark <robdclark@chromium.org>
Tue, 19 Nov 2019 17:43:22 +0000 (09:43 -0800)
committerMarge Bot <eric+marge@anholt.net>
Tue, 28 Jan 2020 00:09:34 +0000 (00:09 +0000)
A cmdstream of size zero is invalid.  But this can appear in various
places where we emit a pointer to state.  This doesn't show up with
newer kernels (newer than v5.0) which use "softpin", but on earlier
kernels can result in:

  [drm:msm_ioctl_gem_submit [msm]] *ERROR* invalid cmdstream size: 0

Since the pointer value doesn't matter in these cases, the easy solution
is just to not emit a cmds table entry in this case.

Signed-off-by: Rob Clark <robdclark@chromium.org>
Reviewed-by: Kristian H. Kristensen <hoegsberg@google.com>
Tested-by: Marge Bot <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/2805>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/2805>

src/freedreno/drm/msm_ringbuffer.c

index c4b352ee283316814ab7456496bb0b5168d7e46a..3ce36ad142acc8c9dfa14e8c5fca6fc9f4d49b04 100644 (file)
@@ -612,6 +612,9 @@ msm_ringbuffer_emit_reloc_ring(struct fd_ringbuffer *ring,
                .offset = msm_target->offset,
        });
 
+       if (!size)
+               return 0;
+
        if ((target->flags & _FD_RINGBUFFER_OBJECT) &&
                        !(ring->flags & _FD_RINGBUFFER_OBJECT)) {
                struct msm_submit *msm_submit = to_msm_submit(msm_ring->u.submit);