Loading arch/mips/mm/tlbex.c +71 −88 Original line number Diff line number Diff line Loading @@ -5,7 +5,7 @@ * * Synthesize TLB refill handlers at runtime. * * Copyright (C) 2004,2005 by Thiemo Seufer * Copyright (C) 2004,2005,2006 by Thiemo Seufer * Copyright (C) 2005 Maciej W. Rozycki * Copyright (C) 2006 Ralf Baechle (ralf@linux-mips.org) * Loading Loading @@ -35,8 +35,6 @@ #include <asm/smp.h> #include <asm/war.h> /* #define DEBUG_TLB */ static __init int __attribute__((unused)) r45k_bvahwbug(void) { /* XXX: We should probe for the presence of this bug, but we don't. */ Loading Loading @@ -728,6 +726,7 @@ static void __init build_r3000_tlb_refill_handler(void) { long pgdc = (long)pgd_current; u32 *p; int i; memset(tlb_handler, 0, sizeof(tlb_handler)); p = tlb_handler; Loading @@ -753,16 +752,14 @@ static void __init build_r3000_tlb_refill_handler(void) if (p > tlb_handler + 32) panic("TLB refill handler space exceeded"); printk("Synthesized TLB refill handler (%u instructions).\n", pr_info("Synthesized TLB refill handler (%u instructions).\n", (unsigned int)(p - tlb_handler)); #ifdef DEBUG_TLB { int i; pr_debug("\t.set push\n"); pr_debug("\t.set noreorder\n"); for (i = 0; i < (p - tlb_handler); i++) printk("%08x\n", tlb_handler[i]); } #endif pr_debug("\t.word 0x%08x\n", tlb_handler[i]); pr_debug("\t.set pop\n"); memcpy((void *)ebase, tlb_handler, 0x80); } Loading Loading @@ -1175,6 +1172,7 @@ static void __init build_r4000_tlb_refill_handler(void) struct reloc *r = relocs; u32 *f; unsigned int final_len; int i; memset(tlb_handler, 0, sizeof(tlb_handler)); memset(labels, 0, sizeof(labels)); Loading Loading @@ -1272,13 +1270,9 @@ static void __init build_r4000_tlb_refill_handler(void) #endif /* CONFIG_64BIT */ resolve_relocs(relocs, labels); printk("Synthesized TLB refill handler (%u instructions).\n", pr_info("Synthesized TLB refill handler (%u instructions).\n", final_len); #ifdef DEBUG_TLB { int i; f = final_handler; #ifdef CONFIG_64BIT if (final_len > 32) Loading @@ -1286,10 +1280,11 @@ static void __init build_r4000_tlb_refill_handler(void) else f = final_handler + 32; #endif /* CONFIG_64BIT */ pr_debug("\t.set push\n"); pr_debug("\t.set noreorder\n"); for (i = 0; i < final_len; i++) printk("%08x\n", f[i]); } #endif pr_debug("\t.word 0x%08x\n", f[i]); pr_debug("\t.set pop\n"); memcpy((void *)ebase, final_handler, 0x100); } Loading Loading @@ -1522,6 +1517,7 @@ static void __init build_r3000_tlb_load_handler(void) u32 *p = handle_tlbl; struct label *l = labels; struct reloc *r = relocs; int i; memset(handle_tlbl, 0, sizeof(handle_tlbl)); memset(labels, 0, sizeof(labels)); Loading @@ -1541,17 +1537,14 @@ static void __init build_r3000_tlb_load_handler(void) panic("TLB load handler fastpath space exceeded"); resolve_relocs(relocs, labels); printk("Synthesized TLB load handler fastpath (%u instructions).\n", pr_info("Synthesized TLB load handler fastpath (%u instructions).\n", (unsigned int)(p - handle_tlbl)); #ifdef DEBUG_TLB { int i; pr_debug("\t.set push\n"); pr_debug("\t.set noreorder\n"); for (i = 0; i < (p - handle_tlbl); i++) printk("%08x\n", handle_tlbl[i]); } #endif pr_debug("\t.word 0x%08x\n", handle_tlbl[i]); pr_debug("\t.set pop\n"); } static void __init build_r3000_tlb_store_handler(void) Loading @@ -1559,6 +1552,7 @@ static void __init build_r3000_tlb_store_handler(void) u32 *p = handle_tlbs; struct label *l = labels; struct reloc *r = relocs; int i; memset(handle_tlbs, 0, sizeof(handle_tlbs)); memset(labels, 0, sizeof(labels)); Loading @@ -1578,17 +1572,14 @@ static void __init build_r3000_tlb_store_handler(void) panic("TLB store handler fastpath space exceeded"); resolve_relocs(relocs, labels); printk("Synthesized TLB store handler fastpath (%u instructions).\n", pr_info("Synthesized TLB store handler fastpath (%u instructions).\n", (unsigned int)(p - handle_tlbs)); #ifdef DEBUG_TLB { int i; pr_debug("\t.set push\n"); pr_debug("\t.set noreorder\n"); for (i = 0; i < (p - handle_tlbs); i++) printk("%08x\n", handle_tlbs[i]); } #endif pr_debug("\t.word 0x%08x\n", handle_tlbs[i]); pr_debug("\t.set pop\n"); } static void __init build_r3000_tlb_modify_handler(void) Loading @@ -1596,6 +1587,7 @@ static void __init build_r3000_tlb_modify_handler(void) u32 *p = handle_tlbm; struct label *l = labels; struct reloc *r = relocs; int i; memset(handle_tlbm, 0, sizeof(handle_tlbm)); memset(labels, 0, sizeof(labels)); Loading @@ -1615,17 +1607,14 @@ static void __init build_r3000_tlb_modify_handler(void) panic("TLB modify handler fastpath space exceeded"); resolve_relocs(relocs, labels); printk("Synthesized TLB modify handler fastpath (%u instructions).\n", pr_info("Synthesized TLB modify handler fastpath (%u instructions).\n", (unsigned int)(p - handle_tlbm)); #ifdef DEBUG_TLB { int i; pr_debug("\t.set push\n"); pr_debug("\t.set noreorder\n"); for (i = 0; i < (p - handle_tlbm); i++) printk("%08x\n", handle_tlbm[i]); } #endif pr_debug("\t.word 0x%08x\n", handle_tlbm[i]); pr_debug("\t.set pop\n"); } /* Loading Loading @@ -1677,6 +1666,7 @@ static void __init build_r4000_tlb_load_handler(void) u32 *p = handle_tlbl; struct label *l = labels; struct reloc *r = relocs; int i; memset(handle_tlbl, 0, sizeof(handle_tlbl)); memset(labels, 0, sizeof(labels)); Loading Loading @@ -1704,17 +1694,14 @@ static void __init build_r4000_tlb_load_handler(void) panic("TLB load handler fastpath space exceeded"); resolve_relocs(relocs, labels); printk("Synthesized TLB load handler fastpath (%u instructions).\n", pr_info("Synthesized TLB load handler fastpath (%u instructions).\n", (unsigned int)(p - handle_tlbl)); #ifdef DEBUG_TLB { int i; pr_debug("\t.set push\n"); pr_debug("\t.set noreorder\n"); for (i = 0; i < (p - handle_tlbl); i++) printk("%08x\n", handle_tlbl[i]); } #endif pr_debug("\t.word 0x%08x\n", handle_tlbl[i]); pr_debug("\t.set pop\n"); } static void __init build_r4000_tlb_store_handler(void) Loading @@ -1722,6 +1709,7 @@ static void __init build_r4000_tlb_store_handler(void) u32 *p = handle_tlbs; struct label *l = labels; struct reloc *r = relocs; int i; memset(handle_tlbs, 0, sizeof(handle_tlbs)); memset(labels, 0, sizeof(labels)); Loading @@ -1740,17 +1728,14 @@ static void __init build_r4000_tlb_store_handler(void) panic("TLB store handler fastpath space exceeded"); resolve_relocs(relocs, labels); printk("Synthesized TLB store handler fastpath (%u instructions).\n", pr_info("Synthesized TLB store handler fastpath (%u instructions).\n", (unsigned int)(p - handle_tlbs)); #ifdef DEBUG_TLB { int i; pr_debug("\t.set push\n"); pr_debug("\t.set noreorder\n"); for (i = 0; i < (p - handle_tlbs); i++) printk("%08x\n", handle_tlbs[i]); } #endif pr_debug("\t.word 0x%08x\n", handle_tlbs[i]); pr_debug("\t.set pop\n"); } static void __init build_r4000_tlb_modify_handler(void) Loading @@ -1758,6 +1743,7 @@ static void __init build_r4000_tlb_modify_handler(void) u32 *p = handle_tlbm; struct label *l = labels; struct reloc *r = relocs; int i; memset(handle_tlbm, 0, sizeof(handle_tlbm)); memset(labels, 0, sizeof(labels)); Loading @@ -1777,17 +1763,14 @@ static void __init build_r4000_tlb_modify_handler(void) panic("TLB modify handler fastpath space exceeded"); resolve_relocs(relocs, labels); printk("Synthesized TLB modify handler fastpath (%u instructions).\n", pr_info("Synthesized TLB modify handler fastpath (%u instructions).\n", (unsigned int)(p - handle_tlbm)); #ifdef DEBUG_TLB { int i; pr_debug("\t.set push\n"); pr_debug("\t.set noreorder\n"); for (i = 0; i < (p - handle_tlbm); i++) printk("%08x\n", handle_tlbm[i]); } #endif pr_debug("\t.word 0x%08x\n", handle_tlbm[i]); pr_debug("\t.set pop\n"); } void __init build_tlb_refill_handler(void) Loading Loading
arch/mips/mm/tlbex.c +71 −88 Original line number Diff line number Diff line Loading @@ -5,7 +5,7 @@ * * Synthesize TLB refill handlers at runtime. * * Copyright (C) 2004,2005 by Thiemo Seufer * Copyright (C) 2004,2005,2006 by Thiemo Seufer * Copyright (C) 2005 Maciej W. Rozycki * Copyright (C) 2006 Ralf Baechle (ralf@linux-mips.org) * Loading Loading @@ -35,8 +35,6 @@ #include <asm/smp.h> #include <asm/war.h> /* #define DEBUG_TLB */ static __init int __attribute__((unused)) r45k_bvahwbug(void) { /* XXX: We should probe for the presence of this bug, but we don't. */ Loading Loading @@ -728,6 +726,7 @@ static void __init build_r3000_tlb_refill_handler(void) { long pgdc = (long)pgd_current; u32 *p; int i; memset(tlb_handler, 0, sizeof(tlb_handler)); p = tlb_handler; Loading @@ -753,16 +752,14 @@ static void __init build_r3000_tlb_refill_handler(void) if (p > tlb_handler + 32) panic("TLB refill handler space exceeded"); printk("Synthesized TLB refill handler (%u instructions).\n", pr_info("Synthesized TLB refill handler (%u instructions).\n", (unsigned int)(p - tlb_handler)); #ifdef DEBUG_TLB { int i; pr_debug("\t.set push\n"); pr_debug("\t.set noreorder\n"); for (i = 0; i < (p - tlb_handler); i++) printk("%08x\n", tlb_handler[i]); } #endif pr_debug("\t.word 0x%08x\n", tlb_handler[i]); pr_debug("\t.set pop\n"); memcpy((void *)ebase, tlb_handler, 0x80); } Loading Loading @@ -1175,6 +1172,7 @@ static void __init build_r4000_tlb_refill_handler(void) struct reloc *r = relocs; u32 *f; unsigned int final_len; int i; memset(tlb_handler, 0, sizeof(tlb_handler)); memset(labels, 0, sizeof(labels)); Loading Loading @@ -1272,13 +1270,9 @@ static void __init build_r4000_tlb_refill_handler(void) #endif /* CONFIG_64BIT */ resolve_relocs(relocs, labels); printk("Synthesized TLB refill handler (%u instructions).\n", pr_info("Synthesized TLB refill handler (%u instructions).\n", final_len); #ifdef DEBUG_TLB { int i; f = final_handler; #ifdef CONFIG_64BIT if (final_len > 32) Loading @@ -1286,10 +1280,11 @@ static void __init build_r4000_tlb_refill_handler(void) else f = final_handler + 32; #endif /* CONFIG_64BIT */ pr_debug("\t.set push\n"); pr_debug("\t.set noreorder\n"); for (i = 0; i < final_len; i++) printk("%08x\n", f[i]); } #endif pr_debug("\t.word 0x%08x\n", f[i]); pr_debug("\t.set pop\n"); memcpy((void *)ebase, final_handler, 0x100); } Loading Loading @@ -1522,6 +1517,7 @@ static void __init build_r3000_tlb_load_handler(void) u32 *p = handle_tlbl; struct label *l = labels; struct reloc *r = relocs; int i; memset(handle_tlbl, 0, sizeof(handle_tlbl)); memset(labels, 0, sizeof(labels)); Loading @@ -1541,17 +1537,14 @@ static void __init build_r3000_tlb_load_handler(void) panic("TLB load handler fastpath space exceeded"); resolve_relocs(relocs, labels); printk("Synthesized TLB load handler fastpath (%u instructions).\n", pr_info("Synthesized TLB load handler fastpath (%u instructions).\n", (unsigned int)(p - handle_tlbl)); #ifdef DEBUG_TLB { int i; pr_debug("\t.set push\n"); pr_debug("\t.set noreorder\n"); for (i = 0; i < (p - handle_tlbl); i++) printk("%08x\n", handle_tlbl[i]); } #endif pr_debug("\t.word 0x%08x\n", handle_tlbl[i]); pr_debug("\t.set pop\n"); } static void __init build_r3000_tlb_store_handler(void) Loading @@ -1559,6 +1552,7 @@ static void __init build_r3000_tlb_store_handler(void) u32 *p = handle_tlbs; struct label *l = labels; struct reloc *r = relocs; int i; memset(handle_tlbs, 0, sizeof(handle_tlbs)); memset(labels, 0, sizeof(labels)); Loading @@ -1578,17 +1572,14 @@ static void __init build_r3000_tlb_store_handler(void) panic("TLB store handler fastpath space exceeded"); resolve_relocs(relocs, labels); printk("Synthesized TLB store handler fastpath (%u instructions).\n", pr_info("Synthesized TLB store handler fastpath (%u instructions).\n", (unsigned int)(p - handle_tlbs)); #ifdef DEBUG_TLB { int i; pr_debug("\t.set push\n"); pr_debug("\t.set noreorder\n"); for (i = 0; i < (p - handle_tlbs); i++) printk("%08x\n", handle_tlbs[i]); } #endif pr_debug("\t.word 0x%08x\n", handle_tlbs[i]); pr_debug("\t.set pop\n"); } static void __init build_r3000_tlb_modify_handler(void) Loading @@ -1596,6 +1587,7 @@ static void __init build_r3000_tlb_modify_handler(void) u32 *p = handle_tlbm; struct label *l = labels; struct reloc *r = relocs; int i; memset(handle_tlbm, 0, sizeof(handle_tlbm)); memset(labels, 0, sizeof(labels)); Loading @@ -1615,17 +1607,14 @@ static void __init build_r3000_tlb_modify_handler(void) panic("TLB modify handler fastpath space exceeded"); resolve_relocs(relocs, labels); printk("Synthesized TLB modify handler fastpath (%u instructions).\n", pr_info("Synthesized TLB modify handler fastpath (%u instructions).\n", (unsigned int)(p - handle_tlbm)); #ifdef DEBUG_TLB { int i; pr_debug("\t.set push\n"); pr_debug("\t.set noreorder\n"); for (i = 0; i < (p - handle_tlbm); i++) printk("%08x\n", handle_tlbm[i]); } #endif pr_debug("\t.word 0x%08x\n", handle_tlbm[i]); pr_debug("\t.set pop\n"); } /* Loading Loading @@ -1677,6 +1666,7 @@ static void __init build_r4000_tlb_load_handler(void) u32 *p = handle_tlbl; struct label *l = labels; struct reloc *r = relocs; int i; memset(handle_tlbl, 0, sizeof(handle_tlbl)); memset(labels, 0, sizeof(labels)); Loading Loading @@ -1704,17 +1694,14 @@ static void __init build_r4000_tlb_load_handler(void) panic("TLB load handler fastpath space exceeded"); resolve_relocs(relocs, labels); printk("Synthesized TLB load handler fastpath (%u instructions).\n", pr_info("Synthesized TLB load handler fastpath (%u instructions).\n", (unsigned int)(p - handle_tlbl)); #ifdef DEBUG_TLB { int i; pr_debug("\t.set push\n"); pr_debug("\t.set noreorder\n"); for (i = 0; i < (p - handle_tlbl); i++) printk("%08x\n", handle_tlbl[i]); } #endif pr_debug("\t.word 0x%08x\n", handle_tlbl[i]); pr_debug("\t.set pop\n"); } static void __init build_r4000_tlb_store_handler(void) Loading @@ -1722,6 +1709,7 @@ static void __init build_r4000_tlb_store_handler(void) u32 *p = handle_tlbs; struct label *l = labels; struct reloc *r = relocs; int i; memset(handle_tlbs, 0, sizeof(handle_tlbs)); memset(labels, 0, sizeof(labels)); Loading @@ -1740,17 +1728,14 @@ static void __init build_r4000_tlb_store_handler(void) panic("TLB store handler fastpath space exceeded"); resolve_relocs(relocs, labels); printk("Synthesized TLB store handler fastpath (%u instructions).\n", pr_info("Synthesized TLB store handler fastpath (%u instructions).\n", (unsigned int)(p - handle_tlbs)); #ifdef DEBUG_TLB { int i; pr_debug("\t.set push\n"); pr_debug("\t.set noreorder\n"); for (i = 0; i < (p - handle_tlbs); i++) printk("%08x\n", handle_tlbs[i]); } #endif pr_debug("\t.word 0x%08x\n", handle_tlbs[i]); pr_debug("\t.set pop\n"); } static void __init build_r4000_tlb_modify_handler(void) Loading @@ -1758,6 +1743,7 @@ static void __init build_r4000_tlb_modify_handler(void) u32 *p = handle_tlbm; struct label *l = labels; struct reloc *r = relocs; int i; memset(handle_tlbm, 0, sizeof(handle_tlbm)); memset(labels, 0, sizeof(labels)); Loading @@ -1777,17 +1763,14 @@ static void __init build_r4000_tlb_modify_handler(void) panic("TLB modify handler fastpath space exceeded"); resolve_relocs(relocs, labels); printk("Synthesized TLB modify handler fastpath (%u instructions).\n", pr_info("Synthesized TLB modify handler fastpath (%u instructions).\n", (unsigned int)(p - handle_tlbm)); #ifdef DEBUG_TLB { int i; pr_debug("\t.set push\n"); pr_debug("\t.set noreorder\n"); for (i = 0; i < (p - handle_tlbm); i++) printk("%08x\n", handle_tlbm[i]); } #endif pr_debug("\t.word 0x%08x\n", handle_tlbm[i]); pr_debug("\t.set pop\n"); } void __init build_tlb_refill_handler(void) Loading