diff options
author | Dan Williams <dan.j.williams@intel.com> | 2015-12-15 03:34:21 -0500 |
---|---|---|
committer | Dan Williams <dan.j.williams@intel.com> | 2015-12-15 03:34:21 -0500 |
commit | 979fccfb7348dbd968daf0249aa484a0297f83df (patch) | |
tree | 76cb63d09fefff94740d5c0154c83783ee78c3de /tools | |
parent | 2dc43331e34fa992a67f42ed44e5111cafafd6f3 (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/Kbuild | 2 | ||||
-rw-r--r-- | tools/testing/nvdimm/test/iomap.c | 48 |
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 | |||
9 | ldflags-y += --wrap=__devm_request_region | 9 | ldflags-y += --wrap=__devm_request_region |
10 | ldflags-y += --wrap=__request_region | 10 | ldflags-y += --wrap=__request_region |
11 | ldflags-y += --wrap=__release_region | 11 | ldflags-y += --wrap=__release_region |
12 | ldflags-y += --wrap=devm_memremap_pages | ||
13 | ldflags-y += --wrap=phys_to_pfn_t | ||
12 | 14 | ||
13 | DRIVERS := ../../../drivers | 15 | DRIVERS := ../../../drivers |
14 | NVDIMM_SRC := $(DRIVERS)/nvdimm | 16 | NVDIMM_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 | } |
95 | EXPORT_SYMBOL(__wrap_devm_memremap); | 95 | EXPORT_SYMBOL(__wrap_devm_memremap); |
96 | 96 | ||
97 | #ifdef __HAVE_ARCH_PTE_DEVMAP | ||
98 | #include <linux/memremap.h> | ||
99 | #include <linux/pfn_t.h> | ||
100 | |||
101 | void *__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 | } | ||
114 | EXPORT_SYMBOL(__wrap_devm_memremap_pages); | ||
115 | |||
116 | pfn_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 | } | ||
127 | EXPORT_SYMBOL(__wrap_phys_to_pfn_t); | ||
128 | #else | ||
129 | /* to be removed post 4.5-rc1 */ | ||
130 | void *__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 | } | ||
142 | EXPORT_SYMBOL(__wrap_devm_memremap_pages); | ||
143 | #endif | ||
144 | |||
97 | void *__wrap_memremap(resource_size_t offset, size_t size, | 145 | void *__wrap_memremap(resource_size_t offset, size_t size, |
98 | unsigned long flags) | 146 | unsigned long flags) |
99 | { | 147 | { |