memremap: remove the data field in struct dev_pagemap
authorChristoph Hellwig <hch@lst.de>
Wed, 26 Jun 2019 12:27:12 +0000 (14:27 +0200)
committerJason Gunthorpe <jgg@mellanox.com>
Tue, 2 Jul 2019 17:32:44 +0000 (14:32 -0300)
struct dev_pagemap is always embedded into a containing structure, so
there is no need to an additional private data field.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Jason Gunthorpe <jgg@mellanox.com>
Reviewed-by: Dan Williams <dan.j.williams@intel.com>
Tested-by: Dan Williams <dan.j.williams@intel.com>
Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
drivers/nvdimm/pmem.c
include/linux/memremap.h
kernel/memremap.c
mm/hmm.c

index 4876717..093408c 100644 (file)
@@ -334,7 +334,7 @@ static void pmem_release_disk(void *__pmem)
        put_disk(pmem->disk);
 }
 
-static void pmem_pagemap_page_free(struct page *page, void *data)
+static void pmem_pagemap_page_free(struct page *page)
 {
        wake_up_var(&page->_refcount);
 }
index ac985bd..336eca6 100644 (file)
@@ -69,7 +69,7 @@ struct dev_pagemap_ops {
         * reach 0 refcount unless there is a refcount bug. This allows the
         * device driver to implement its own memory management.)
         */
-       void (*page_free)(struct page *page, void *data);
+       void (*page_free)(struct page *page);
 
        /*
         * Transition the refcount in struct dev_pagemap to the dead state.
@@ -104,7 +104,6 @@ struct dev_pagemap {
        struct resource res;
        struct percpu_ref *ref;
        struct device *dev;
-       void *data;
        enum memory_type type;
        u64 pci_p2pdma_bus_offset;
        const struct dev_pagemap_ops *ops;
index c06a548..6c3dbb6 100644 (file)
@@ -376,7 +376,7 @@ void __put_devmap_managed_page(struct page *page)
 
                mem_cgroup_uncharge(page);
 
-               page->pgmap->ops->page_free(page, page->pgmap->data);
+               page->pgmap->ops->page_free(page);
        } else if (!count)
                __put_page(page);
 }
index 96633ee..36e25cd 100644 (file)
--- a/mm/hmm.c
+++ b/mm/hmm.c
@@ -1368,15 +1368,17 @@ static void hmm_devmem_ref_kill(struct dev_pagemap *pgmap)
 
 static vm_fault_t hmm_devmem_migrate_to_ram(struct vm_fault *vmf)
 {
-       struct hmm_devmem *devmem = vmf->page->pgmap->data;
+       struct hmm_devmem *devmem =
+               container_of(vmf->page->pgmap, struct hmm_devmem, pagemap);
 
        return devmem->ops->fault(devmem, vmf->vma, vmf->address, vmf->page,
                        vmf->flags, vmf->pmd);
 }
 
-static void hmm_devmem_free(struct page *page, void *data)
+static void hmm_devmem_free(struct page *page)
 {
-       struct hmm_devmem *devmem = data;
+       struct hmm_devmem *devmem =
+               container_of(page->pgmap, struct hmm_devmem, pagemap);
 
        devmem->ops->free(devmem, page);
 }
@@ -1442,7 +1444,6 @@ struct hmm_devmem *hmm_devmem_add(const struct hmm_devmem_ops *ops,
        devmem->pagemap.ops = &hmm_pagemap_ops;
        devmem->pagemap.altmap_valid = false;
        devmem->pagemap.ref = &devmem->ref;
-       devmem->pagemap.data = devmem;
 
        result = devm_memremap_pages(devmem->device, &devmem->pagemap);
        if (IS_ERR(result))