]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blobdiff - drivers/gpu/drm/amd/amdgpu/amdgpu_mn.c
Merge branch 'drm-next-4.15' of git://people.freedesktop.org/~agd5f/linux into drm...
[mirror_ubuntu-bionic-kernel.git] / drivers / gpu / drm / amd / amdgpu / amdgpu_mn.c
index 521a51b37f5d5c2fa460605b1d4aa070d3c2a06e..bd67f4cb8e6ce57f6ebec1cd8b654cc87aa38718 100644 (file)
@@ -51,7 +51,7 @@ struct amdgpu_mn {
 
        /* objects protected by lock */
        struct rw_semaphore     lock;
-       struct rb_root          objects;
+       struct rb_root_cached   objects;
        struct mutex            read_lock;
        atomic_t                recursion;
 };
@@ -78,8 +78,8 @@ static void amdgpu_mn_destroy(struct work_struct *work)
        mutex_lock(&adev->mn_lock);
        down_write(&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);
@@ -184,36 +184,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;
-
-       amdgpu_mn_read_lock(rmn);
-
-       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);
-       }
-
-       amdgpu_mn_read_unlock(rmn);
-}
-
 /**
  * amdgpu_mn_invalidate_range_start - callback to notify about mm change
  *
@@ -271,7 +241,6 @@ static void amdgpu_mn_invalidate_range_end(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,
        .invalidate_range_end = amdgpu_mn_invalidate_range_end,
 };
@@ -309,7 +278,7 @@ struct amdgpu_mn *amdgpu_mn_get(struct amdgpu_device *adev)
        rmn->mm = mm;
        rmn->mn.ops = &amdgpu_mn_ops;
        init_rwsem(&rmn->lock);
-       rmn->objects = RB_ROOT;
+       rmn->objects = RB_ROOT_CACHED;
        mutex_init(&rmn->read_lock);
        atomic_set(&rmn->recursion, 0);