summaryrefslogtreecommitdiffstats
path: root/arch/i386/kernel/process.c
diff options
context:
space:
mode:
authorRalf Baechle <ralf@linux-mips.org>2000-02-04 07:40:19 +0000
committerRalf Baechle <ralf@linux-mips.org>2000-02-04 07:40:19 +0000
commit33263fc5f9ac8e8cb2b22d06af3ce5ac1dd815e4 (patch)
tree2d1b86a40bef0958a68cf1a2eafbeb0667a70543 /arch/i386/kernel/process.c
parent216f5f51aa02f8b113aa620ebc14a9631a217a00 (diff)
Merge with Linux 2.3.32.
Diffstat (limited to 'arch/i386/kernel/process.c')
-rw-r--r--arch/i386/kernel/process.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/arch/i386/kernel/process.c b/arch/i386/kernel/process.c
index 429c4eacd..4f9c94353 100644
--- a/arch/i386/kernel/process.c
+++ b/arch/i386/kernel/process.c
@@ -204,9 +204,11 @@ void machine_restart(char * __unused)
{
#if __SMP__
/*
- * turn off the IO-APIC, so we can do a clean reboot
+ * Stop all CPUs and turn off local APICs and the IO-APIC, so
+ * other OSs see a clean IRQ state.
*/
- init_pic_mode();
+ smp_send_stop();
+ disable_IO_APIC();
#endif
if(!reboot_thru_bios) {
@@ -460,7 +462,7 @@ int copy_thread(int nr, unsigned long clone_flags, unsigned long esp,
struct pt_regs * childregs;
childregs = ((struct pt_regs *) (THREAD_SIZE + (unsigned long) p)) - 1;
- *childregs = *regs;
+ struct_cpy(childregs, regs);
childregs->eax = 0;
childregs->esp = esp;
@@ -473,7 +475,7 @@ int copy_thread(int nr, unsigned long clone_flags, unsigned long esp,
savesegment(gs,p->thread.gs);
unlazy_fpu(current);
- p->thread.i387 = current->thread.i387;
+ struct_cpy(&p->thread.i387, &current->thread.i387);
return 0;
}