From: David W. <dw...@in...> - 2001-08-24 15:31:24
|
Oops. $ cvs diff -w ChangeLog arch/sh/mm/cache-sh3.c Index: ChangeLog =================================================================== RCS file: /cvsroot/linuxsh/kernel/ChangeLog,v retrieving revision 1.334 diff -u -w -r1.334 ChangeLog --- ChangeLog 2001/08/24 12:38:19 1.334 +++ ChangeLog 2001/08/24 14:41:18 @@ -1,5 +1,8 @@ 2001-08-24 David Woodhouse <dw...@in...> + * arch/sh/mm/cache-sh3.c: We were missing a loop over the ways in + __flush_wback_region(). Also disable interrupts between reading + an entry and writing it back modified. * arch/sh/kernel/pcibios.c: Generic versions of five pcibios_xxx() functions which can be shared between platforms. * arch/sh/kernel/pci_st40.c: Use $1. Index: arch/sh/mm/cache-sh3.c =================================================================== RCS file: /cvsroot/linuxsh/kernel/arch/sh/mm/cache-sh3.c,v retrieving revision 1.4 diff -u -w -r1.4 cache-sh3.c --- arch/sh/mm/cache-sh3.c 2001/08/10 14:13:13 1.4 +++ arch/sh/mm/cache-sh3.c 2001/08/24 14:41:18 @@ -156,24 +156,30 @@ { unsigned long v, j; unsigned long begin, end; + unsigned long flags; begin = (unsigned long)start & ~(L1_CACHE_BYTES-1); end = ((unsigned long)start + size + L1_CACHE_BYTES-1) & ~(L1_CACHE_BYTES-1); for (v = begin; v < end; v+=L1_CACHE_BYTES) { + for (j=0; j<CACHE_OC_NUM_WAYS; j++) { unsigned long data, addr, p; p = __pa(v); addr = CACHE_OC_ADDRESS_ARRAY|(j<<CACHE_OC_WAY_SHIFT)| (v&CACHE_OC_ENTRY_MASK); + save_and_cli(flags); data = ctrl_inl(addr); if ((data & CACHE_PHYSADDR_MASK) == (p & CACHE_PHYSADDR_MASK)) { data &= ~CACHE_UPDATED; ctrl_outl(data, addr); + restore_flags(flags); break; + } + restore_flags(flags); } } } -- dwmw2 |