Skip to content

Commit

Permalink
Avoid SMP cacheflushes. This is a minor optimization of startup but
Browse files Browse the repository at this point in the history
will also avoid smp_call_function from doing stupid things when called
from a CPU that is not yet marked online.

Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
  • Loading branch information
Ralf Baechle committed Oct 29, 2005
1 parent bdf21b1 commit 1d40cfc
Show file tree
Hide file tree
Showing 5 changed files with 15 additions and 29 deletions.
2 changes: 2 additions & 0 deletions arch/mips/kernel/traps.c
Original file line number Diff line number Diff line change
Expand Up @@ -1150,6 +1150,7 @@ static inline void signal32_init(void)

extern void cpu_cache_init(void);
extern void tlb_init(void);
extern void flush_tlb_handlers(void);

void __init per_cpu_trap_init(void)
{
Expand Down Expand Up @@ -1348,4 +1349,5 @@ void __init trap_init(void)
#endif

flush_icache_range(ebase, ebase + 0x400);
flush_tlb_handlers();
}
5 changes: 2 additions & 3 deletions arch/mips/mm/c-r4k.c
Original file line number Diff line number Diff line change
Expand Up @@ -1270,9 +1270,8 @@ void __init ld_mmu_r4xx0(void)
_dma_cache_inv = r4k_dma_cache_inv;
#endif

__flush_cache_all();
coherency_setup();

build_clear_page();
build_copy_page();
local_r4k___flush_cache_all(NULL);
coherency_setup();
}
1 change: 1 addition & 0 deletions arch/mips/mm/c-tx39.c
Original file line number Diff line number Diff line change
Expand Up @@ -492,4 +492,5 @@ void __init ld_mmu_tx39(void)

build_clear_page();
build_copy_page();
tx39h_flush_icache_all();
}
6 changes: 0 additions & 6 deletions arch/mips/mm/pg-r4k.c
Original file line number Diff line number Diff line change
Expand Up @@ -404,9 +404,6 @@ dest = label();

build_jr_ra();

flush_icache_range((unsigned long)&clear_page_array,
(unsigned long) epc);

BUG_ON(epc > clear_page_array + ARRAY_SIZE(clear_page_array));
}

Expand Down Expand Up @@ -482,8 +479,5 @@ dest = label();

build_jr_ra();

flush_icache_range((unsigned long)&copy_page_array,
(unsigned long) epc);

BUG_ON(epc > copy_page_array + ARRAY_SIZE(copy_page_array));
}
30 changes: 10 additions & 20 deletions arch/mips/mm/tlbex.c
Original file line number Diff line number Diff line change
Expand Up @@ -743,7 +743,6 @@ static void __init build_r3000_tlb_refill_handler(void)
#endif

memcpy((void *)CAC_BASE, tlb_handler, 0x80);
flush_icache_range(CAC_BASE, CAC_BASE + 0x80);
}

/*
Expand Down Expand Up @@ -1258,7 +1257,6 @@ static void __init build_r4000_tlb_refill_handler(void)
#endif

memcpy((void *)CAC_BASE, final_handler, 0x100);
flush_icache_range(CAC_BASE, CAC_BASE + 0x100);
}

/*
Expand Down Expand Up @@ -1519,9 +1517,6 @@ static void __init build_r3000_tlb_load_handler(void)
printk("%08x\n", handle_tlbl[i]);
}
#endif

flush_icache_range((unsigned long)handle_tlbl,
(unsigned long)handle_tlbl + FASTPATH_SIZE * sizeof(u32));
}

static void __init build_r3000_tlb_store_handler(void)
Expand Down Expand Up @@ -1559,9 +1554,6 @@ static void __init build_r3000_tlb_store_handler(void)
printk("%08x\n", handle_tlbs[i]);
}
#endif

flush_icache_range((unsigned long)handle_tlbs,
(unsigned long)handle_tlbs + FASTPATH_SIZE * sizeof(u32));
}

static void __init build_r3000_tlb_modify_handler(void)
Expand Down Expand Up @@ -1599,9 +1591,6 @@ static void __init build_r3000_tlb_modify_handler(void)
printk("%08x\n", handle_tlbm[i]);
}
#endif

flush_icache_range((unsigned long)handle_tlbm,
(unsigned long)handle_tlbm + FASTPATH_SIZE * sizeof(u32));
}

/*
Expand Down Expand Up @@ -1691,9 +1680,6 @@ static void __init build_r4000_tlb_load_handler(void)
printk("%08x\n", handle_tlbl[i]);
}
#endif

flush_icache_range((unsigned long)handle_tlbl,
(unsigned long)handle_tlbl + FASTPATH_SIZE * sizeof(u32));
}

static void __init build_r4000_tlb_store_handler(void)
Expand Down Expand Up @@ -1730,9 +1716,6 @@ static void __init build_r4000_tlb_store_handler(void)
printk("%08x\n", handle_tlbs[i]);
}
#endif

flush_icache_range((unsigned long)handle_tlbs,
(unsigned long)handle_tlbs + FASTPATH_SIZE * sizeof(u32));
}

static void __init build_r4000_tlb_modify_handler(void)
Expand Down Expand Up @@ -1770,9 +1753,6 @@ static void __init build_r4000_tlb_modify_handler(void)
printk("%08x\n", handle_tlbm[i]);
}
#endif

flush_icache_range((unsigned long)handle_tlbm,
(unsigned long)handle_tlbm + FASTPATH_SIZE * sizeof(u32));
}

void __init build_tlb_refill_handler(void)
Expand Down Expand Up @@ -1820,3 +1800,13 @@ void __init build_tlb_refill_handler(void)
}
}
}

void __init flush_tlb_handlers(void)
{
flush_icache_range((unsigned long)handle_tlbl,
(unsigned long)handle_tlbl + sizeof(handle_tlbl));
flush_icache_range((unsigned long)handle_tlbs,
(unsigned long)handle_tlbs + sizeof(handle_tlbs));
flush_icache_range((unsigned long)handle_tlbm,
(unsigned long)handle_tlbm + sizeof(handle_tlbm));
}

0 comments on commit 1d40cfc

Please sign in to comment.