diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h')
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h | 15 | 
1 files changed, 15 insertions, 0 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h index 83acb7bd80fe..1d31771b4230 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h @@ -492,6 +492,21 @@ void amdgpu_debugfs_vm_bo_info(struct amdgpu_vm *vm, struct seq_file *m);   */  static inline uint64_t amdgpu_vm_tlb_seq(struct amdgpu_vm *vm)  { +	unsigned long flags; +	spinlock_t *lock; + +	/* +	 * Workaround to stop racing between the fence signaling and handling +	 * the cb. The lock is static after initially setting it up, just make +	 * sure that the dma_fence structure isn't freed up. +	 */ +	rcu_read_lock(); +	lock = vm->last_tlb_flush->lock; +	rcu_read_unlock(); + +	spin_lock_irqsave(lock, flags); +	spin_unlock_irqrestore(lock, flags); +  	return atomic64_read(&vm->tlb_seq);  }  | 
