@@ -500,16 +500,15 @@ InstructionTLBMiss:
500
500
mfspr r3,SPRN_IMISS
501
501
lis r1,PAGE_OFFSET@h /* check if kernel address */
502
502
cmplw 0 ,r1,r3
503
- mfspr r2,SPRN_SPRG_THREAD
503
+ mfspr r2, SPRN_SPRG_PGDIR
504
504
li r1,_PAGE_USER|_PAGE_PRESENT|_PAGE_EXEC /* low addresses tested as user */
505
- lwz r2,PGDIR(r2)
506
505
bge- 112f
507
506
mfspr r2,SPRN_SRR1 /* and MSR_PR bit from SRR1 */
508
507
rlwimi r1,r2,32 -12 ,29 ,29 /* shift MSR_PR to _PAGE_USER posn */
509
508
lis r2,swapper_pg_dir@ha /* if kernel address, use */
510
509
addi r2,r2,swapper_pg_dir@l /* kernel page table */
511
- 112: tophys(r2,r2)
512
- rlwimi r2,r3,12 ,20 ,29 /* insert top 10 bits of address */
510
+ tophys(r2,r2)
511
+ 112: rlwimi r2,r3,12 ,20 ,29 /* insert top 10 bits of address */
513
512
lwz r2,0 (r2) /* get pmd entry */
514
513
rlwinm. r2,r2,0 ,0 ,19 /* extract address of pte page */
515
514
beq- InstructionAddressInvalid /* return if no mapping */
@@ -574,16 +573,15 @@ DataLoadTLBMiss:
574
573
mfspr r3,SPRN_DMISS
575
574
lis r1,PAGE_OFFSET@h /* check if kernel address */
576
575
cmplw 0 ,r1,r3
577
- mfspr r2,SPRN_SPRG_THREAD
576
+ mfspr r2, SPRN_SPRG_PGDIR
578
577
li r1,_PAGE_USER|_PAGE_PRESENT /* low addresses tested as user */
579
- lwz r2,PGDIR(r2)
580
578
bge- 112f
581
579
mfspr r2,SPRN_SRR1 /* and MSR_PR bit from SRR1 */
582
580
rlwimi r1,r2,32 -12 ,29 ,29 /* shift MSR_PR to _PAGE_USER posn */
583
581
lis r2,swapper_pg_dir@ha /* if kernel address, use */
584
582
addi r2,r2,swapper_pg_dir@l /* kernel page table */
585
- 112: tophys(r2,r2)
586
- rlwimi r2,r3,12 ,20 ,29 /* insert top 10 bits of address */
583
+ tophys(r2,r2)
584
+ 112: rlwimi r2,r3,12 ,20 ,29 /* insert top 10 bits of address */
587
585
lwz r2,0 (r2) /* get pmd entry */
588
586
rlwinm. r2,r2,0 ,0 ,19 /* extract address of pte page */
589
587
beq- DataAddressInvalid /* return if no mapping */
@@ -658,16 +656,15 @@ DataStoreTLBMiss:
658
656
mfspr r3,SPRN_DMISS
659
657
lis r1,PAGE_OFFSET@h /* check if kernel address */
660
658
cmplw 0 ,r1,r3
661
- mfspr r2,SPRN_SPRG_THREAD
659
+ mfspr r2, SPRN_SPRG_PGDIR
662
660
li r1,_PAGE_RW|_PAGE_USER|_PAGE_PRESENT /* access flags */
663
- lwz r2,PGDIR(r2)
664
661
bge- 112f
665
662
mfspr r2,SPRN_SRR1 /* and MSR_PR bit from SRR1 */
666
663
rlwimi r1,r2,32 -12 ,29 ,29 /* shift MSR_PR to _PAGE_USER posn */
667
664
lis r2,swapper_pg_dir@ha /* if kernel address, use */
668
665
addi r2,r2,swapper_pg_dir@l /* kernel page table */
669
- 112: tophys(r2,r2)
670
- rlwimi r2,r3,12 ,20 ,29 /* insert top 10 bits of address */
666
+ tophys(r2,r2)
667
+ 112: rlwimi r2,r3,12 ,20 ,29 /* insert top 10 bits of address */
671
668
lwz r2,0 (r2) /* get pmd entry */
672
669
rlwinm. r2,r2,0 ,0 ,19 /* extract address of pte page */
673
670
beq- DataAddressInvalid /* return if no mapping */
@@ -1024,14 +1021,16 @@ _ENTRY(switch_mmu_context)
1024
1021
li r0,NUM_USER_SEGMENTS
1025
1022
mtctr r0
1026
1023
1024
+ lwz r4, MM_PGD(r4)
1027
1025
#ifdef CONFIG_BDI_SWITCH
1028
1026
/* Context switch the PTE pointer for the Abatron BDI2000.
1029
1027
* The PGDIR is passed as second argument.
1030
1028
*/
1031
- lwz r4,MM_PGD(r4)
1032
1029
lis r5, abatron_pteptrs@ha
1033
1030
stw r4, abatron_pteptrs@l + 0x4 (r5)
1034
1031
#endif
1032
+ tophys(r4, r4)
1033
+ mtspr SPRN_SPRG_PGDIR, r4
1035
1034
li r4,0
1036
1035
isync
1037
1036
3:
0 commit comments