drm/etnaviv: return GPU fence through the submit structure
The next patch will need the complete dma_fence, instead of just the seqno, to create the sync_file in etnaviv_ioctl_gem_submit, in case an out_fence_fd is requested. The submit needs to hold a reference to the dma_fence, to avoid raceing with the GPU completing the fence. Signed-off-by: Lucas Stach <l.stach@pengutronix.de> Tested-by: Philipp Zabel <p.zabel@pengutronix.de> --- New patch in v3.
This commit is contained in:
parent
9ad59fea16
commit
6e2b98cf3b
|
@ -20,6 +20,7 @@
|
|||
#include <linux/reservation.h>
|
||||
#include "etnaviv_drv.h"
|
||||
|
||||
struct dma_fence;
|
||||
struct etnaviv_gem_ops;
|
||||
struct etnaviv_gem_object;
|
||||
|
||||
|
@ -104,7 +105,7 @@ struct etnaviv_gem_submit {
|
|||
struct drm_device *dev;
|
||||
struct etnaviv_gpu *gpu;
|
||||
struct ww_acquire_ctx ticket;
|
||||
u32 fence;
|
||||
struct dma_fence *fence;
|
||||
unsigned int nr_bos;
|
||||
struct etnaviv_gem_submit_bo bos[0];
|
||||
u32 flags;
|
||||
|
|
|
@ -294,6 +294,7 @@ static void submit_cleanup(struct etnaviv_gem_submit *submit)
|
|||
}
|
||||
|
||||
ww_acquire_fini(&submit->ticket);
|
||||
dma_fence_put(submit->fence);
|
||||
kfree(submit);
|
||||
}
|
||||
|
||||
|
@ -435,7 +436,7 @@ int etnaviv_ioctl_gem_submit(struct drm_device *dev, void *data,
|
|||
if (ret == 0)
|
||||
cmdbuf = NULL;
|
||||
|
||||
args->fence = submit->fence;
|
||||
args->fence = submit->fence->seqno;
|
||||
|
||||
out:
|
||||
submit_unpin_objects(submit);
|
||||
|
|
|
@ -1337,8 +1337,8 @@ int etnaviv_gpu_submit(struct etnaviv_gpu *gpu,
|
|||
mutex_lock(&gpu->lock);
|
||||
|
||||
gpu->event[event].fence = fence;
|
||||
submit->fence = fence->seqno;
|
||||
gpu->active_fence = submit->fence;
|
||||
submit->fence = dma_fence_get(fence);
|
||||
gpu->active_fence = submit->fence->seqno;
|
||||
|
||||
if (gpu->lastctx != cmdbuf->ctx) {
|
||||
gpu->mmu->need_flush = true;
|
||||
|
|
Loading…
Reference in a new issue