diff options
author | Ralf Baechle <ralf@linux-mips.org> | 2000-11-28 03:58:46 +0000 |
---|---|---|
committer | Ralf Baechle <ralf@linux-mips.org> | 2000-11-28 03:58:46 +0000 |
commit | b63ad0882a16a5d28003e57f2b0b81dee3fb322b (patch) | |
tree | 0a343ce219e2b8b38a5d702d66032c57b83d9720 /arch/ppc/kernel/head.S | |
parent | a9d7bff9a84dba79609a0002e5321b74c4d64c64 (diff) |
Merge with 2.4.0-test11.
Diffstat (limited to 'arch/ppc/kernel/head.S')
-rw-r--r-- | arch/ppc/kernel/head.S | 27 |
1 files changed, 21 insertions, 6 deletions
diff --git a/arch/ppc/kernel/head.S b/arch/ppc/kernel/head.S index 5d26e2917..71b5a96c5 100644 --- a/arch/ppc/kernel/head.S +++ b/arch/ppc/kernel/head.S @@ -521,10 +521,15 @@ InstructionTLBMiss: */ mfctr r0 /* Get PTE (linux-style) and check access */ + mfspr r3,IMISS + lis r1,KERNELBASE@h /* check if kernel address */ + cmplw 0,r3,r1 mfspr r2,SPRG3 lwz r2,PGDIR(r2) - tophys(r2,r2) - mfspr r3,IMISS + blt+ 112f + lis r2,swapper_pg_dir@ha /* if kernel address, use */ + addi r2,r2,swapper_pg_dir@l /* kernel page table */ +112: tophys(r2,r2) rlwimi r2,r3,12,20,29 /* insert top 10 bits of address */ lwz r2,0(r2) /* get pmd entry */ rlwinm. r2,r2,0,0,19 /* extract address of pte page */ @@ -588,10 +593,15 @@ DataLoadTLBMiss: */ mfctr r0 /* Get PTE (linux-style) and check access */ + mfspr r3,DMISS + lis r1,KERNELBASE@h /* check if kernel address */ + cmplw 0,r3,r1 mfspr r2,SPRG3 lwz r2,PGDIR(r2) - tophys(r2,r2) - mfspr r3,DMISS + blt+ 112f + lis r2,swapper_pg_dir@ha /* if kernel address, use */ + addi r2,r2,swapper_pg_dir@l /* kernel page table */ +112: tophys(r2,r2) rlwimi r2,r3,12,20,29 /* insert top 10 bits of address */ lwz r2,0(r2) /* get pmd entry */ rlwinm. r2,r2,0,0,19 /* extract address of pte page */ @@ -654,10 +664,15 @@ DataStoreTLBMiss: */ mfctr r0 /* Get PTE (linux-style) and check access */ + mfspr r3,DMISS + lis r1,KERNELBASE@h /* check if kernel address */ + cmplw 0,r3,r1 mfspr r2,SPRG3 lwz r2,PGDIR(r2) - tophys(r2,r2) - mfspr r3,DMISS + blt+ 112f + lis r2,swapper_pg_dir@ha /* if kernel address, use */ + addi r2,r2,swapper_pg_dir@l /* kernel page table */ +112: tophys(r2,r2) rlwimi r2,r3,12,20,29 /* insert top 10 bits of address */ lwz r2,0(r2) /* get pmd entry */ rlwinm. r2,r2,0,0,19 /* extract address of pte page */ |