diff options
Diffstat (limited to 'arch')
-rw-r--r-- | arch/x86/include/asm/pmem.h | 21 | ||||
-rw-r--r-- | arch/x86/lib/usercopy_64.c | 6 |
2 files changed, 6 insertions, 21 deletions
diff --git a/arch/x86/include/asm/pmem.h b/arch/x86/include/asm/pmem.h index f4c119d253f3..4759a179aa52 100644 --- a/arch/x86/include/asm/pmem.h +++ b/arch/x86/include/asm/pmem.h | |||
@@ -44,27 +44,6 @@ static inline void arch_memcpy_to_pmem(void *dst, const void *src, size_t n) | |||
44 | BUG(); | 44 | BUG(); |
45 | } | 45 | } |
46 | 46 | ||
47 | /** | ||
48 | * arch_wb_cache_pmem - write back a cache range with CLWB | ||
49 | * @vaddr: virtual start address | ||
50 | * @size: number of bytes to write back | ||
51 | * | ||
52 | * Write back a cache range using the CLWB (cache line write back) | ||
53 | * instruction. Note that @size is internally rounded up to be cache | ||
54 | * line size aligned. | ||
55 | */ | ||
56 | static inline void arch_wb_cache_pmem(void *addr, size_t size) | ||
57 | { | ||
58 | u16 x86_clflush_size = boot_cpu_data.x86_clflush_size; | ||
59 | unsigned long clflush_mask = x86_clflush_size - 1; | ||
60 | void *vend = addr + size; | ||
61 | void *p; | ||
62 | |||
63 | for (p = (void *)((unsigned long)addr & ~clflush_mask); | ||
64 | p < vend; p += x86_clflush_size) | ||
65 | clwb(p); | ||
66 | } | ||
67 | |||
68 | static inline void arch_invalidate_pmem(void *addr, size_t size) | 47 | static inline void arch_invalidate_pmem(void *addr, size_t size) |
69 | { | 48 | { |
70 | clflush_cache_range(addr, size); | 49 | clflush_cache_range(addr, size); |
diff --git a/arch/x86/lib/usercopy_64.c b/arch/x86/lib/usercopy_64.c index f42d2fd86ca3..75d3776123cc 100644 --- a/arch/x86/lib/usercopy_64.c +++ b/arch/x86/lib/usercopy_64.c | |||
@@ -97,6 +97,12 @@ static void clean_cache_range(void *addr, size_t size) | |||
97 | clwb(p); | 97 | clwb(p); |
98 | } | 98 | } |
99 | 99 | ||
100 | void arch_wb_cache_pmem(void *addr, size_t size) | ||
101 | { | ||
102 | clean_cache_range(addr, size); | ||
103 | } | ||
104 | EXPORT_SYMBOL_GPL(arch_wb_cache_pmem); | ||
105 | |||
100 | long __copy_user_flushcache(void *dst, const void __user *src, unsigned size) | 106 | long __copy_user_flushcache(void *dst, const void __user *src, unsigned size) |
101 | { | 107 | { |
102 | unsigned long flushed, dest = (unsigned long) dst; | 108 | unsigned long flushed, dest = (unsigned long) dst; |