summaryrefslogtreecommitdiffstats
path: root/include/asm-ppc/mmu_context.h
diff options
context:
space:
mode:
authorRalf Baechle <ralf@linux-mips.org>1998-06-30 00:21:34 +0000
committerRalf Baechle <ralf@linux-mips.org>1998-06-30 00:21:34 +0000
commit3917ac5846dd0f9ad1238166f90caab9912052e6 (patch)
tree1c298935def4f29edb39192365a65d73de999155 /include/asm-ppc/mmu_context.h
parentaf2f803c8b2d469fe38e4a7ce952658dfcb6681a (diff)
o Merge with Linux 2.1.100.
o Cleanup the machine dependencies of floppy and rtc. The driver for the Dallas thingy in the Indy is still missing. o Handle allocation of zero'd pages correct for R4000SC / R4400SC. o Page colouring shit to match the virtual and physical colour of all mapped pages. This tends to produce extreme fragmentation problems, so it's deactivated for now. Users of R4000SC / R4400SC may re-enable the code in arch/mips/mm/init.c by removing the definition of CONF_GIVE_A_SHIT_ABOUT_COLOURS. Should get them somewhat further - but don't shake to hard ... o Fixed ptrace(2)-ing of syscalls, strace is now working again. o Fix the interrupt forwarding from the keyboard driver to the psaux driver, PS/2 mice are now working on the Indy. The fix is somewhat broken as it prevents generic kernels for Indy and machines which handle things different. o Things I can't remember.
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