diff options
author | Ralf Baechle <ralf@linux-mips.org> | 1998-06-30 00:21:34 +0000 |
---|---|---|
committer | Ralf Baechle <ralf@linux-mips.org> | 1998-06-30 00:21:34 +0000 |
commit | 3917ac5846dd0f9ad1238166f90caab9912052e6 (patch) | |
tree | 1c298935def4f29edb39192365a65d73de999155 /include/asm-ppc/mmu_context.h | |
parent | af2f803c8b2d469fe38e4a7ce952658dfcb6681a (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.h | 38 |
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 |