aboutsummaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorDan Williams <dan.j.williams@intel.com>2015-12-15 03:34:21 -0500
committerDan Williams <dan.j.williams@intel.com>2015-12-15 03:34:21 -0500
commit979fccfb7348dbd968daf0249aa484a0297f83df (patch)
tree76cb63d09fefff94740d5c0154c83783ee78c3de /tools
parent2dc43331e34fa992a67f42ed44e5111cafafd6f3 (diff)
libnvdimm, pfn: enable pfn sysfs interface unit testing
The unit test infrastructure uses CMA and real memory to emulate nvdimm resources. The call to devm_memremap_pages() can simply be mocked in the same manner as memremap and we mock phys_to_pfn_t() to clear PFN_MAP since these resources are not registered with in the pgmap_radix. Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Diffstat (limited to 'tools')
-rw-r--r--tools/testing/nvdimm/Kbuild2
-rw-r--r--tools/testing/nvdimm/test/iomap.c48
2 files changed, 50 insertions, 0 deletions
diff --git a/tools/testing/nvdimm/Kbuild b/tools/testing/nvdimm/Kbuild
index 38b00ecb2ed5..a34bfd0c8928 100644
--- a/tools/testing/nvdimm/Kbuild
+++ b/tools/testing/nvdimm/Kbuild
@@ -9,6 +9,8 @@ ldflags-y += --wrap=memunmap
9ldflags-y += --wrap=__devm_request_region 9ldflags-y += --wrap=__devm_request_region
10ldflags-y += --wrap=__request_region 10ldflags-y += --wrap=__request_region
11ldflags-y += --wrap=__release_region 11ldflags-y += --wrap=__release_region
12ldflags-y += --wrap=devm_memremap_pages
13ldflags-y += --wrap=phys_to_pfn_t
12 14
13DRIVERS := ../../../drivers 15DRIVERS := ../../../drivers
14NVDIMM_SRC := $(DRIVERS)/nvdimm 16NVDIMM_SRC := $(DRIVERS)/nvdimm
diff --git a/tools/testing/nvdimm/test/iomap.c b/tools/testing/nvdimm/test/iomap.c
index b7251314bbc0..79e110d4a81a 100644
--- a/tools/testing/nvdimm/test/iomap.c
+++ b/tools/testing/nvdimm/test/iomap.c
@@ -94,6 +94,54 @@ void *__wrap_devm_memremap(struct device *dev, resource_size_t offset,
94} 94}
95EXPORT_SYMBOL(__wrap_devm_memremap); 95EXPORT_SYMBOL(__wrap_devm_memremap);
96 96
97#ifdef __HAVE_ARCH_PTE_DEVMAP
98#include <linux/memremap.h>
99#include <linux/pfn_t.h>
100
101void *__wrap_devm_memremap_pages(struct device *dev, struct resource *res,
102 struct percpu_ref *ref, struct vmem_altmap *altmap)
103{
104 resource_size_t offset = res->start;
105 struct nfit_test_resource *nfit_res;
106
107 rcu_read_lock();
108 nfit_res = get_nfit_res(offset);
109 rcu_read_unlock();
110 if (nfit_res)
111 return nfit_res->buf + offset - nfit_res->res->start;
112 return devm_memremap_pages(dev, res, ref, altmap);
113}
114EXPORT_SYMBOL(__wrap_devm_memremap_pages);
115
116pfn_t __wrap_phys_to_pfn_t(dma_addr_t addr, unsigned long flags)
117{
118 struct nfit_test_resource *nfit_res;
119
120 rcu_read_lock();
121 nfit_res = get_nfit_res(addr);
122 rcu_read_unlock();
123 if (nfit_res)
124 flags &= ~PFN_MAP;
125 return phys_to_pfn_t(addr, flags);
126}
127EXPORT_SYMBOL(__wrap_phys_to_pfn_t);
128#else
129/* to be removed post 4.5-rc1 */
130void *__wrap_devm_memremap_pages(struct device *dev, struct resource *res)
131{
132 resource_size_t offset = res->start;
133 struct nfit_test_resource *nfit_res;
134
135 rcu_read_lock();
136 nfit_res = get_nfit_res(offset);
137 rcu_read_unlock();
138 if (nfit_res)
139 return nfit_res->buf + offset - nfit_res->res->start;
140 return devm_memremap_pages(dev, res);
141}
142EXPORT_SYMBOL(__wrap_devm_memremap_pages);
143#endif
144
97void *__wrap_memremap(resource_size_t offset, size_t size, 145void *__wrap_memremap(resource_size_t offset, size_t size,
98 unsigned long flags) 146 unsigned long flags)
99{ 147{