Commit f985b1cd authored by Linus Torvalds's avatar Linus Torvalds

Merge http://linux-ntfs.bkbits.net/ntfs-2.5

into home.transmeta.com:/home/torvalds/v2.5/linux
parents a62cd1fe a71635e4
...@@ -311,21 +311,6 @@ static void inline do_trap(int trapnr, int signr, char *str, int vm86, ...@@ -311,21 +311,6 @@ static void inline do_trap(int trapnr, int signr, char *str, int vm86,
if (vm86 && regs->eflags & VM_MASK) if (vm86 && regs->eflags & VM_MASK)
goto vm86_trap; goto vm86_trap;
#ifdef CONFIG_PNPBIOS
if (regs->xcs == 0x60 || regs->xcs == 0x68)
{
extern u32 pnp_bios_fault_eip, pnp_bios_fault_esp;
extern u32 pnp_bios_is_utter_crap;
pnp_bios_is_utter_crap = 1;
printk(KERN_CRIT "PNPBIOS fault.. attempting recovery.\n");
__asm__ volatile(
"movl %0, %%esp\n\t"
"jmp *%1\n\t"
: "=a" (pnp_bios_fault_esp), "=b" (pnp_bios_fault_eip));
panic("do_trap: can't hit this");
}
#endif
if (!(regs->xcs & 3)) if (!(regs->xcs & 3))
goto kernel_trap; goto kernel_trap;
...@@ -341,7 +326,23 @@ static void inline do_trap(int trapnr, int signr, char *str, int vm86, ...@@ -341,7 +326,23 @@ static void inline do_trap(int trapnr, int signr, char *str, int vm86,
} }
kernel_trap: { kernel_trap: {
unsigned long fixup = search_exception_table(regs->eip); unsigned long fixup;
#ifdef CONFIG_PNPBIOS
if (unlikely((regs->xcs | 8) == 0x88)) /* 0x80 or 0x88 */
{
extern u32 pnp_bios_fault_eip, pnp_bios_fault_esp;
extern u32 pnp_bios_is_utter_crap;
pnp_bios_is_utter_crap = 1;
printk(KERN_CRIT "PNPBIOS fault.. attempting recovery.\n");
__asm__ volatile(
"movl %0, %%esp\n\t"
"jmp *%1\n\t"
: "=a" (pnp_bios_fault_esp), "=b" (pnp_bios_fault_eip));
panic("do_trap: can't hit this");
}
#endif
fixup = search_exception_table(regs->eip);
if (fixup) if (fixup)
regs->eip = fixup; regs->eip = fixup;
else else
......
...@@ -712,15 +712,19 @@ asmlinkage long sys_wait4(pid_t pid,unsigned int * stat_addr, int options, struc ...@@ -712,15 +712,19 @@ asmlinkage long sys_wait4(pid_t pid,unsigned int * stat_addr, int options, struc
if (retval) if (retval)
goto end_wait4; goto end_wait4;
retval = p->pid; retval = p->pid;
if (p->real_parent != p->parent || p->ptrace) { if (p->real_parent != p->parent) {
write_lock_irq(&tasklist_lock); write_lock_irq(&tasklist_lock);
remove_parent(p); ptrace_unlink(p);
p->parent = p->real_parent;
add_parent(p, p->parent);
do_notify_parent(p, SIGCHLD); do_notify_parent(p, SIGCHLD);
write_unlock_irq(&tasklist_lock); write_unlock_irq(&tasklist_lock);
} else } else {
if (p->ptrace) {
write_lock_irq(&tasklist_lock);
ptrace_unlink(p);
write_unlock_irq(&tasklist_lock);
}
release_task(p); release_task(p);
}
goto end_wait4; goto end_wait4;
default: default:
continue; continue;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment