diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c')
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c | 30 | 
1 files changed, 7 insertions, 23 deletions
| diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c index 5f5c00ace96b..f5855c412321 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c @@ -41,22 +41,6 @@  #include "amdgpu_trace.h"  #include "amdgpu_reset.h" -/* - * Fences mark an event in the GPUs pipeline and are used - * for GPU/CPU synchronization.  When the fence is written, - * it is expected that all buffers associated with that fence - * are no longer in use by the associated ring on the GPU and - * that the relevant GPU caches have been flushed. - */ - -struct amdgpu_fence { -	struct dma_fence base; - -	/* RB, DMA, etc. */ -	struct amdgpu_ring		*ring; -	ktime_t				start_timestamp; -}; -  static struct kmem_cache *amdgpu_fence_slab;  int amdgpu_fence_slab_init(void) @@ -151,12 +135,12 @@ int amdgpu_fence_emit(struct amdgpu_ring *ring, struct dma_fence **f, struct amd  		am_fence = kmem_cache_alloc(amdgpu_fence_slab, GFP_ATOMIC);  		if (am_fence == NULL)  			return -ENOMEM; -		fence = &am_fence->base; -		am_fence->ring = ring;  	} else {  		/* take use of job-embedded fence */ -		fence = &job->hw_fence; +		am_fence = &job->hw_fence;  	} +	fence = &am_fence->base; +	am_fence->ring = ring;  	seq = ++ring->fence_drv.sync_seq;  	if (job && job->job_run_counter) { @@ -718,7 +702,7 @@ void amdgpu_fence_driver_clear_job_fences(struct amdgpu_ring *ring)  			 * it right here or we won't be able to track them in fence_drv  			 * and they will remain unsignaled during sa_bo free.  			 */ -			job = container_of(old, struct amdgpu_job, hw_fence); +			job = container_of(old, struct amdgpu_job, hw_fence.base);  			if (!job->base.s_fence && !dma_fence_is_signaled(old))  				dma_fence_signal(old);  			RCU_INIT_POINTER(*ptr, NULL); @@ -780,7 +764,7 @@ static const char *amdgpu_fence_get_timeline_name(struct dma_fence *f)  static const char *amdgpu_job_fence_get_timeline_name(struct dma_fence *f)  { -	struct amdgpu_job *job = container_of(f, struct amdgpu_job, hw_fence); +	struct amdgpu_job *job = container_of(f, struct amdgpu_job, hw_fence.base);  	return (const char *)to_amdgpu_ring(job->base.sched)->name;  } @@ -810,7 +794,7 @@ static bool amdgpu_fence_enable_signaling(struct dma_fence *f)   */  static bool amdgpu_job_fence_enable_signaling(struct dma_fence *f)  { -	struct amdgpu_job *job = container_of(f, struct amdgpu_job, hw_fence); +	struct amdgpu_job *job = container_of(f, struct amdgpu_job, hw_fence.base);  	if (!timer_pending(&to_amdgpu_ring(job->base.sched)->fence_drv.fallback_timer))  		amdgpu_fence_schedule_fallback(to_amdgpu_ring(job->base.sched)); @@ -845,7 +829,7 @@ static void amdgpu_job_fence_free(struct rcu_head *rcu)  	struct dma_fence *f = container_of(rcu, struct dma_fence, rcu);  	/* free job if fence has a parent job */ -	kfree(container_of(f, struct amdgpu_job, hw_fence)); +	kfree(container_of(f, struct amdgpu_job, hw_fence.base));  }  /** | 
