aboutsummaryrefslogtreecommitdiffstats
path: root/arch/powerpc/mm
diff options
context:
space:
mode:
authorBenjamin Herrenschmidt <benh@kernel.crashing.org>2009-12-01 17:28:35 -0500
committerBenjamin Herrenschmidt <benh@kernel.crashing.org>2009-12-01 17:28:35 -0500
commit5a7b4193e564d1611ecf1cd859aed60d5612d78f (patch)
tree8831669121df3d50845718b848d7c6e4bc51be26 /arch/powerpc/mm
parent86f9e097f340fd0fbd37afe92bd5453f5a84cbca (diff)
Revert "powerpc/mm: Fix bug in pagetable cache cleanup with CONFIG_PPC_SUBPAGE_PROT"
This reverts commit c045256d146800ea1d741a8e9e377dada6b7e195. It breaks build when CONFIG_PPC_SUBPAGE_PROT is not set. I will commit a fixed version separately Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Diffstat (limited to 'arch/powerpc/mm')
-rw-r--r--arch/powerpc/mm/hash_utils_64.c6
-rw-r--r--arch/powerpc/mm/mmu_context_hash64.c2
-rw-r--r--arch/powerpc/mm/subpage-prot.c15
3 files changed, 7 insertions, 16 deletions
diff --git a/arch/powerpc/mm/hash_utils_64.c b/arch/powerpc/mm/hash_utils_64.c
index 50f867d657df..6810128aba30 100644
--- a/arch/powerpc/mm/hash_utils_64.c
+++ b/arch/powerpc/mm/hash_utils_64.c
@@ -835,9 +835,9 @@ void demote_segment_4k(struct mm_struct *mm, unsigned long addr)
835 * Result is 0: full permissions, _PAGE_RW: read-only, 835 * Result is 0: full permissions, _PAGE_RW: read-only,
836 * _PAGE_USER or _PAGE_USER|_PAGE_RW: no access. 836 * _PAGE_USER or _PAGE_USER|_PAGE_RW: no access.
837 */ 837 */
838static int subpage_protection(struct mm_struct *mm, unsigned long ea) 838static int subpage_protection(pgd_t *pgdir, unsigned long ea)
839{ 839{
840 struct subpage_prot_table *spt = &mm->context.spt; 840 struct subpage_prot_table *spt = pgd_subpage_prot(pgdir);
841 u32 spp = 0; 841 u32 spp = 0;
842 u32 **sbpm, *sbpp; 842 u32 **sbpm, *sbpp;
843 843
@@ -865,7 +865,7 @@ static int subpage_protection(struct mm_struct *mm, unsigned long ea)
865} 865}
866 866
867#else /* CONFIG_PPC_SUBPAGE_PROT */ 867#else /* CONFIG_PPC_SUBPAGE_PROT */
868static inline int subpage_protection(struct mm_struct *mm, unsigned long ea) 868static inline int subpage_protection(pgd_t *pgdir, unsigned long ea)
869{ 869{
870 return 0; 870 return 0;
871} 871}
diff --git a/arch/powerpc/mm/mmu_context_hash64.c b/arch/powerpc/mm/mmu_context_hash64.c
index b910d37aea1a..b9e4cc2c2057 100644
--- a/arch/powerpc/mm/mmu_context_hash64.c
+++ b/arch/powerpc/mm/mmu_context_hash64.c
@@ -76,7 +76,6 @@ int init_new_context(struct task_struct *tsk, struct mm_struct *mm)
76 */ 76 */
77 if (slice_mm_new_context(mm)) 77 if (slice_mm_new_context(mm))
78 slice_set_user_psize(mm, mmu_virtual_psize); 78 slice_set_user_psize(mm, mmu_virtual_psize);
79 subpage_prot_init_new_context(mm);
80 mm->context.id = index; 79 mm->context.id = index;
81 80
82 return 0; 81 return 0;
@@ -93,6 +92,5 @@ EXPORT_SYMBOL_GPL(__destroy_context);
93void destroy_context(struct mm_struct *mm) 92void destroy_context(struct mm_struct *mm)
94{ 93{
95 __destroy_context(mm->context.id); 94 __destroy_context(mm->context.id);
96 subpage_prot_free(mm);
97 mm->context.id = NO_CONTEXT; 95 mm->context.id = NO_CONTEXT;
98} 96}
diff --git a/arch/powerpc/mm/subpage-prot.c b/arch/powerpc/mm/subpage-prot.c
index a040b81e93bd..4cafc0c33d0a 100644
--- a/arch/powerpc/mm/subpage-prot.c
+++ b/arch/powerpc/mm/subpage-prot.c
@@ -24,9 +24,9 @@
24 * Also makes sure that the subpage_prot_table structure is 24 * Also makes sure that the subpage_prot_table structure is
25 * reinitialized for the next user. 25 * reinitialized for the next user.
26 */ 26 */
27void subpage_prot_free(struct mm_struct *mm) 27void subpage_prot_free(pgd_t *pgd)
28{ 28{
29 struct subpage_prot_table *spt = &mm->context.spt; 29 struct subpage_prot_table *spt = pgd_subpage_prot(pgd);
30 unsigned long i, j, addr; 30 unsigned long i, j, addr;
31 u32 **p; 31 u32 **p;
32 32
@@ -51,13 +51,6 @@ void subpage_prot_free(struct mm_struct *mm)
51 spt->maxaddr = 0; 51 spt->maxaddr = 0;
52} 52}
53 53
54void subpage_prot_init_new_context(struct mm_struct *mm)
55{
56 struct subpage_prot_table *spt = &mm->context.spt;
57
58 memset(spt, 0, sizeof(*spt));
59}
60
61static void hpte_flush_range(struct mm_struct *mm, unsigned long addr, 54static void hpte_flush_range(struct mm_struct *mm, unsigned long addr,
62 int npages) 55 int npages)
63{ 56{
@@ -94,7 +87,7 @@ static void hpte_flush_range(struct mm_struct *mm, unsigned long addr,
94static void subpage_prot_clear(unsigned long addr, unsigned long len) 87static void subpage_prot_clear(unsigned long addr, unsigned long len)
95{ 88{
96 struct mm_struct *mm = current->mm; 89 struct mm_struct *mm = current->mm;
97 struct subpage_prot_table *spt = &mm->context.spt; 90 struct subpage_prot_table *spt = pgd_subpage_prot(mm->pgd);
98 u32 **spm, *spp; 91 u32 **spm, *spp;
99 int i, nw; 92 int i, nw;
100 unsigned long next, limit; 93 unsigned long next, limit;
@@ -143,7 +136,7 @@ static void subpage_prot_clear(unsigned long addr, unsigned long len)
143long sys_subpage_prot(unsigned long addr, unsigned long len, u32 __user *map) 136long sys_subpage_prot(unsigned long addr, unsigned long len, u32 __user *map)
144{ 137{
145 struct mm_struct *mm = current->mm; 138 struct mm_struct *mm = current->mm;
146 struct subpage_prot_table *spt = &mm->context.spt; 139 struct subpage_prot_table *spt = pgd_subpage_prot(mm->pgd);
147 u32 **spm, *spp; 140 u32 **spm, *spp;
148 int i, nw; 141 int i, nw;
149 unsigned long next, limit; 142 unsigned long next, limit;