rendered paste body/* old function */static int __init memsize(void){ u32 size = (64 << 20); volatile u32 *addr = (u32 *)KSEG1ADDR(0x14000000 + size - 4); u32 *kernel_end = (u32 *)KSEG1ADDR(CPHYSADDR((u32)&_end)); while (addr > kernel_end) { *addr = (u32)addr; size >>= 1; addr -= size >> 2; } do { addr += size >> 2; if (*addr != (u32)addr) break; size <<= 1; } while (size < (64 << 20)); return size;}/* new one without volatile */int __init memsize(void){ u32 size = (64 << 20); u32 *addr = (u32 *)KSEG1ADDR(0x14000000 + size - 4); u32 *kernel_end = (u32 *)KSEG1ADDR(CPHYSADDR((u32)&_end)); u32 *tmpaddr = addr; while (tmpaddr > kernel_end) { *tmpaddr = (u32)tmpaddr; size >>= 1; tmpaddr -= size >> 2; } do { tmpaddr += size >> 2; if (*tmpaddr != (u32)tmpaddr) break; size <<= 1; } while (size < (64 << 20)); writel(tmpaddr, &addr); return size;}/* the diff Index: target/linux/ar7/files/arch/mips/ar7/memory.c===================================================================--- target/linux/ar7/files/arch/mips/ar7/memory.c (revisione 10748)+++ target/linux/ar7/files/arch/mips/ar7/memory.c (copia locale)@@ -37,22 +37,25 @@ static int __init memsize(void) { u32 size = (64 << 20);- volatile u32 *addr = (u32 *)KSEG1ADDR(0x14000000 + size - 4);+ u32 *addr = (u32 *)KSEG1ADDR(0x14000000 + size - 4); u32 *kernel_end = (u32 *)KSEG1ADDR(CPHYSADDR((u32)&_end));+ u32 *tmpaddr = addr; - while (addr > kernel_end) {- *addr = (u32)addr;+ while (tmpaddr > kernel_end) {+ *tmpaddr = (u32)tmpaddr; size >>= 1;- addr -= size >> 2;+ tmpaddr -= size >> 2; } do {- addr += size >> 2;- if (*addr != (u32)addr)+ tmpaddr += size >> 2;+ if (*tmpaddr != (u32)tmpaddr) break; size <<= 1; } while (size < (64 << 20)); + writel(tmpaddr, &addr);+ return size; } */