]> git.proxmox.com Git - mirror_ubuntu-focal-kernel.git/commitdiff
drm/amdkfd: use mmu_notifier_put
authorJason Gunthorpe <jgg@mellanox.com>
Tue, 6 Aug 2019 23:15:47 +0000 (20:15 -0300)
committerJason Gunthorpe <jgg@mellanox.com>
Tue, 20 Aug 2019 12:35:02 +0000 (09:35 -0300)
The sequence of mmu_notifier_unregister_no_release(),
mmu_notifier_call_srcu() is identical to mmu_notifier_put() with the
free_notifier callback.

As this is the last user of those APIs, converting it means we can drop
them.

Link: https://lore.kernel.org/r/20190806231548.25242-11-jgg@ziepe.ca
Reviewed-by: Felix Kuehling <Felix.Kuehling@amd.com>
Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
drivers/gpu/drm/amd/amdkfd/kfd_priv.h
drivers/gpu/drm/amd/amdkfd/kfd_process.c

index 3933fb6a371efb706073bbf0d183727d3f421581..9450e20d17093bd4670422c4356c09fbbe1f1dd6 100644 (file)
@@ -686,9 +686,6 @@ struct kfd_process {
        /* We want to receive a notification when the mm_struct is destroyed */
        struct mmu_notifier mmu_notifier;
 
-       /* Use for delayed freeing of kfd_process structure */
-       struct rcu_head rcu;
-
        unsigned int pasid;
        unsigned int doorbell_index;
 
index c06e6190f21ffab263f1c651362c25e6c105b2e3..e5e326f2f2675edc88dce8eede0a93a33d2cc4ae 100644 (file)
@@ -486,11 +486,9 @@ static void kfd_process_ref_release(struct kref *ref)
        queue_work(kfd_process_wq, &p->release_work);
 }
 
-static void kfd_process_destroy_delayed(struct rcu_head *rcu)
+static void kfd_process_free_notifier(struct mmu_notifier *mn)
 {
-       struct kfd_process *p = container_of(rcu, struct kfd_process, rcu);
-
-       kfd_unref_process(p);
+       kfd_unref_process(container_of(mn, struct kfd_process, mmu_notifier));
 }
 
 static void kfd_process_notifier_release(struct mmu_notifier *mn,
@@ -542,12 +540,12 @@ static void kfd_process_notifier_release(struct mmu_notifier *mn,
 
        mutex_unlock(&p->mutex);
 
-       mmu_notifier_unregister_no_release(&p->mmu_notifier, mm);
-       mmu_notifier_call_srcu(&p->rcu, &kfd_process_destroy_delayed);
+       mmu_notifier_put(&p->mmu_notifier);
 }
 
 static const struct mmu_notifier_ops kfd_process_mmu_notifier_ops = {
        .release = kfd_process_notifier_release,
+       .free_notifier = kfd_process_free_notifier,
 };
 
 static int kfd_process_init_cwsr_apu(struct kfd_process *p, struct file *filep)