patch-2.4.0-prerelease linux/arch/i386/kernel/process.c
Next file: linux/arch/i386/kernel/setup.c
Previous file: linux/arch/i386/kernel/pci-irq.c
Back to the patch index
Back to the overall index
- Lines: 65
- Date:
Sat Dec 30 09:58:55 2000
- Orig file:
v2.4.0-test12/linux/arch/i386/kernel/process.c
- Orig date:
Mon Dec 11 17:59:43 2000
diff -u --recursive --new-file v2.4.0-test12/linux/arch/i386/kernel/process.c linux/arch/i386/kernel/process.c
@@ -414,13 +414,13 @@
*/
void release_segments(struct mm_struct *mm)
{
- void * ldt = mm->segments;
+ void * ldt = mm->context.segments;
/*
* free the LDT
*/
if (ldt) {
- mm->segments = NULL;
+ mm->context.segments = NULL;
clear_LDT();
vfree(ldt);
}
@@ -478,7 +478,7 @@
void release_thread(struct task_struct *dead_task)
{
if (dead_task->mm) {
- void * ldt = dead_task->mm->segments;
+ void * ldt = dead_task->mm->context.segments;
// temporary debugging check
if (ldt) {
@@ -495,27 +495,22 @@
*/
void copy_segments(struct task_struct *p, struct mm_struct *new_mm)
{
- struct mm_struct * old_mm = current->mm;
- void * old_ldt = old_mm->segments, * ldt;
+ struct mm_struct * old_mm;
+ void *old_ldt, *ldt;
- if (!old_ldt) {
+ ldt = NULL;
+ old_mm = current->mm;
+ if (old_mm && (old_ldt = old_mm->context.segments) != NULL) {
/*
- * default LDT - use the one from init_task
+ * Completely new LDT, we initialize it from the parent:
*/
- new_mm->segments = NULL;
- return;
+ ldt = vmalloc(LDT_ENTRIES*LDT_ENTRY_SIZE);
+ if (!ldt)
+ printk(KERN_WARNING "ldt allocation failed\n");
+ else
+ memcpy(ldt, old_ldt, LDT_ENTRIES*LDT_ENTRY_SIZE);
}
-
- /*
- * Completely new LDT, we initialize it from the parent:
- */
- ldt = vmalloc(LDT_ENTRIES*LDT_ENTRY_SIZE);
- if (!ldt)
- printk(KERN_WARNING "ldt allocation failed\n");
- else
- memcpy(ldt, old_ldt, LDT_ENTRIES*LDT_ENTRY_SIZE);
- new_mm->segments = ldt;
- return;
+ new_mm->context.segments = ldt;
}
/*
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)