LoongArch: Fix EENTRY/MERRENTRY setting in setup_tlb_handler()
authorHuacai Chen <chenhuacai@loongson.cn>
Thu, 23 Jun 2022 08:11:54 +0000 (16:11 +0800)
committerHuacai Chen <chenhuacai@loongson.cn>
Sat, 25 Jun 2022 10:05:58 +0000 (18:05 +0800)
setup_tlb_handler() is expected to set per-cpu exception handlers, but
it only set the TLBRENTRY successfully because of copy & paste errors,
so fix it.

Reviewed-by: WANG Xuerui <git@xen0n.name>
Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
arch/loongarch/mm/tlb.c

index 6d05097..9818ce1 100644 (file)
@@ -286,10 +286,11 @@ void setup_tlb_handler(int cpu)
                        return;
 
                addr = page_address(page);
-               pcpu_handlers[cpu] = virt_to_phys(addr);
+               pcpu_handlers[cpu] = (unsigned long)addr;
                memcpy((void *)addr, (void *)eentry, vec_sz);
                local_flush_icache_range((unsigned long)addr, (unsigned long)addr + vec_sz);
-               csr_write64(pcpu_handlers[cpu], LOONGARCH_CSR_TLBRENTRY);
+               csr_write64(pcpu_handlers[cpu], LOONGARCH_CSR_EENTRY);
+               csr_write64(pcpu_handlers[cpu], LOONGARCH_CSR_MERRENTRY);
                csr_write64(pcpu_handlers[cpu] + 80*VECSIZE, LOONGARCH_CSR_TLBRENTRY);
        }
 #endif