patch-2.4.25 linux-2.4.25/include/asm-i386/mmu_context.h
Next file: linux-2.4.25/include/asm-i386/processor.h
Previous file: linux-2.4.25/include/asm-i386/mmu.h
Back to the patch index
Back to the overall index
- Lines: 52
- Date:
2004-02-18 05:36:32.000000000 -0800
- Orig file:
linux-2.4.24/include/asm-i386/mmu_context.h
- Orig date:
2002-08-02 17:39:45.000000000 -0700
diff -urN linux-2.4.24/include/asm-i386/mmu_context.h linux-2.4.25/include/asm-i386/mmu_context.h
@@ -7,10 +7,12 @@
#include <asm/pgalloc.h>
/*
- * possibly do the LDT unload here?
+ * hooks to add arch specific data into the mm struct.
+ * Note that destroy_context is called even if init_new_context
+ * fails.
*/
-#define destroy_context(mm) do { } while(0)
-#define init_new_context(tsk,mm) 0
+int init_new_context(struct task_struct *tsk, struct mm_struct *mm);
+void destroy_context(struct mm_struct *mm);
#ifdef CONFIG_SMP
@@ -30,19 +32,18 @@
if (prev != next) {
/* stop flush ipis for the previous mm */
clear_bit(cpu, &prev->cpu_vm_mask);
- /*
- * Re-load LDT if necessary
- */
- if (prev->context.segments != next->context.segments)
- load_LDT(next);
#ifdef CONFIG_SMP
cpu_tlbstate[cpu].state = TLBSTATE_OK;
cpu_tlbstate[cpu].active_mm = next;
#endif
set_bit(cpu, &next->cpu_vm_mask);
- set_bit(cpu, &next->context.cpuvalid);
/* Re-load page tables */
load_cr3(next->pgd);
+ /* load_LDT, if either the previous or next thread
+ * has a non-default LDT.
+ */
+ if (next->context.size+prev->context.size)
+ load_LDT(&next->context);
}
#ifdef CONFIG_SMP
else {
@@ -54,9 +55,8 @@
* tlb flush IPI delivery. We must reload %cr3.
*/
load_cr3(next->pgd);
+ load_LDT(&next->context);
}
- if (!test_and_set_bit(cpu, &next->context.cpuvalid))
- load_LDT(next);
}
#endif
}
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)