Merge tag 'usb-5.2-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb
[linux-2.6-microblaze.git] / mm / hmm.c
index c5d840e..f702a38 100644 (file)
--- a/mm/hmm.c
+++ b/mm/hmm.c
@@ -1354,9 +1354,8 @@ static void hmm_devmem_ref_release(struct percpu_ref *ref)
        complete(&devmem->completion);
 }
 
-static void hmm_devmem_ref_exit(void *data)
+static void hmm_devmem_ref_exit(struct percpu_ref *ref)
 {
-       struct percpu_ref *ref = data;
        struct hmm_devmem *devmem;
 
        devmem = container_of(ref, struct hmm_devmem, ref);
@@ -1433,10 +1432,6 @@ struct hmm_devmem *hmm_devmem_add(const struct hmm_devmem_ops *ops,
        if (ret)
                return ERR_PTR(ret);
 
-       ret = devm_add_action_or_reset(device, hmm_devmem_ref_exit, &devmem->ref);
-       if (ret)
-               return ERR_PTR(ret);
-
        size = ALIGN(size, PA_SECTION_SIZE);
        addr = min((unsigned long)iomem_resource.end,
                   (1UL << MAX_PHYSMEM_BITS) - 1);
@@ -1475,6 +1470,7 @@ struct hmm_devmem *hmm_devmem_add(const struct hmm_devmem_ops *ops,
        devmem->pagemap.ref = &devmem->ref;
        devmem->pagemap.data = devmem;
        devmem->pagemap.kill = hmm_devmem_ref_kill;
+       devmem->pagemap.cleanup = hmm_devmem_ref_exit;
 
        result = devm_memremap_pages(devmem->device, &devmem->pagemap);
        if (IS_ERR(result))
@@ -1512,11 +1508,6 @@ struct hmm_devmem *hmm_devmem_add_resource(const struct hmm_devmem_ops *ops,
        if (ret)
                return ERR_PTR(ret);
 
-       ret = devm_add_action_or_reset(device, hmm_devmem_ref_exit,
-                       &devmem->ref);
-       if (ret)
-               return ERR_PTR(ret);
-
        devmem->pfn_first = devmem->resource->start >> PAGE_SHIFT;
        devmem->pfn_last = devmem->pfn_first +
                           (resource_size(devmem->resource) >> PAGE_SHIFT);
@@ -1529,6 +1520,7 @@ struct hmm_devmem *hmm_devmem_add_resource(const struct hmm_devmem_ops *ops,
        devmem->pagemap.ref = &devmem->ref;
        devmem->pagemap.data = devmem;
        devmem->pagemap.kill = hmm_devmem_ref_kill;
+       devmem->pagemap.cleanup = hmm_devmem_ref_exit;
 
        result = devm_memremap_pages(devmem->device, &devmem->pagemap);
        if (IS_ERR(result))