summaryrefslogtreecommitdiffstats
path: root/include/asm-ppc/mmu_context.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/asm-ppc/mmu_context.h')
-rw-r--r--include/asm-ppc/mmu_context.h38
1 files changed, 21 insertions, 17 deletions
diff --git a/include/asm-ppc/mmu_context.h b/include/asm-ppc/mmu_context.h
index d715f4ca4..0f06f16fe 100644
--- a/include/asm-ppc/mmu_context.h
+++ b/include/asm-ppc/mmu_context.h
@@ -22,9 +22,20 @@
#ifdef CONFIG_8xx
#define NO_CONTEXT 16
#define LAST_CONTEXT 15
+#define MUNGE_CONTEXT(n) (n)
+
#else
+
+/* PPC 6xx, 7xx CPUs */
#define NO_CONTEXT 0
#define LAST_CONTEXT 0xfffff
+
+/*
+ * Allocating context numbers this way tends to spread out
+ * the entries in the hash table better than a simple linear
+ * allocation.
+ */
+#define MUNGE_CONTEXT(n) (((n) * 897) & LAST_CONTEXT)
#endif
extern int next_mmu_context;
@@ -36,17 +47,6 @@ extern void set_context(int context);
#define set_context(context) do { } while (0)
#endif
-#ifndef CONFIG_8xx
-/*
- * Allocating context numbers this way tends to spread out
- * the entries in the hash table better than a simple linear
- * allocation.
- */
-#define MUNGE_CONTEXT(n) (((n) * 897) & LAST_CONTEXT)
-#else
-#define MUNGE_CONTEXT(n) (n)
-#endif
-
/*
* Get a new mmu context for task tsk if necessary.
*/
@@ -57,8 +57,6 @@ do { \
if (next_mmu_context == LAST_CONTEXT) \
mmu_context_overflow(); \
mm->context = MUNGE_CONTEXT(++next_mmu_context);\
- if ( tsk == current ) \
- set_context(mm->context); \
} \
} while (0)
@@ -70,11 +68,17 @@ do { \
/*
* We're finished using the context for an address space.
*/
-#ifdef CONFIG_8xx
#define destroy_context(mm) ((mm)->context = NO_CONTEXT)
-#else
-#define destroy_context(mm) do { } while (0)
-#endif
+
+/*
+ * After we have set current->mm to a new value, this activates
+ * the context for the new mm so we see the new mappings.
+ */
+extern inline void activate_context(struct task_struct *tsk)
+{
+ get_mmu_context(tsk);
+ set_context(tsk->mm->context);
+}
/*
* compute the vsid from the context and segment