diff options
Diffstat (limited to 'arch/sparc/include/asm/cacheflush_32.h')
| -rw-r--r-- | arch/sparc/include/asm/cacheflush_32.h | 82 |
1 files changed, 55 insertions, 27 deletions
diff --git a/arch/sparc/include/asm/cacheflush_32.h b/arch/sparc/include/asm/cacheflush_32.h index bb014c24f31..2e468773f25 100644 --- a/arch/sparc/include/asm/cacheflush_32.h +++ b/arch/sparc/include/asm/cacheflush_32.h | |||
| @@ -1,18 +1,56 @@ | |||
| 1 | #ifndef _SPARC_CACHEFLUSH_H | 1 | #ifndef _SPARC_CACHEFLUSH_H |
| 2 | #define _SPARC_CACHEFLUSH_H | 2 | #define _SPARC_CACHEFLUSH_H |
| 3 | 3 | ||
| 4 | #include <asm/cachetlb_32.h> | 4 | #include <linux/mm.h> /* Common for other includes */ |
| 5 | 5 | // #include <linux/kernel.h> from pgalloc.h | |
| 6 | #define flush_cache_all() \ | 6 | // #include <linux/sched.h> from pgalloc.h |
| 7 | sparc32_cachetlb_ops->cache_all() | 7 | |
| 8 | #define flush_cache_mm(mm) \ | 8 | // #include <asm/page.h> |
| 9 | sparc32_cachetlb_ops->cache_mm(mm) | 9 | #include <asm/btfixup.h> |
| 10 | #define flush_cache_dup_mm(mm) \ | 10 | |
| 11 | sparc32_cachetlb_ops->cache_mm(mm) | 11 | /* |
| 12 | #define flush_cache_range(vma,start,end) \ | 12 | * Fine grained cache flushing. |
| 13 | sparc32_cachetlb_ops->cache_range(vma, start, end) | 13 | */ |
| 14 | #define flush_cache_page(vma,addr,pfn) \ | 14 | #ifdef CONFIG_SMP |
| 15 | sparc32_cachetlb_ops->cache_page(vma, addr) | 15 | |
| 16 | BTFIXUPDEF_CALL(void, local_flush_cache_all, void) | ||
| 17 | BTFIXUPDEF_CALL(void, local_flush_cache_mm, struct mm_struct *) | ||
| 18 | BTFIXUPDEF_CALL(void, local_flush_cache_range, struct vm_area_struct *, unsigned long, unsigned long) | ||
| 19 | BTFIXUPDEF_CALL(void, local_flush_cache_page, struct vm_area_struct *, unsigned long) | ||
| 20 | |||
| 21 | #define local_flush_cache_all() BTFIXUP_CALL(local_flush_cache_all)() | ||
| 22 | #define local_flush_cache_mm(mm) BTFIXUP_CALL(local_flush_cache_mm)(mm) | ||
| 23 | #define local_flush_cache_range(vma,start,end) BTFIXUP_CALL(local_flush_cache_range)(vma,start,end) | ||
| 24 | #define local_flush_cache_page(vma,addr) BTFIXUP_CALL(local_flush_cache_page)(vma,addr) | ||
| 25 | |||
| 26 | BTFIXUPDEF_CALL(void, local_flush_page_to_ram, unsigned long) | ||
| 27 | BTFIXUPDEF_CALL(void, local_flush_sig_insns, struct mm_struct *, unsigned long) | ||
| 28 | |||
| 29 | #define local_flush_page_to_ram(addr) BTFIXUP_CALL(local_flush_page_to_ram)(addr) | ||
| 30 | #define local_flush_sig_insns(mm,insn_addr) BTFIXUP_CALL(local_flush_sig_insns)(mm,insn_addr) | ||
| 31 | |||
| 32 | extern void smp_flush_cache_all(void); | ||
| 33 | extern void smp_flush_cache_mm(struct mm_struct *mm); | ||
| 34 | extern void smp_flush_cache_range(struct vm_area_struct *vma, | ||
| 35 | unsigned long start, | ||
| 36 | unsigned long end); | ||
| 37 | extern void smp_flush_cache_page(struct vm_area_struct *vma, unsigned long page); | ||
| 38 | |||
| 39 | extern void smp_flush_page_to_ram(unsigned long page); | ||
| 40 | extern void smp_flush_sig_insns(struct mm_struct *mm, unsigned long insn_addr); | ||
| 41 | |||
| 42 | #endif /* CONFIG_SMP */ | ||
| 43 | |||
| 44 | BTFIXUPDEF_CALL(void, flush_cache_all, void) | ||
| 45 | BTFIXUPDEF_CALL(void, flush_cache_mm, struct mm_struct *) | ||
| 46 | BTFIXUPDEF_CALL(void, flush_cache_range, struct vm_area_struct *, unsigned long, unsigned long) | ||
| 47 | BTFIXUPDEF_CALL(void, flush_cache_page, struct vm_area_struct *, unsigned long) | ||
| 48 | |||
| 49 | #define flush_cache_all() BTFIXUP_CALL(flush_cache_all)() | ||
| 50 | #define flush_cache_mm(mm) BTFIXUP_CALL(flush_cache_mm)(mm) | ||
| 51 | #define flush_cache_dup_mm(mm) BTFIXUP_CALL(flush_cache_mm)(mm) | ||
| 52 | #define flush_cache_range(vma,start,end) BTFIXUP_CALL(flush_cache_range)(vma,start,end) | ||
| 53 | #define flush_cache_page(vma,addr,pfn) BTFIXUP_CALL(flush_cache_page)(vma,addr) | ||
| 16 | #define flush_icache_range(start, end) do { } while (0) | 54 | #define flush_icache_range(start, end) do { } while (0) |
| 17 | #define flush_icache_page(vma, pg) do { } while (0) | 55 | #define flush_icache_page(vma, pg) do { } while (0) |
| 18 | 56 | ||
| @@ -29,12 +67,11 @@ | |||
| 29 | memcpy(dst, src, len); \ | 67 | memcpy(dst, src, len); \ |
| 30 | } while (0) | 68 | } while (0) |
| 31 | 69 | ||
| 32 | #define __flush_page_to_ram(addr) \ | 70 | BTFIXUPDEF_CALL(void, __flush_page_to_ram, unsigned long) |
| 33 | sparc32_cachetlb_ops->page_to_ram(addr) | 71 | BTFIXUPDEF_CALL(void, flush_sig_insns, struct mm_struct *, unsigned long) |
| 34 | #define flush_sig_insns(mm,insn_addr) \ | 72 | |
| 35 | sparc32_cachetlb_ops->sig_insns(mm, insn_addr) | 73 | #define __flush_page_to_ram(addr) BTFIXUP_CALL(__flush_page_to_ram)(addr) |
| 36 | #define flush_page_for_dma(addr) \ | 74 | #define flush_sig_insns(mm,insn_addr) BTFIXUP_CALL(flush_sig_insns)(mm,insn_addr) |
| 37 | sparc32_cachetlb_ops->page_for_dma(addr) | ||
| 38 | 75 | ||
| 39 | extern void sparc_flush_page_to_ram(struct page *page); | 76 | extern void sparc_flush_page_to_ram(struct page *page); |
| 40 | 77 | ||
| @@ -46,13 +83,4 @@ extern void sparc_flush_page_to_ram(struct page *page); | |||
| 46 | #define flush_cache_vmap(start, end) flush_cache_all() | 83 | #define flush_cache_vmap(start, end) flush_cache_all() |
| 47 | #define flush_cache_vunmap(start, end) flush_cache_all() | 84 | #define flush_cache_vunmap(start, end) flush_cache_all() |
| 48 | 85 | ||
| 49 | /* When a context switch happens we must flush all user windows so that | ||
| 50 | * the windows of the current process are flushed onto its stack. This | ||
| 51 | * way the windows are all clean for the next process and the stack | ||
| 52 | * frames are up to date. | ||
| 53 | */ | ||
| 54 | extern void flush_user_windows(void); | ||
| 55 | extern void kill_user_windows(void); | ||
| 56 | extern void flushw_all(void); | ||
| 57 | |||
| 58 | #endif /* _SPARC_CACHEFLUSH_H */ | 86 | #endif /* _SPARC_CACHEFLUSH_H */ |
