From: SUGIOKA T. <su...@it...> - 2001-07-17 03:16:48
|
At 10:55 01/07/17 +0900, Masahiro Abe <m-...@aa...> wrote: >Current arch/sh/mm/cache.c in CVS gives me Oops error on our custom >board, while INIT. (This doesn't happen on SolutionEngine 7750S.) > >Errors are "Unable to handle kernel paging request at virtual address >c0000000", with address varies to c0001000/c0002000/c0003000. Errors >occur at PC=8800c488, which is within __flush_dcache_region. > >copy_user_page and clear_user_page were modified to call pte_clear after >copy_page/clear_page. If I comment this call out, then Oops errors >disappear. (In fact, after comment out, the system is so stable so far >that RTLinux is running reliably.) > >I still don't understand the reason of call to it, but I would like to >know if it is necessary to call it or not. If it is, then what do you >think I should do to kill this Oops error? I hope that following patch will solve the problem. I'm not so sure that this is absolutely correct, but it will be safe anyway. Index: arch/sh/mm/cache.c =================================================================== RCS file: /cvsroot/linuxsh/kernel/arch/sh/mm/cache.c,v retrieving revision 1.43 diff -u -r1.43 cache.c --- arch/sh/mm/cache.c 2001/07/16 05:08:19 1.43 +++ arch/sh/mm/cache.c 2001/07/17 03:06:10 @@ -553,9 +553,9 @@ __flush_tlb_page(get_asid(), p3_addr); update_mmu_cache(NULL, p3_addr, entry); clear_page((void *)p3_addr); + __flush_dcache_region(p3_addr, p3_addr+PAGE_SIZE); pte_clear(pte); restore_flags(flags); - __flush_dcache_region(p3_addr, p3_addr+PAGE_SIZE); } } @@ -592,9 +592,9 @@ __flush_tlb_page(get_asid(), p3_addr); update_mmu_cache(NULL, p3_addr, entry); copy_page((void *)p3_addr, from); + __flush_dcache_region(p3_addr, p3_addr+PAGE_SIZE); pte_clear(pte); restore_flags(flags); - __flush_dcache_region(p3_addr, p3_addr+PAGE_SIZE); } } #endif ---- SUGIOKA Toshinobu |