memremap: move dev_pagemap callbacks into a separate structure
[linux-2.6-microblaze.git] / kernel / memremap.c
index abda62d..0824237 100644 (file)
@@ -92,10 +92,10 @@ static void devm_memremap_pages_release(void *data)
        unsigned long pfn;
        int nid;
 
-       pgmap->kill(pgmap->ref);
+       pgmap->ops->kill(pgmap->ref);
        for_each_device_pfn(pfn, pgmap)
                put_page(pfn_to_page(pfn));
-       pgmap->cleanup(pgmap->ref);
+       pgmap->ops->cleanup(pgmap->ref);
 
        /* pages are dead and unused, undo the arch mapping */
        align_start = res->start & ~(SECTION_SIZE - 1);
@@ -128,8 +128,8 @@ static void devm_memremap_pages_release(void *data)
  * @pgmap: pointer to a struct dev_pagemap
  *
  * Notes:
- * 1/ At a minimum the res, ref and type members of @pgmap must be initialized
- *    by the caller before passing it to this function
+ * 1/ At a minimum the res, ref and type and ops members of @pgmap must be
+ *    initialized by the caller before passing it to this function
  *
  * 2/ The altmap field may optionally be initialized, in which case altmap_valid
  *    must be set to true
@@ -179,7 +179,8 @@ void *devm_memremap_pages(struct device *dev, struct dev_pagemap *pgmap)
                break;
        }
 
-       if (!pgmap->ref || !pgmap->kill || !pgmap->cleanup) {
+       if (!pgmap->ref || !pgmap->ops || !pgmap->ops->kill ||
+           !pgmap->ops->cleanup) {
                WARN(1, "Missing reference count teardown definition\n");
                return ERR_PTR(-EINVAL);
        }
@@ -293,9 +294,8 @@ void *devm_memremap_pages(struct device *dev, struct dev_pagemap *pgmap)
  err_pfn_remap:
        pgmap_array_delete(res);
  err_array:
-       pgmap->kill(pgmap->ref);
-       pgmap->cleanup(pgmap->ref);
-
+       pgmap->ops->kill(pgmap->ref);
+       pgmap->ops->cleanup(pgmap->ref);
        return ERR_PTR(error);
 }
 EXPORT_SYMBOL_GPL(devm_memremap_pages);
@@ -388,7 +388,7 @@ void __put_devmap_managed_page(struct page *page)
 
                mem_cgroup_uncharge(page);
 
-               page->pgmap->page_free(page, page->pgmap->data);
+               page->pgmap->ops->page_free(page, page->pgmap->data);
        } else if (!count)
                __put_page(page);
 }