X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=include%2Fasm-sparc64%2Fcacheflush.h;h=122e4058dd9ec745ecc3645c402cc1fd0c674dae;hb=97bf2856c6014879bd04983a3e9dfcdac1e7fe85;hp=ab3c4ff767d0f3941eb7e6ea5dcfecf6a2c4b79e;hpb=5273a3df6485dc2ad6aa7ddd441b9a21970f003b;p=linux-2.6.git diff --git a/include/asm-sparc64/cacheflush.h b/include/asm-sparc64/cacheflush.h index ab3c4ff76..122e4058d 100644 --- a/include/asm-sparc64/cacheflush.h +++ b/include/asm-sparc64/cacheflush.h @@ -1,7 +1,10 @@ #ifndef _SPARC64_CACHEFLUSH_H #define _SPARC64_CACHEFLUSH_H -#include +#include + +#ifndef __ASSEMBLY__ + #include /* Cache flush operations. */ @@ -9,8 +12,10 @@ /* These are the same regardless of whether this is an SMP kernel or not. */ #define flush_cache_mm(__mm) \ do { if ((__mm) == current->mm) flushw_user(); } while(0) -extern void flush_cache_range(struct vm_area_struct *, unsigned long, unsigned long); -#define flush_cache_page(vma, page) \ +#define flush_cache_dup_mm(mm) flush_cache_mm(mm) +#define flush_cache_range(vma, start, end) \ + flush_cache_mm((vma)->vm_mm) +#define flush_cache_page(vma, page, pfn) \ flush_cache_mm((vma)->vm_mm) /* @@ -19,9 +24,9 @@ extern void flush_cache_range(struct vm_area_struct *, unsigned long, unsigned l * module load, so we need this. */ extern void flush_icache_range(unsigned long start, unsigned long end); +extern void __flush_icache_page(unsigned long); extern void __flush_dcache_page(void *addr, int flush_icache); -extern void __flush_icache_page(unsigned long); extern void flush_dcache_page_impl(struct page *page); #ifdef CONFIG_SMP extern void smp_flush_dcache_page_impl(struct page *page, int cpu); @@ -32,18 +37,40 @@ extern void flush_dcache_page_all(struct mm_struct *mm, struct page *page); #endif extern void __flush_dcache_range(unsigned long start, unsigned long end); +extern void flush_dcache_page(struct page *page); #define flush_icache_page(vma, pg) do { } while(0) #define flush_icache_user_range(vma,pg,adr,len) do { } while (0) -#define copy_to_user_page(vma, page, vaddr, dst, src, len) \ - memcpy(dst, src, len) -#define copy_from_user_page(vma, page, vaddr, dst, src, len) \ - memcpy(dst, src, len) +extern void flush_ptrace_access(struct vm_area_struct *, struct page *, + unsigned long uaddr, void *kaddr, + unsigned long len, int write); -extern void flush_dcache_page(struct page *page); +#define copy_to_user_page(vma, page, vaddr, dst, src, len) \ + do { \ + flush_cache_page(vma, vaddr, page_to_pfn(page)); \ + memcpy(dst, src, len); \ + flush_ptrace_access(vma, page, vaddr, src, len, 0); \ + } while (0) + +#define copy_from_user_page(vma, page, vaddr, dst, src, len) \ + do { \ + flush_cache_page(vma, vaddr, page_to_pfn(page)); \ + memcpy(dst, src, len); \ + flush_ptrace_access(vma, page, vaddr, dst, len, 1); \ + } while (0) + +#define flush_dcache_mmap_lock(mapping) do { } while (0) +#define flush_dcache_mmap_unlock(mapping) do { } while (0) #define flush_cache_vmap(start, end) do { } while (0) #define flush_cache_vunmap(start, end) do { } while (0) +#ifdef CONFIG_DEBUG_PAGEALLOC +/* internal debugging function */ +void kernel_map_pages(struct page *page, int numpages, int enable); +#endif + +#endif /* !__ASSEMBLY__ */ + #endif /* _SPARC64_CACHEFLUSH_H */