From: Niranjana Vishwanathapura <niranjana.vishwanathapura@xxxxxxxxx> Add i915_vma_is_bind_complete() to check if the binding of a of the VM of a specific VMA is complete. Signed-off-by: Niranjana Vishwanathapura <niranjana.vishwanathapura@xxxxxxxxx> Signed-off-by: Ramalingam C <ramalingam.c@xxxxxxxxx> Signed-off-by: Andi Shyti <andi.shyti@xxxxxxxxxxxxxxx> --- drivers/gpu/drm/i915/i915_vma.c | 28 ++++++++++++++++++++++++++++ drivers/gpu/drm/i915/i915_vma.h | 1 + 2 files changed, 29 insertions(+) diff --git a/drivers/gpu/drm/i915/i915_vma.c b/drivers/gpu/drm/i915/i915_vma.c index 6ca37ce2b35a8..4b8ae58cd886b 100644 --- a/drivers/gpu/drm/i915/i915_vma.c +++ b/drivers/gpu/drm/i915/i915_vma.c @@ -406,6 +406,34 @@ int i915_vma_sync(struct i915_vma *vma) return i915_vm_sync(vma->vm); } +/** + * i915_vma_is_bind_complete() - Checks if the binding of the VM is complete + * @vma: virtual address where the virtual memory that is being checked for + * binding completion + * + * Returns true if the binding is complete, otherwise false. + */ +bool i915_vma_is_bind_complete(struct i915_vma *vma) +{ + /* Ensure vma bind is initiated */ + if (!i915_vma_is_bound(vma, I915_VMA_BIND_MASK)) + return false; + + /* Ensure any binding started is complete */ + if (rcu_access_pointer(vma->active.excl.fence)) { + struct dma_fence *fence; + + rcu_read_lock(); + fence = dma_fence_get_rcu_safe(&vma->active.excl.fence); + rcu_read_unlock(); + if (fence) { + dma_fence_put(fence); + return false; + } + } + return true; +} + /** * i915_vma_verify_bind_complete() - Check for the vm_bind completion of the vma * @vma: vma submitted for vm_bind diff --git a/drivers/gpu/drm/i915/i915_vma.h b/drivers/gpu/drm/i915/i915_vma.h index bf0b5b4abd919..9f8c369c3b466 100644 --- a/drivers/gpu/drm/i915/i915_vma.h +++ b/drivers/gpu/drm/i915/i915_vma.h @@ -444,6 +444,7 @@ void i915_vma_make_purgeable(struct i915_vma *vma); int i915_vma_wait_for_bind(struct i915_vma *vma); int i915_vma_verify_bind_complete(struct i915_vma *vma); int i915_vma_sync(struct i915_vma *vma); +bool i915_vma_is_bind_complete(struct i915_vma *vma); /** * i915_vma_get_current_resource - Get the current resource of the vma -- 2.34.1