aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Mackerras <paulus@samba.org>2006-06-11 00:15:17 -0400
committerPaul Mackerras <paulus@samba.org>2006-06-11 00:15:17 -0400
commit6218a761bbc27acc65248c80024875bcc06d52b1 (patch)
tree59a278c4c189f838ede99de5fd46241d1923f52b
parent050613545b389825c1f5beb67fa2667b727f866d (diff)
powerpc: add context.vdso_base for 32-bit too
This adds a vdso_base element to the mm_context_t for 32-bit compiles (both for ARCH=powerpc and ARCH=ppc). This fixes the compile errors that have been reported in arch/powerpc/kernel/signal_32.c. Signed-off-by: Paul Mackerras <paulus@samba.org>
-rw-r--r--arch/powerpc/mm/mmu_context_32.c2
-rw-r--r--arch/powerpc/mm/ppc_mmu_32.c2
-rw-r--r--arch/powerpc/mm/tlb_32.c6
-rw-r--r--arch/powerpc/platforms/powermac/cpufreq_32.c2
-rw-r--r--arch/powerpc/platforms/powermac/setup.c2
-rw-r--r--arch/ppc/mm/mmu_context.c2
-rw-r--r--drivers/macintosh/via-pmu.c4
-rw-r--r--include/asm-ppc/mmu.h6
-rw-r--r--include/asm-ppc/mmu_context.h27
-rw-r--r--include/asm-ppc/pgtable.h2
10 files changed, 31 insertions, 24 deletions
diff --git a/arch/powerpc/mm/mmu_context_32.c b/arch/powerpc/mm/mmu_context_32.c
index a8816e0f6a86..e326e4249e1a 100644
--- a/arch/powerpc/mm/mmu_context_32.c
+++ b/arch/powerpc/mm/mmu_context_32.c
@@ -30,7 +30,7 @@
30#include <asm/mmu_context.h> 30#include <asm/mmu_context.h>
31#include <asm/tlbflush.h> 31#include <asm/tlbflush.h>
32 32
33mm_context_t next_mmu_context; 33unsigned long next_mmu_context;
34unsigned long context_map[LAST_CONTEXT / BITS_PER_LONG + 1]; 34unsigned long context_map[LAST_CONTEXT / BITS_PER_LONG + 1];
35#ifdef FEW_CONTEXTS 35#ifdef FEW_CONTEXTS
36atomic_t nr_free_contexts; 36atomic_t nr_free_contexts;
diff --git a/arch/powerpc/mm/ppc_mmu_32.c b/arch/powerpc/mm/ppc_mmu_32.c
index ed7fcfe5fd37..1df731e42b50 100644
--- a/arch/powerpc/mm/ppc_mmu_32.c
+++ b/arch/powerpc/mm/ppc_mmu_32.c
@@ -190,7 +190,7 @@ void hash_preload(struct mm_struct *mm, unsigned long ea,
190 return; 190 return;
191 pmd = pmd_offset(pgd_offset(mm, ea), ea); 191 pmd = pmd_offset(pgd_offset(mm, ea), ea);
192 if (!pmd_none(*pmd)) 192 if (!pmd_none(*pmd))
193 add_hash_page(mm->context, ea, pmd_val(*pmd)); 193 add_hash_page(mm->context.id, ea, pmd_val(*pmd));
194} 194}
195 195
196/* 196/*
diff --git a/arch/powerpc/mm/tlb_32.c b/arch/powerpc/mm/tlb_32.c
index ad580f3742e5..02eb23e036d5 100644
--- a/arch/powerpc/mm/tlb_32.c
+++ b/arch/powerpc/mm/tlb_32.c
@@ -42,7 +42,7 @@ void flush_hash_entry(struct mm_struct *mm, pte_t *ptep, unsigned long addr)
42 42
43 if (Hash != 0) { 43 if (Hash != 0) {
44 ptephys = __pa(ptep) & PAGE_MASK; 44 ptephys = __pa(ptep) & PAGE_MASK;
45 flush_hash_pages(mm->context, addr, ptephys, 1); 45 flush_hash_pages(mm->context.id, addr, ptephys, 1);
46 } 46 }
47} 47}
48 48
@@ -102,7 +102,7 @@ static void flush_range(struct mm_struct *mm, unsigned long start,
102 pmd_t *pmd; 102 pmd_t *pmd;
103 unsigned long pmd_end; 103 unsigned long pmd_end;
104 int count; 104 int count;
105 unsigned int ctx = mm->context; 105 unsigned int ctx = mm->context.id;
106 106
107 if (Hash == 0) { 107 if (Hash == 0) {
108 _tlbia(); 108 _tlbia();
@@ -172,7 +172,7 @@ void flush_tlb_page(struct vm_area_struct *vma, unsigned long vmaddr)
172 mm = (vmaddr < TASK_SIZE)? vma->vm_mm: &init_mm; 172 mm = (vmaddr < TASK_SIZE)? vma->vm_mm: &init_mm;
173 pmd = pmd_offset(pgd_offset(mm, vmaddr), vmaddr); 173 pmd = pmd_offset(pgd_offset(mm, vmaddr), vmaddr);
174 if (!pmd_none(*pmd)) 174 if (!pmd_none(*pmd))
175 flush_hash_pages(mm->context, vmaddr, pmd_val(*pmd), 1); 175 flush_hash_pages(mm->context.id, vmaddr, pmd_val(*pmd), 1);
176 FINISH_FLUSH; 176 FINISH_FLUSH;
177} 177}
178 178
diff --git a/arch/powerpc/platforms/powermac/cpufreq_32.c b/arch/powerpc/platforms/powermac/cpufreq_32.c
index cfd6527a0d7e..af2a8f9f1222 100644
--- a/arch/powerpc/platforms/powermac/cpufreq_32.c
+++ b/arch/powerpc/platforms/powermac/cpufreq_32.c
@@ -314,7 +314,7 @@ static int pmu_set_cpu_speed(int low_speed)
314 _set_L3CR(save_l3cr); 314 _set_L3CR(save_l3cr);
315 315
316 /* Restore userland MMU context */ 316 /* Restore userland MMU context */
317 set_context(current->active_mm->context, current->active_mm->pgd); 317 set_context(current->active_mm->context.id, current->active_mm->pgd);
318 318
319#ifdef DEBUG_FREQ 319#ifdef DEBUG_FREQ
320 printk(KERN_DEBUG "HID1, after: %x\n", mfspr(SPRN_HID1)); 320 printk(KERN_DEBUG "HID1, after: %x\n", mfspr(SPRN_HID1));
diff --git a/arch/powerpc/platforms/powermac/setup.c b/arch/powerpc/platforms/powermac/setup.c
index b9200fb07815..9cc7db7a8bdc 100644
--- a/arch/powerpc/platforms/powermac/setup.c
+++ b/arch/powerpc/platforms/powermac/setup.c
@@ -458,7 +458,7 @@ static int pmac_pm_finish(suspend_state_t state)
458 printk(KERN_DEBUG "%s(%d)\n", __FUNCTION__, state); 458 printk(KERN_DEBUG "%s(%d)\n", __FUNCTION__, state);
459 459
460 /* Restore userland MMU context */ 460 /* Restore userland MMU context */
461 set_context(current->active_mm->context, current->active_mm->pgd); 461 set_context(current->active_mm->context.id, current->active_mm->pgd);
462 462
463 return 0; 463 return 0;
464} 464}
diff --git a/arch/ppc/mm/mmu_context.c b/arch/ppc/mm/mmu_context.c
index b4a4b3f02a1c..8784f3715032 100644
--- a/arch/ppc/mm/mmu_context.c
+++ b/arch/ppc/mm/mmu_context.c
@@ -30,7 +30,7 @@
30#include <asm/mmu_context.h> 30#include <asm/mmu_context.h>
31#include <asm/tlbflush.h> 31#include <asm/tlbflush.h>
32 32
33mm_context_t next_mmu_context; 33unsigned long next_mmu_context;
34unsigned long context_map[LAST_CONTEXT / BITS_PER_LONG + 1]; 34unsigned long context_map[LAST_CONTEXT / BITS_PER_LONG + 1];
35#ifdef FEW_CONTEXTS 35#ifdef FEW_CONTEXTS
36atomic_t nr_free_contexts; 36atomic_t nr_free_contexts;
diff --git a/drivers/macintosh/via-pmu.c b/drivers/macintosh/via-pmu.c
index 0b5ff553e39a..c63d4e7984be 100644
--- a/drivers/macintosh/via-pmu.c
+++ b/drivers/macintosh/via-pmu.c
@@ -2268,7 +2268,7 @@ static int powerbook_sleep_grackle(void)
2268 _set_L2CR(save_l2cr); 2268 _set_L2CR(save_l2cr);
2269 2269
2270 /* Restore userland MMU context */ 2270 /* Restore userland MMU context */
2271 set_context(current->active_mm->context, current->active_mm->pgd); 2271 set_context(current->active_mm->context.id, current->active_mm->pgd);
2272 2272
2273 /* Power things up */ 2273 /* Power things up */
2274 pmu_unlock(); 2274 pmu_unlock();
@@ -2366,7 +2366,7 @@ powerbook_sleep_Core99(void)
2366 _set_L3CR(save_l3cr); 2366 _set_L3CR(save_l3cr);
2367 2367
2368 /* Restore userland MMU context */ 2368 /* Restore userland MMU context */
2369 set_context(current->active_mm->context, current->active_mm->pgd); 2369 set_context(current->active_mm->context.id, current->active_mm->pgd);
2370 2370
2371 /* Tell PMU we are ready */ 2371 /* Tell PMU we are ready */
2372 pmu_unlock(); 2372 pmu_unlock();
diff --git a/include/asm-ppc/mmu.h b/include/asm-ppc/mmu.h
index 9205db404c7a..80ae60481fb7 100644
--- a/include/asm-ppc/mmu.h
+++ b/include/asm-ppc/mmu.h
@@ -24,8 +24,10 @@ extern phys_addr_t fixup_bigphys_addr(phys_addr_t, phys_addr_t);
24#define PHYS_FMT "%16Lx" 24#define PHYS_FMT "%16Lx"
25#endif 25#endif
26 26
27/* Default "unsigned long" context */ 27typedef struct {
28typedef unsigned long mm_context_t; 28 unsigned long id;
29 unsigned long vdso_base;
30} mm_context_t;
29 31
30/* Hardware Page Table Entry */ 32/* Hardware Page Table Entry */
31typedef struct _PTE { 33typedef struct _PTE {
diff --git a/include/asm-ppc/mmu_context.h b/include/asm-ppc/mmu_context.h
index 4f152cca13c1..4454ecf1aed5 100644
--- a/include/asm-ppc/mmu_context.h
+++ b/include/asm-ppc/mmu_context.h
@@ -71,7 +71,7 @@ static inline void enter_lazy_tlb(struct mm_struct *mm, struct task_struct *tsk)
71#else 71#else
72 72
73/* PPC 6xx, 7xx CPUs */ 73/* PPC 6xx, 7xx CPUs */
74#define NO_CONTEXT ((mm_context_t) -1) 74#define NO_CONTEXT ((unsigned long) -1)
75#define LAST_CONTEXT 32767 75#define LAST_CONTEXT 32767
76#define FIRST_CONTEXT 1 76#define FIRST_CONTEXT 1
77#endif 77#endif
@@ -86,7 +86,7 @@ static inline void enter_lazy_tlb(struct mm_struct *mm, struct task_struct *tsk)
86 * can be used for debugging on all processors (if you happen to have 86 * can be used for debugging on all processors (if you happen to have
87 * an Abatron). 87 * an Abatron).
88 */ 88 */
89extern void set_context(mm_context_t context, pgd_t *pgd); 89extern void set_context(unsigned long contextid, pgd_t *pgd);
90 90
91/* 91/*
92 * Bitmap of contexts in use. 92 * Bitmap of contexts in use.
@@ -99,7 +99,7 @@ extern unsigned long context_map[];
99 * Its use is an optimization only, we can't rely on this context 99 * Its use is an optimization only, we can't rely on this context
100 * number to be free, but it usually will be. 100 * number to be free, but it usually will be.
101 */ 101 */
102extern mm_context_t next_mmu_context; 102extern unsigned long next_mmu_context;
103 103
104/* 104/*
105 * If we don't have sufficient contexts to give one to every task 105 * If we don't have sufficient contexts to give one to every task
@@ -118,9 +118,9 @@ extern void steal_context(void);
118 */ 118 */
119static inline void get_mmu_context(struct mm_struct *mm) 119static inline void get_mmu_context(struct mm_struct *mm)
120{ 120{
121 mm_context_t ctx; 121 unsigned long ctx;
122 122
123 if (mm->context != NO_CONTEXT) 123 if (mm->context.id != NO_CONTEXT)
124 return; 124 return;
125#ifdef FEW_CONTEXTS 125#ifdef FEW_CONTEXTS
126 while (atomic_dec_if_positive(&nr_free_contexts) < 0) 126 while (atomic_dec_if_positive(&nr_free_contexts) < 0)
@@ -133,7 +133,7 @@ static inline void get_mmu_context(struct mm_struct *mm)
133 ctx = 0; 133 ctx = 0;
134 } 134 }
135 next_mmu_context = (ctx + 1) & LAST_CONTEXT; 135 next_mmu_context = (ctx + 1) & LAST_CONTEXT;
136 mm->context = ctx; 136 mm->context.id = ctx;
137#ifdef FEW_CONTEXTS 137#ifdef FEW_CONTEXTS
138 context_mm[ctx] = mm; 138 context_mm[ctx] = mm;
139#endif 139#endif
@@ -142,7 +142,12 @@ static inline void get_mmu_context(struct mm_struct *mm)
142/* 142/*
143 * Set up the context for a new address space. 143 * Set up the context for a new address space.
144 */ 144 */
145#define init_new_context(tsk,mm) (((mm)->context = NO_CONTEXT), 0) 145static inline int init_new_context(struct task_struct *t, struct mm_struct *mm)
146{
147 mm->context.id = NO_CONTEXT;
148 mm->context.vdso_base = 0;
149 return 0;
150}
146 151
147/* 152/*
148 * We're finished using the context for an address space. 153 * We're finished using the context for an address space.
@@ -150,9 +155,9 @@ static inline void get_mmu_context(struct mm_struct *mm)
150static inline void destroy_context(struct mm_struct *mm) 155static inline void destroy_context(struct mm_struct *mm)
151{ 156{
152 preempt_disable(); 157 preempt_disable();
153 if (mm->context != NO_CONTEXT) { 158 if (mm->context.id != NO_CONTEXT) {
154 clear_bit(mm->context, context_map); 159 clear_bit(mm->context.id, context_map);
155 mm->context = NO_CONTEXT; 160 mm->context.id = NO_CONTEXT;
156#ifdef FEW_CONTEXTS 161#ifdef FEW_CONTEXTS
157 atomic_inc(&nr_free_contexts); 162 atomic_inc(&nr_free_contexts);
158#endif 163#endif
@@ -180,7 +185,7 @@ static inline void switch_mm(struct mm_struct *prev, struct mm_struct *next,
180 185
181 /* Setup new userspace context */ 186 /* Setup new userspace context */
182 get_mmu_context(next); 187 get_mmu_context(next);
183 set_context(next->context, next->pgd); 188 set_context(next->context.id, next->pgd);
184} 189}
185 190
186#define deactivate_mm(tsk,mm) do { } while (0) 191#define deactivate_mm(tsk,mm) do { } while (0)
diff --git a/include/asm-ppc/pgtable.h b/include/asm-ppc/pgtable.h
index 570b355162fa..f886066bd15c 100644
--- a/include/asm-ppc/pgtable.h
+++ b/include/asm-ppc/pgtable.h
@@ -663,7 +663,7 @@ static inline int __ptep_test_and_clear_young(unsigned int context, unsigned lon
663 return (old & _PAGE_ACCESSED) != 0; 663 return (old & _PAGE_ACCESSED) != 0;
664} 664}
665#define ptep_test_and_clear_young(__vma, __addr, __ptep) \ 665#define ptep_test_and_clear_young(__vma, __addr, __ptep) \
666 __ptep_test_and_clear_young((__vma)->vm_mm->context, __addr, __ptep) 666 __ptep_test_and_clear_young((__vma)->vm_mm->context.id, __addr, __ptep)
667 667
668#define __HAVE_ARCH_PTEP_TEST_AND_CLEAR_DIRTY 668#define __HAVE_ARCH_PTEP_TEST_AND_CLEAR_DIRTY
669static inline int ptep_test_and_clear_dirty(struct vm_area_struct *vma, 669static inline int ptep_test_and_clear_dirty(struct vm_area_struct *vma,