]> git.proxmox.com Git - mirror_ubuntu-zesty-kernel.git/commitdiff
drm/etnaviv: (re-)protect fence allocation with GPU mutex
authorLucas Stach <l.stach@pengutronix.de>
Wed, 22 Mar 2017 11:07:23 +0000 (12:07 +0100)
committerStefan Bader <stefan.bader@canonical.com>
Fri, 21 Apr 2017 08:11:44 +0000 (10:11 +0200)
BugLink: http://bugs.launchpad.net/bugs/1681875
commit f3cd1b064f1179d9e6188c6d67297a2360880e10 upstream.

The fence allocation needs to be protected by the GPU mutex, otherwise
the fence seqnos of concurrent submits might not match the insertion order
of the jobs in the kernel ring. This breaks the assumption that jobs
complete with monotonically increasing fence seqnos.

Fixes: d9853490176c (drm/etnaviv: take GPU lock later in the submit process)
Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Tim Gardner <tim.gardner@canonical.com>
drivers/gpu/drm/etnaviv/etnaviv_gpu.c

index 0a67124bb2a421cbfa21ec726fedf287294f2e9c..db0a43a090d04f5c7ce3ebad1c2e1f5cc2d3c5bb 100644 (file)
@@ -1303,6 +1303,8 @@ int etnaviv_gpu_submit(struct etnaviv_gpu *gpu,
                goto out_pm_put;
        }
 
+       mutex_lock(&gpu->lock);
+
        fence = etnaviv_gpu_fence_alloc(gpu);
        if (!fence) {
                event_free(gpu, event);
@@ -1310,8 +1312,6 @@ int etnaviv_gpu_submit(struct etnaviv_gpu *gpu,
                goto out_pm_put;
        }
 
-       mutex_lock(&gpu->lock);
-
        gpu->event[event].fence = fence;
        submit->fence = fence->seqno;
        gpu->active_fence = submit->fence;