diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_mn.c')
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_mn.c | 41 | 
1 files changed, 5 insertions, 36 deletions
| diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_mn.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_mn.c index 38f739fb727b..3b0f2ec6eec7 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_mn.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_mn.c @@ -51,7 +51,7 @@ struct amdgpu_mn {  	/* objects protected by lock */  	struct mutex		lock; -	struct rb_root		objects; +	struct rb_root_cached	objects;  };  struct amdgpu_mn_node { @@ -76,8 +76,8 @@ static void amdgpu_mn_destroy(struct work_struct *work)  	mutex_lock(&adev->mn_lock);  	mutex_lock(&rmn->lock);  	hash_del(&rmn->node); -	rbtree_postorder_for_each_entry_safe(node, next_node, &rmn->objects, -					     it.rb) { +	rbtree_postorder_for_each_entry_safe(node, next_node, +					     &rmn->objects.rb_root, it.rb) {  		list_for_each_entry_safe(bo, next_bo, &node->bos, mn_list) {  			bo->mn = NULL;  			list_del_init(&bo->mn_list); @@ -147,36 +147,6 @@ static void amdgpu_mn_invalidate_node(struct amdgpu_mn_node *node,  }  /** - * amdgpu_mn_invalidate_page - callback to notify about mm change - * - * @mn: our notifier - * @mn: the mm this callback is about - * @address: address of invalidate page - * - * Invalidation of a single page. Blocks for all BOs mapping it - * and unmap them by move them into system domain again. - */ -static void amdgpu_mn_invalidate_page(struct mmu_notifier *mn, -				      struct mm_struct *mm, -				      unsigned long address) -{ -	struct amdgpu_mn *rmn = container_of(mn, struct amdgpu_mn, mn); -	struct interval_tree_node *it; - -	mutex_lock(&rmn->lock); - -	it = interval_tree_iter_first(&rmn->objects, address, address); -	if (it) { -		struct amdgpu_mn_node *node; - -		node = container_of(it, struct amdgpu_mn_node, it); -		amdgpu_mn_invalidate_node(node, address, address); -	} - -	mutex_unlock(&rmn->lock); -} - -/**   * amdgpu_mn_invalidate_range_start - callback to notify about mm change   *   * @mn: our notifier @@ -215,7 +185,6 @@ static void amdgpu_mn_invalidate_range_start(struct mmu_notifier *mn,  static const struct mmu_notifier_ops amdgpu_mn_ops = {  	.release = amdgpu_mn_release, -	.invalidate_page = amdgpu_mn_invalidate_page,  	.invalidate_range_start = amdgpu_mn_invalidate_range_start,  }; @@ -252,7 +221,7 @@ static struct amdgpu_mn *amdgpu_mn_get(struct amdgpu_device *adev)  	rmn->mm = mm;  	rmn->mn.ops = &amdgpu_mn_ops;  	mutex_init(&rmn->lock); -	rmn->objects = RB_ROOT; +	rmn->objects = RB_ROOT_CACHED;  	r = __mmu_notifier_register(&rmn->mn, mm);  	if (r) @@ -359,7 +328,7 @@ void amdgpu_mn_unregister(struct amdgpu_bo *bo)  	head = bo->mn_list.next;  	bo->mn = NULL; -	list_del(&bo->mn_list); +	list_del_init(&bo->mn_list);  	if (list_empty(head)) {  		struct amdgpu_mn_node *node; |