git://git.onelab.eu
/
linux-2.6.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
This commit was manufactured by cvs2svn to create tag
[linux-2.6.git]
/
include
/
asm-i386
/
mmu_context.h
diff --git
a/include/asm-i386/mmu_context.h
b/include/asm-i386/mmu_context.h
index
99cff65
..
52beaf7
100644
(file)
--- a/
include/asm-i386/mmu_context.h
+++ b/
include/asm-i386/mmu_context.h
@@
-29,6
+29,10
@@
static inline void switch_mm(struct mm_struct *prev,
{
int cpu = smp_processor_id();
{
int cpu = smp_processor_id();
+#ifdef CONFIG_X86_SWITCH_PAGETABLES
+ if (tsk->mm)
+ tsk->thread_info->user_pgd = (void *)__pa(tsk->mm->pgd);
+#endif
if (likely(prev != next)) {
/* stop flush ipis for the previous mm */
cpu_clear(cpu, prev->cpu_vm_mask);
if (likely(prev != next)) {
/* stop flush ipis for the previous mm */
cpu_clear(cpu, prev->cpu_vm_mask);
@@
-39,12
+43,14
@@
static inline void switch_mm(struct mm_struct *prev,
cpu_set(cpu, next->cpu_vm_mask);
/* Re-load page tables */
cpu_set(cpu, next->cpu_vm_mask);
/* Re-load page tables */
+#if !defined(CONFIG_X86_SWITCH_PAGETABLES)
load_cr3(next->pgd);
load_cr3(next->pgd);
+#endif
/*
* load the LDT, if the LDT is different:
*/
/*
* load the LDT, if the LDT is different:
*/
- if (unlikely(prev->context.
ldt != next->context.ldt
))
+ if (unlikely(prev->context.
size + next->context.size
))
load_LDT_nolock(&next->context, cpu);
}
#ifdef CONFIG_SMP
load_LDT_nolock(&next->context, cpu);
}
#ifdef CONFIG_SMP
@@
-56,7
+62,9
@@
static inline void switch_mm(struct mm_struct *prev,
/* We were in lazy tlb mode and leave_mm disabled
* tlb flush IPI delivery. We must reload %cr3.
*/
/* We were in lazy tlb mode and leave_mm disabled
* tlb flush IPI delivery. We must reload %cr3.
*/
+#if !defined(CONFIG_X86_SWITCH_PAGETABLES)
load_cr3(next->pgd);
load_cr3(next->pgd);
+#endif
load_LDT_nolock(&next->context, cpu);
}
}
load_LDT_nolock(&next->context, cpu);
}
}
@@
-67,6
+75,6
@@
static inline void switch_mm(struct mm_struct *prev,
asm("movl %0,%%fs ; movl %0,%%gs": :"r" (0))
#define activate_mm(prev, next) \
asm("movl %0,%%fs ; movl %0,%%gs": :"r" (0))
#define activate_mm(prev, next) \
- switch_mm((prev),(next),
NULL
)
+ switch_mm((prev),(next),
current
)
#endif
#endif