Author: tbm Date: Sat Mar 24 16:02:50 2007 New Revision: 8391 Added: dists/etch/linux-2.6/debian/patches/bugfix/mips/flush_anon_page.patch Modified: dists/etch/linux-2.6/debian/changelog dists/etch/linux-2.6/debian/patches/series/12 Log: mips: Implement flush_anon_page() to fix data corruption issues
Modified: dists/etch/linux-2.6/debian/changelog ============================================================================== --- dists/etch/linux-2.6/debian/changelog (original) +++ dists/etch/linux-2.6/debian/changelog Sat Mar 24 16:02:50 2007 @@ -48,6 +48,10 @@ [ Bastian Blank ] * xen: Fix highmem dma copy code. (closes: #415805) + [ Martin Michlmayr ] + * mips: Implement flush_anon_page() to fix data corruption issues + (Ralf Baechle). + -- Bastian Blank <[EMAIL PROTECTED]> Sat, 24 Mar 2007 08:06:27 +0100 linux-2.6 (2.6.18.dfsg.1-11) unstable; urgency=low Added: dists/etch/linux-2.6/debian/patches/bugfix/mips/flush_anon_page.patch ============================================================================== --- (empty file) +++ dists/etch/linux-2.6/debian/patches/bugfix/mips/flush_anon_page.patch Sat Mar 24 16:02:50 2007 @@ -0,0 +1,102 @@ +Author: Ralf Baechle <[EMAIL PROTECTED]> Fri Mar 23 21:36:37 2007 +0000 +Commit: 8f26705aefa297c71275e59fc46fbcadf80e0078 +Gitweb: http://www.linux-mips.org/g/linux/8f26705a +Branch: linux-2.6.18-stable + +Signed-off-by: Ralf Baechle <[EMAIL PROTECTED]> +(cherry picked from commit 2a58ce5784b74b09a4c306a60c3c3ba3f3376ee7) + +--- + + arch/mips/mm/cache.c | 16 +++++++++++++++- + arch/mips/mm/init.c | 4 ++-- + include/asm-mips/cacheflush.h | 13 +++++++++++++ + 3 files changed, 30 insertions(+), 3 deletions(-) + +diff --git a/arch/mips/mm/cache.c b/arch/mips/mm/cache.c +index f94e300..6244b8d 100644 +--- a/arch/mips/mm/cache.c ++++ b/arch/mips/mm/cache.c +@@ -3,7 +3,8 @@ + * License. See the file "COPYING" in the main directory of this archive + * for more details. + * +- * Copyright (C) 1994 - 2003 by Ralf Baechle ++ * Copyright (C) 1994 - 2003, 07 by Ralf Baechle ([EMAIL PROTECTED]) ++ * Copyright (C) 2007 MIPS Technologies, Inc. + */ + #include <linux/init.h> + #include <linux/kernel.h> +@@ -89,6 +90,19 @@ void __flush_dcache_page(struct page *page) + + EXPORT_SYMBOL(__flush_dcache_page); + ++void __flush_anon_page(struct page *page, unsigned long vmaddr) ++{ ++ if (pages_do_alias((unsigned long)page_address(page), vmaddr)) { ++ void *kaddr; ++ ++ kaddr = kmap_coherent(page, vmaddr); ++ flush_data_cache_page((unsigned long)kaddr); ++ kunmap_coherent(kaddr); ++ } ++} ++ ++EXPORT_SYMBOL(__flush_anon_page); ++ + void __update_cache(struct vm_area_struct *vma, unsigned long address, + pte_t pte) + { +diff --git a/arch/mips/mm/init.c b/arch/mips/mm/init.c +index b3d3aee..965870b 100644 +--- a/arch/mips/mm/init.c ++++ b/arch/mips/mm/init.c +@@ -130,7 +130,7 @@ static void __init kmap_coherent_init(void) + static inline void kmap_coherent_init(void) {} + #endif + +-static inline void *kmap_coherent(struct page *page, unsigned long addr) ++void *kmap_coherent(struct page *page, unsigned long addr) + { + enum fixed_addresses idx; + unsigned long vaddr, flags, entrylo; +@@ -184,7 +184,7 @@ static inline void *kmap_coherent(struct page *page, unsigned long addr) + + #define UNIQUE_ENTRYHI(idx) (CKSEG0 + ((idx) << (PAGE_SHIFT + 1))) + +-static inline void kunmap_coherent(struct page *page) ++void kunmap_coherent(struct page *page) + { + #ifndef CONFIG_MIPS_MT_SMTC + unsigned int wired; +diff --git a/include/asm-mips/cacheflush.h b/include/asm-mips/cacheflush.h +index d10517c..d45c2bc 100644 +--- a/include/asm-mips/cacheflush.h ++++ b/include/asm-mips/cacheflush.h +@@ -46,8 +46,18 @@ static inline void flush_dcache_page(struct page *page) + #define flush_dcache_mmap_lock(mapping) do { } while (0) + #define flush_dcache_mmap_unlock(mapping) do { } while (0) + ++#define ARCH_HAS_FLUSH_ANON_PAGE ++static inline void flush_anon_page(struct vm_area_struct *vma, struct page *page, unsigned long vmaddr) ++{ ++ extern void __flush_anon_page(struct page *, unsigned long); ++ ++ if (cpu_has_dc_aliases && PageAnon(page)) ++ __flush_anon_page(page, vmaddr); ++} ++ + extern void (*__flush_icache_page)(struct vm_area_struct *vma, + struct page *page); ++ + static inline void flush_icache_page(struct vm_area_struct *vma, + struct page *page) + { +@@ -86,4 +96,7 @@ extern void (*flush_data_cache_page)(unsigned long addr); + /* Run kernel code uncached, useful for cache probing functions. */ + unsigned long __init run_uncached(void *func); + ++extern void *kmap_coherent(struct page *page, unsigned long addr); ++extern void kunmap_coherent(struct page *page); ++ + #endif /* _ASM_CACHEFLUSH_H */ Modified: dists/etch/linux-2.6/debian/patches/series/12 ============================================================================== --- dists/etch/linux-2.6/debian/patches/series/12 (original) +++ dists/etch/linux-2.6/debian/patches/series/12 Sat Mar 24 16:02:50 2007 @@ -7,3 +7,4 @@ + bugfix/ipv6_getsockopt_sticky-null-opt.patch + bugfix/sparc/tcp-sendmsg-t12k-oops-fix.patch + bugfix/bnx2_tx_avail-off-by-1-fix.patch ++ bugfix/mips/flush_anon_page.patch _______________________________________________ Kernel-svn-changes mailing list [email protected] http://lists.alioth.debian.org/mailman/listinfo/kernel-svn-changes

