diff options
Diffstat (limited to 'arch/mips/mm/init.c')
| -rw-r--r-- | arch/mips/mm/init.c | 7 | 
1 files changed, 7 insertions, 0 deletions
diff --git a/arch/mips/mm/init.c b/arch/mips/mm/init.c index b521d8e2d359..c3b45e248806 100644 --- a/arch/mips/mm/init.c +++ b/arch/mips/mm/init.c @@ -84,6 +84,7 @@ void setup_zero_pages(void)  static void *__kmap_pgprot(struct page *page, unsigned long addr, pgprot_t prot)  {  	enum fixed_addresses idx; +	unsigned int uninitialized_var(old_mmid);  	unsigned long vaddr, flags, entrylo;  	unsigned long old_ctx;  	pte_t pte; @@ -110,6 +111,10 @@ static void *__kmap_pgprot(struct page *page, unsigned long addr, pgprot_t prot)  	write_c0_entryhi(vaddr & (PAGE_MASK << 1));  	write_c0_entrylo0(entrylo);  	write_c0_entrylo1(entrylo); +	if (cpu_has_mmid) { +		old_mmid = read_c0_memorymapid(); +		write_c0_memorymapid(MMID_KERNEL_WIRED); +	}  #ifdef CONFIG_XPA  	if (cpu_has_xpa) {  		entrylo = (pte.pte_low & _PFNX_MASK); @@ -124,6 +129,8 @@ static void *__kmap_pgprot(struct page *page, unsigned long addr, pgprot_t prot)  	tlb_write_indexed();  	tlbw_use_hazard();  	write_c0_entryhi(old_ctx); +	if (cpu_has_mmid) +		write_c0_memorymapid(old_mmid);  	local_irq_restore(flags);  	return (void*) vaddr;  |