From: NIIBE Y. <gn...@m1...> - 2002-03-22 01:28:54
|
Follow up to 2.5.5. 2002-03-22 NIIBE Yutaka <gn...@m1...> * arch/sh/mm/cache-sh4.c (flush_icache_user_range): New function. * include/asm-sh/pgtable.h (flush_icache_user_range): Declared. * kernel/ptrace.c (access_process_vm): Remove flush_dcache_page as we do flush_icache_user_range here. (No difference now.) Index: arch/sh/mm/cache-sh4.c =================================================================== RCS file: /cvsroot/linuxsh/linux/arch/sh/mm/cache-sh4.c,v retrieving revision 1.4 diff -u -3 -p -r1.4 cache-sh4.c --- arch/sh/mm/cache-sh4.c 19 Mar 2002 23:48:06 -0000 1.4 +++ arch/sh/mm/cache-sh4.c 22 Mar 2002 01:26:42 -0000 @@ -1,8 +1,8 @@ /* $Id: cache-sh4.c,v 1.4 2002/03/19 23:48:06 gniibe Exp $ * - * linux/arch/sh/mm/cache.c + * linux/arch/sh/mm/cache-sh4.c * - * Copyright (C) 1999, 2000 Niibe Yutaka + * Copyright (C) 1999, 2000, 2002 Niibe Yutaka * Copyright (C) 2001, 2002 Paul Mundt */ @@ -420,6 +420,22 @@ void flush_cache_page(struct vm_area_str } back_to_P1(); restore_flags(flags); +} + +/* + * flush_icache_user_range + * @vma: VMA of the process + * @page: page + * @addr: U0 address + * @len: length of the range (< page size) + */ +void flush_icache_user_range(struct vm_area_struct *vma, + struct page *page, unsigned long addr, int len) +{ + if (test_bit(PG_mapped, &page->flags)) { + __flush_icache_page(PHYSADDR(page_address(page))); + __flush_dcache_page(PHYSADDR(page_address(page))); + } } /* Index: include/asm-sh/pgtable.h =================================================================== RCS file: /cvsroot/linuxsh/linux/include/asm-sh/pgtable.h,v retrieving revision 1.5 diff -u -3 -p -r1.5 pgtable.h --- include/asm-sh/pgtable.h 22 Mar 2002 00:59:15 -0000 1.5 +++ include/asm-sh/pgtable.h 22 Mar 2002 01:26:42 -0000 @@ -62,10 +62,12 @@ extern void flush_cache_page(struct vm_a extern void flush_dcache_page(struct page *pg); extern void flush_icache_range(unsigned long start, unsigned long end); extern void flush_cache_sigtramp(unsigned long addr); +extern void flush_icache_user_range(struct vm_area_struct *vma, + struct page *page, unsigned long addr, + int len); #define flush_page_to_ram(page) do { } while (0) #define flush_icache_page(vma,pg) do { } while (0) -#define flush_icache_user_range(vma,pg,adr,len) do { } while (0) /* Initialization of P3 area for copy_user_page */ extern void p3_cache_init(void); Index: kernel/ptrace.c =================================================================== RCS file: /cvsroot/linuxsh/linux/kernel/ptrace.c,v retrieving revision 1.5 diff -u -3 -p -r1.5 ptrace.c --- kernel/ptrace.c 22 Mar 2002 00:59:16 -0000 1.5 +++ kernel/ptrace.c 22 Mar 2002 01:26:42 -0000 @@ -150,7 +150,6 @@ int access_process_vm(struct task_struct maddr = kmap(page); if (write) { memcpy(maddr + offset, buf, bytes); - flush_dcache_page(page); flush_page_to_ram(page); flush_icache_user_range(vma, page, addr, bytes); } else { |