diff options
author | James Bottomley <James.Bottomley@suse.de> | 2011-02-10 12:20:53 -0500 |
---|---|---|
committer | James Bottomley <James.Bottomley@suse.de> | 2011-02-10 12:20:53 -0500 |
commit | 2c250ad23d438fa56e1beded374e44dc565c6c47 (patch) | |
tree | 8f7e115c81c066134e48e998cb9b7380ff43f21c /arch/parisc/include | |
parent | e9a623be5c984a1e344b2bb94e36e592f2491de6 (diff) | |
parent | 9804c9eaeacfe78651052c5ddff31099f60ef78c (diff) |
Merge branch 'fixes' into for-next
Diffstat (limited to 'arch/parisc/include')
-rw-r--r-- | arch/parisc/include/asm/cacheflush.h | 24 |
1 files changed, 17 insertions, 7 deletions
diff --git a/arch/parisc/include/asm/cacheflush.h b/arch/parisc/include/asm/cacheflush.h index dc9286a4dcc7..d18328b3f938 100644 --- a/arch/parisc/include/asm/cacheflush.h +++ b/arch/parisc/include/asm/cacheflush.h | |||
@@ -35,6 +35,13 @@ void flush_cache_all_local(void); | |||
35 | void flush_cache_all(void); | 35 | void flush_cache_all(void); |
36 | void flush_cache_mm(struct mm_struct *mm); | 36 | void flush_cache_mm(struct mm_struct *mm); |
37 | 37 | ||
38 | #define ARCH_HAS_FLUSH_KERNEL_DCACHE_PAGE | ||
39 | void flush_kernel_dcache_page_addr(void *addr); | ||
40 | static inline void flush_kernel_dcache_page(struct page *page) | ||
41 | { | ||
42 | flush_kernel_dcache_page_addr(page_address(page)); | ||
43 | } | ||
44 | |||
38 | #define flush_kernel_dcache_range(start,size) \ | 45 | #define flush_kernel_dcache_range(start,size) \ |
39 | flush_kernel_dcache_range_asm((start), (start)+(size)); | 46 | flush_kernel_dcache_range_asm((start), (start)+(size)); |
40 | /* vmap range flushes and invalidates. Architecturally, we don't need | 47 | /* vmap range flushes and invalidates. Architecturally, we don't need |
@@ -48,6 +55,16 @@ static inline void flush_kernel_vmap_range(void *vaddr, int size) | |||
48 | } | 55 | } |
49 | static inline void invalidate_kernel_vmap_range(void *vaddr, int size) | 56 | static inline void invalidate_kernel_vmap_range(void *vaddr, int size) |
50 | { | 57 | { |
58 | unsigned long start = (unsigned long)vaddr; | ||
59 | void *cursor = vaddr; | ||
60 | |||
61 | for ( ; cursor < vaddr + size; cursor += PAGE_SIZE) { | ||
62 | struct page *page = vmalloc_to_page(cursor); | ||
63 | |||
64 | if (test_and_clear_bit(PG_dcache_dirty, &page->flags)) | ||
65 | flush_kernel_dcache_page(page); | ||
66 | } | ||
67 | flush_kernel_dcache_range_asm(start, start + size); | ||
51 | } | 68 | } |
52 | 69 | ||
53 | #define flush_cache_vmap(start, end) flush_cache_all() | 70 | #define flush_cache_vmap(start, end) flush_cache_all() |
@@ -99,13 +116,6 @@ flush_anon_page(struct vm_area_struct *vma, struct page *page, unsigned long vma | |||
99 | flush_dcache_page_asm(page_to_phys(page), vmaddr); | 116 | flush_dcache_page_asm(page_to_phys(page), vmaddr); |
100 | } | 117 | } |
101 | 118 | ||
102 | #define ARCH_HAS_FLUSH_KERNEL_DCACHE_PAGE | ||
103 | void flush_kernel_dcache_page_addr(void *addr); | ||
104 | static inline void flush_kernel_dcache_page(struct page *page) | ||
105 | { | ||
106 | flush_kernel_dcache_page_addr(page_address(page)); | ||
107 | } | ||
108 | |||
109 | #ifdef CONFIG_DEBUG_RODATA | 119 | #ifdef CONFIG_DEBUG_RODATA |
110 | void mark_rodata_ro(void); | 120 | void mark_rodata_ro(void); |
111 | #endif | 121 | #endif |