diff options
| -rw-r--r-- | arch/powerpc/mm/hash_low_64.S | 3 | ||||
| -rw-r--r-- | arch/powerpc/mm/hash_native_64.c | 2 | ||||
| -rw-r--r-- | include/asm-powerpc/mmu.h | 2 |
3 files changed, 6 insertions, 1 deletions
diff --git a/arch/powerpc/mm/hash_low_64.S b/arch/powerpc/mm/hash_low_64.S index e0d02c4a2615..106fba391987 100644 --- a/arch/powerpc/mm/hash_low_64.S +++ b/arch/powerpc/mm/hash_low_64.S | |||
| @@ -136,6 +136,7 @@ _GLOBAL(__hash_page_4K) | |||
| 136 | and r0,r0,r4 /* _PAGE_RW & _PAGE_DIRTY ->r0 bit 30*/ | 136 | and r0,r0,r4 /* _PAGE_RW & _PAGE_DIRTY ->r0 bit 30*/ |
| 137 | andc r0,r30,r0 /* r0 = pte & ~r0 */ | 137 | andc r0,r30,r0 /* r0 = pte & ~r0 */ |
| 138 | rlwimi r3,r0,32-1,31,31 /* Insert result into PP lsb */ | 138 | rlwimi r3,r0,32-1,31,31 /* Insert result into PP lsb */ |
| 139 | ori r3,r3,HPTE_R_C /* Always add "C" bit for perf. */ | ||
| 139 | 140 | ||
| 140 | /* We eventually do the icache sync here (maybe inline that | 141 | /* We eventually do the icache sync here (maybe inline that |
| 141 | * code rather than call a C function...) | 142 | * code rather than call a C function...) |
| @@ -400,6 +401,7 @@ _GLOBAL(__hash_page_4K) | |||
| 400 | and r0,r0,r4 /* _PAGE_RW & _PAGE_DIRTY ->r0 bit 30*/ | 401 | and r0,r0,r4 /* _PAGE_RW & _PAGE_DIRTY ->r0 bit 30*/ |
| 401 | andc r0,r30,r0 /* r0 = pte & ~r0 */ | 402 | andc r0,r30,r0 /* r0 = pte & ~r0 */ |
| 402 | rlwimi r3,r0,32-1,31,31 /* Insert result into PP lsb */ | 403 | rlwimi r3,r0,32-1,31,31 /* Insert result into PP lsb */ |
| 404 | ori r3,r3,HPTE_R_C /* Always add "C" bit for perf. */ | ||
| 403 | 405 | ||
| 404 | /* We eventually do the icache sync here (maybe inline that | 406 | /* We eventually do the icache sync here (maybe inline that |
| 405 | * code rather than call a C function...) | 407 | * code rather than call a C function...) |
| @@ -671,6 +673,7 @@ _GLOBAL(__hash_page_64K) | |||
| 671 | and r0,r0,r4 /* _PAGE_RW & _PAGE_DIRTY ->r0 bit 30*/ | 673 | and r0,r0,r4 /* _PAGE_RW & _PAGE_DIRTY ->r0 bit 30*/ |
| 672 | andc r0,r30,r0 /* r0 = pte & ~r0 */ | 674 | andc r0,r30,r0 /* r0 = pte & ~r0 */ |
| 673 | rlwimi r3,r0,32-1,31,31 /* Insert result into PP lsb */ | 675 | rlwimi r3,r0,32-1,31,31 /* Insert result into PP lsb */ |
| 676 | ori r3,r3,HPTE_R_C /* Always add "C" bit for perf. */ | ||
| 674 | 677 | ||
| 675 | /* We eventually do the icache sync here (maybe inline that | 678 | /* We eventually do the icache sync here (maybe inline that |
| 676 | * code rather than call a C function...) | 679 | * code rather than call a C function...) |
diff --git a/arch/powerpc/mm/hash_native_64.c b/arch/powerpc/mm/hash_native_64.c index 33654d1b1b43..3b8205033f15 100644 --- a/arch/powerpc/mm/hash_native_64.c +++ b/arch/powerpc/mm/hash_native_64.c | |||
| @@ -238,7 +238,7 @@ static long native_hpte_updatepp(unsigned long slot, unsigned long newpp, | |||
| 238 | DBG_LOW(" -> hit\n"); | 238 | DBG_LOW(" -> hit\n"); |
| 239 | /* Update the HPTE */ | 239 | /* Update the HPTE */ |
| 240 | hptep->r = (hptep->r & ~(HPTE_R_PP | HPTE_R_N)) | | 240 | hptep->r = (hptep->r & ~(HPTE_R_PP | HPTE_R_N)) | |
| 241 | (newpp & (HPTE_R_PP | HPTE_R_N)); | 241 | (newpp & (HPTE_R_PP | HPTE_R_N | HPTE_R_C)); |
| 242 | native_unlock_hpte(hptep); | 242 | native_unlock_hpte(hptep); |
| 243 | } | 243 | } |
| 244 | 244 | ||
diff --git a/include/asm-powerpc/mmu.h b/include/asm-powerpc/mmu.h index 96e47d1ce979..885397420104 100644 --- a/include/asm-powerpc/mmu.h +++ b/include/asm-powerpc/mmu.h | |||
| @@ -96,6 +96,8 @@ extern char initial_stab[]; | |||
| 96 | #define HPTE_R_FLAGS ASM_CONST(0x00000000000003ff) | 96 | #define HPTE_R_FLAGS ASM_CONST(0x00000000000003ff) |
| 97 | #define HPTE_R_PP ASM_CONST(0x0000000000000003) | 97 | #define HPTE_R_PP ASM_CONST(0x0000000000000003) |
| 98 | #define HPTE_R_N ASM_CONST(0x0000000000000004) | 98 | #define HPTE_R_N ASM_CONST(0x0000000000000004) |
| 99 | #define HPTE_R_C ASM_CONST(0x0000000000000080) | ||
| 100 | #define HPTE_R_R ASM_CONST(0x0000000000000100) | ||
| 99 | 101 | ||
| 100 | /* Values for PP (assumes Ks=0, Kp=1) */ | 102 | /* Values for PP (assumes Ks=0, Kp=1) */ |
| 101 | /* pp0 will always be 0 for linux */ | 103 | /* pp0 will always be 0 for linux */ |
