diff options
-rw-r--r-- | arch/x86/include/asm/pmem.h | 5 | ||||
-rw-r--r-- | arch/x86/mm/pageattr.c | 6 | ||||
-rw-r--r-- | drivers/nvdimm/claim.c | 3 | ||||
-rw-r--r-- | drivers/nvdimm/pmem.c | 2 | ||||
-rw-r--r-- | drivers/nvdimm/pmem.h | 4 | ||||
-rw-r--r-- | include/linux/pmem.h | 19 |
6 files changed, 13 insertions, 26 deletions
diff --git a/arch/x86/include/asm/pmem.h b/arch/x86/include/asm/pmem.h index 4759a179aa52..b61a25a895a7 100644 --- a/arch/x86/include/asm/pmem.h +++ b/arch/x86/include/asm/pmem.h | |||
@@ -43,10 +43,5 @@ static inline void arch_memcpy_to_pmem(void *dst, const void *src, size_t n) | |||
43 | __func__, dst, src, rem)) | 43 | __func__, dst, src, rem)) |
44 | BUG(); | 44 | BUG(); |
45 | } | 45 | } |
46 | |||
47 | static inline void arch_invalidate_pmem(void *addr, size_t size) | ||
48 | { | ||
49 | clflush_cache_range(addr, size); | ||
50 | } | ||
51 | #endif /* CONFIG_ARCH_HAS_PMEM_API */ | 46 | #endif /* CONFIG_ARCH_HAS_PMEM_API */ |
52 | #endif /* __ASM_X86_PMEM_H__ */ | 47 | #endif /* __ASM_X86_PMEM_H__ */ |
diff --git a/arch/x86/mm/pageattr.c b/arch/x86/mm/pageattr.c index c8520b2c62d2..757b0bcdf712 100644 --- a/arch/x86/mm/pageattr.c +++ b/arch/x86/mm/pageattr.c | |||
@@ -150,6 +150,12 @@ void clflush_cache_range(void *vaddr, unsigned int size) | |||
150 | } | 150 | } |
151 | EXPORT_SYMBOL_GPL(clflush_cache_range); | 151 | EXPORT_SYMBOL_GPL(clflush_cache_range); |
152 | 152 | ||
153 | void arch_invalidate_pmem(void *addr, size_t size) | ||
154 | { | ||
155 | clflush_cache_range(addr, size); | ||
156 | } | ||
157 | EXPORT_SYMBOL_GPL(arch_invalidate_pmem); | ||
158 | |||
153 | static void __cpa_flush_all(void *arg) | 159 | static void __cpa_flush_all(void *arg) |
154 | { | 160 | { |
155 | unsigned long cache = (unsigned long)arg; | 161 | unsigned long cache = (unsigned long)arg; |
diff --git a/drivers/nvdimm/claim.c b/drivers/nvdimm/claim.c index b8b9c8ca7862..d2e16c0401df 100644 --- a/drivers/nvdimm/claim.c +++ b/drivers/nvdimm/claim.c | |||
@@ -14,6 +14,7 @@ | |||
14 | #include <linux/sizes.h> | 14 | #include <linux/sizes.h> |
15 | #include <linux/pmem.h> | 15 | #include <linux/pmem.h> |
16 | #include "nd-core.h" | 16 | #include "nd-core.h" |
17 | #include "pmem.h" | ||
17 | #include "pfn.h" | 18 | #include "pfn.h" |
18 | #include "btt.h" | 19 | #include "btt.h" |
19 | #include "nd.h" | 20 | #include "nd.h" |
@@ -272,7 +273,7 @@ static int nsio_rw_bytes(struct nd_namespace_common *ndns, | |||
272 | cleared /= 512; | 273 | cleared /= 512; |
273 | badblocks_clear(&nsio->bb, sector, cleared); | 274 | badblocks_clear(&nsio->bb, sector, cleared); |
274 | } | 275 | } |
275 | invalidate_pmem(nsio->addr + offset, size); | 276 | arch_invalidate_pmem(nsio->addr + offset, size); |
276 | } else | 277 | } else |
277 | rc = -EIO; | 278 | rc = -EIO; |
278 | } | 279 | } |
diff --git a/drivers/nvdimm/pmem.c b/drivers/nvdimm/pmem.c index 3b87702d46bb..68737bc68a07 100644 --- a/drivers/nvdimm/pmem.c +++ b/drivers/nvdimm/pmem.c | |||
@@ -71,7 +71,7 @@ static int pmem_clear_poison(struct pmem_device *pmem, phys_addr_t offset, | |||
71 | badblocks_clear(&pmem->bb, sector, cleared); | 71 | badblocks_clear(&pmem->bb, sector, cleared); |
72 | } | 72 | } |
73 | 73 | ||
74 | invalidate_pmem(pmem->virt_addr + offset, len); | 74 | arch_invalidate_pmem(pmem->virt_addr + offset, len); |
75 | 75 | ||
76 | return rc; | 76 | return rc; |
77 | } | 77 | } |
diff --git a/drivers/nvdimm/pmem.h b/drivers/nvdimm/pmem.h index c4b3371c7f88..00005900c1b7 100644 --- a/drivers/nvdimm/pmem.h +++ b/drivers/nvdimm/pmem.h | |||
@@ -7,10 +7,14 @@ | |||
7 | 7 | ||
8 | #ifdef CONFIG_ARCH_HAS_PMEM_API | 8 | #ifdef CONFIG_ARCH_HAS_PMEM_API |
9 | void arch_wb_cache_pmem(void *addr, size_t size); | 9 | void arch_wb_cache_pmem(void *addr, size_t size); |
10 | void arch_invalidate_pmem(void *addr, size_t size); | ||
10 | #else | 11 | #else |
11 | static inline void arch_wb_cache_pmem(void *addr, size_t size) | 12 | static inline void arch_wb_cache_pmem(void *addr, size_t size) |
12 | { | 13 | { |
13 | } | 14 | } |
15 | static inline void arch_invalidate_pmem(void *addr, size_t size) | ||
16 | { | ||
17 | } | ||
14 | #endif | 18 | #endif |
15 | 19 | ||
16 | /* this definition is in it's own header for tools/testing/nvdimm to consume */ | 20 | /* this definition is in it's own header for tools/testing/nvdimm to consume */ |
diff --git a/include/linux/pmem.h b/include/linux/pmem.h index 33ae761f010a..559c00848583 100644 --- a/include/linux/pmem.h +++ b/include/linux/pmem.h | |||
@@ -30,11 +30,6 @@ static inline void arch_memcpy_to_pmem(void *dst, const void *src, size_t n) | |||
30 | { | 30 | { |
31 | BUG(); | 31 | BUG(); |
32 | } | 32 | } |
33 | |||
34 | static inline void arch_invalidate_pmem(void *addr, size_t size) | ||
35 | { | ||
36 | BUG(); | ||
37 | } | ||
38 | #endif | 33 | #endif |
39 | 34 | ||
40 | static inline bool arch_has_pmem_api(void) | 35 | static inline bool arch_has_pmem_api(void) |
@@ -61,18 +56,4 @@ static inline void memcpy_to_pmem(void *dst, const void *src, size_t n) | |||
61 | else | 56 | else |
62 | memcpy(dst, src, n); | 57 | memcpy(dst, src, n); |
63 | } | 58 | } |
64 | |||
65 | /** | ||
66 | * invalidate_pmem - flush a pmem range from the cache hierarchy | ||
67 | * @addr: virtual start address | ||
68 | * @size: bytes to invalidate (internally aligned to cache line size) | ||
69 | * | ||
70 | * For platforms that support clearing poison this flushes any poisoned | ||
71 | * ranges out of the cache | ||
72 | */ | ||
73 | static inline void invalidate_pmem(void *addr, size_t size) | ||
74 | { | ||
75 | if (arch_has_pmem_api()) | ||
76 | arch_invalidate_pmem(addr, size); | ||
77 | } | ||
78 | #endif /* __PMEM_H__ */ | 59 | #endif /* __PMEM_H__ */ |