| From ba66434b8c62588f4d40eab69ae2cded0f2eaa56 Mon Sep 17 00:00:00 2001 |
| From: Lucas Stach <l.stach@pengutronix.de> |
| Date: Wed, 22 Mar 2017 12:07:23 +0100 |
| Subject: [PATCH] drm/etnaviv: (re-)protect fence allocation with GPU mutex |
| |
| 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) |
| CC: stable@vger.kernel.org #4.9+ |
| Signed-off-by: Lucas Stach <l.stach@pengutronix.de> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/drivers/gpu/drm/etnaviv/etnaviv_gpu.c b/drivers/gpu/drm/etnaviv/etnaviv_gpu.c |
| index b382cf505262..041e70abdc41 100644 |
| --- a/drivers/gpu/drm/etnaviv/etnaviv_gpu.c |
| +++ b/drivers/gpu/drm/etnaviv/etnaviv_gpu.c |
| @@ -1349,6 +1349,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); |
| @@ -1356,8 +1358,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; |
| -- |
| 2.12.0 |
| |