diff options
author | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2008-06-11 01:37:10 -0400 |
---|---|---|
committer | Paul Mackerras <paulus@samba.org> | 2008-06-30 08:30:53 -0400 |
commit | 41743a4e34f0777f51c1cf0675b91508ba143050 (patch) | |
tree | 9e63c8c8d70169e6c8be699167234db33b102a1f /include | |
parent | ff1f4ee94c3c4480b9cee95da2d19668262636c6 (diff) |
powerpc: Free a PTE bit on ppc64 with 64K pages
This frees a PTE bit when using 64K pages on ppc64. This is done
by getting rid of the separate _PAGE_HASHPTE bit. Instead, we just test
if any of the 16 sub-page bits is set. For non-combo pages (ie. real
64K pages), we set SUB0 and the location encoding in that field.
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Signed-off-by: Paul Mackerras <paulus@samba.org>
Diffstat (limited to 'include')
-rw-r--r-- | include/asm-powerpc/pgtable-4k.h | 1 | ||||
-rw-r--r-- | include/asm-powerpc/pgtable-64k.h | 17 | ||||
-rw-r--r-- | include/asm-powerpc/pgtable-ppc64.h | 1 |
3 files changed, 16 insertions, 3 deletions
diff --git a/include/asm-powerpc/pgtable-4k.h b/include/asm-powerpc/pgtable-4k.h index 818e2abc81e2..fd2090dc1dce 100644 --- a/include/asm-powerpc/pgtable-4k.h +++ b/include/asm-powerpc/pgtable-4k.h | |||
@@ -41,6 +41,7 @@ | |||
41 | #define PGDIR_MASK (~(PGDIR_SIZE-1)) | 41 | #define PGDIR_MASK (~(PGDIR_SIZE-1)) |
42 | 42 | ||
43 | /* PTE bits */ | 43 | /* PTE bits */ |
44 | #define _PAGE_HASHPTE 0x0400 /* software: pte has an associated HPTE */ | ||
44 | #define _PAGE_SECONDARY 0x8000 /* software: HPTE is in secondary group */ | 45 | #define _PAGE_SECONDARY 0x8000 /* software: HPTE is in secondary group */ |
45 | #define _PAGE_GROUP_IX 0x7000 /* software: HPTE index within group */ | 46 | #define _PAGE_GROUP_IX 0x7000 /* software: HPTE index within group */ |
46 | #define _PAGE_F_SECOND _PAGE_SECONDARY | 47 | #define _PAGE_F_SECOND _PAGE_SECONDARY |
diff --git a/include/asm-powerpc/pgtable-64k.h b/include/asm-powerpc/pgtable-64k.h index 1cbd6b377eea..c5007712473f 100644 --- a/include/asm-powerpc/pgtable-64k.h +++ b/include/asm-powerpc/pgtable-64k.h | |||
@@ -75,6 +75,20 @@ static inline struct subpage_prot_table *pgd_subpage_prot(pgd_t *pgd) | |||
75 | #define _PAGE_COMBO 0x10000000 /* this is a combo 4k page */ | 75 | #define _PAGE_COMBO 0x10000000 /* this is a combo 4k page */ |
76 | #define _PAGE_4K_PFN 0x20000000 /* PFN is for a single 4k page */ | 76 | #define _PAGE_4K_PFN 0x20000000 /* PFN is for a single 4k page */ |
77 | 77 | ||
78 | /* For 64K page, we don't have a separate _PAGE_HASHPTE bit. Instead, | ||
79 | * we set that to be the whole sub-bits mask. The C code will only | ||
80 | * test this, so a multi-bit mask will work. For combo pages, this | ||
81 | * is equivalent as effectively, the old _PAGE_HASHPTE was an OR of | ||
82 | * all the sub bits. For real 64k pages, we now have the assembly set | ||
83 | * _PAGE_HPTE_SUB0 in addition to setting the HIDX bits which overlap | ||
84 | * that mask. This is fine as long as the HIDX bits are never set on | ||
85 | * a PTE that isn't hashed, which is the case today. | ||
86 | * | ||
87 | * A little nit is for the huge page C code, which does the hashing | ||
88 | * in C, we need to provide which bit to use. | ||
89 | */ | ||
90 | #define _PAGE_HASHPTE _PAGE_HPTE_SUB | ||
91 | |||
78 | /* Note the full page bits must be in the same location as for normal | 92 | /* Note the full page bits must be in the same location as for normal |
79 | * 4k pages as the same asssembly will be used to insert 64K pages | 93 | * 4k pages as the same asssembly will be used to insert 64K pages |
80 | * wether the kernel has CONFIG_PPC_64K_PAGES or not | 94 | * wether the kernel has CONFIG_PPC_64K_PAGES or not |
@@ -83,8 +97,7 @@ static inline struct subpage_prot_table *pgd_subpage_prot(pgd_t *pgd) | |||
83 | #define _PAGE_F_GIX 0x00007000 /* full page: hidx bits */ | 97 | #define _PAGE_F_GIX 0x00007000 /* full page: hidx bits */ |
84 | 98 | ||
85 | /* PTE flags to conserve for HPTE identification */ | 99 | /* PTE flags to conserve for HPTE identification */ |
86 | #define _PAGE_HPTEFLAGS (_PAGE_BUSY | _PAGE_HASHPTE | _PAGE_HPTE_SUB |\ | 100 | #define _PAGE_HPTEFLAGS (_PAGE_BUSY | _PAGE_HASHPTE | _PAGE_COMBO) |
87 | _PAGE_COMBO) | ||
88 | 101 | ||
89 | /* Shift to put page number into pte. | 102 | /* Shift to put page number into pte. |
90 | * | 103 | * |
diff --git a/include/asm-powerpc/pgtable-ppc64.h b/include/asm-powerpc/pgtable-ppc64.h index cc6a43ba41d0..2e48be841cc9 100644 --- a/include/asm-powerpc/pgtable-ppc64.h +++ b/include/asm-powerpc/pgtable-ppc64.h | |||
@@ -91,7 +91,6 @@ | |||
91 | #define _PAGE_DIRTY 0x0080 /* C: page changed */ | 91 | #define _PAGE_DIRTY 0x0080 /* C: page changed */ |
92 | #define _PAGE_ACCESSED 0x0100 /* R: page referenced */ | 92 | #define _PAGE_ACCESSED 0x0100 /* R: page referenced */ |
93 | #define _PAGE_RW 0x0200 /* software: user write access allowed */ | 93 | #define _PAGE_RW 0x0200 /* software: user write access allowed */ |
94 | #define _PAGE_HASHPTE 0x0400 /* software: pte has an associated HPTE */ | ||
95 | #define _PAGE_BUSY 0x0800 /* software: PTE & hash are busy */ | 94 | #define _PAGE_BUSY 0x0800 /* software: PTE & hash are busy */ |
96 | 95 | ||
97 | #define _PAGE_BASE (_PAGE_PRESENT | _PAGE_ACCESSED | _PAGE_COHERENT) | 96 | #define _PAGE_BASE (_PAGE_PRESENT | _PAGE_ACCESSED | _PAGE_COHERENT) |