lkml.org 
[lkml]   [2003]   [May]   [20]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Subject[PATCH] do_fork fixes on Alpha
From
Date
Richard, Linus,

The enclosed patch updates the Alpha architecture to the new do_fork
prototype (as of latest BK), following what has been done on x86.

Patched kernel is running fine on Jensen and AS1000. SMP case
compiles, but otherwise untested.

Thanks,

M.

===== arch/alpha/kernel/process.c 1.26 vs edited =====
--- 1.26/arch/alpha/kernel/process.c Mon Mar 3 03:13:32 2003
+++ edited/arch/alpha/kernel/process.c Tue May 20 13:44:13 2003
@@ -235,23 +235,18 @@
alpha_clone(unsigned long clone_flags, unsigned long usp, int *parent_tid,
int *child_tid, unsigned long tls_value, struct pt_regs *regs)
{
- struct task_struct *p;
-
if (!usp)
usp = rdusp();

- p = do_fork(clone_flags & ~CLONE_IDLETASK, usp, regs, 0,
- parent_tid, child_tid);
- return IS_ERR(p) ? PTR_ERR(p) : p->pid;
+ return do_fork(clone_flags & ~CLONE_IDLETASK, usp, regs, 0,
+ parent_tid, child_tid);
}

int
alpha_vfork(struct pt_regs *regs)
{
- struct task_struct *p;
- p = do_fork(CLONE_VFORK | CLONE_VM | SIGCHLD, rdusp(),
- regs, 0, NULL, NULL);
- return IS_ERR(p) ? PTR_ERR(p) : p->pid;
+ return do_fork(CLONE_VFORK | CLONE_VM | SIGCHLD, rdusp(),
+ regs, 0, NULL, NULL);
}

/*
===== arch/alpha/kernel/smp.c 1.34 vs edited =====
--- 1.34/arch/alpha/kernel/smp.c Tue Apr 1 00:29:49 2003
+++ edited/arch/alpha/kernel/smp.c Tue May 20 14:35:12 2003
@@ -417,7 +417,12 @@
/* Don't care about the contents of regs since we'll never
reschedule the forked task. */
struct pt_regs regs;
- return do_fork(CLONE_VM|CLONE_IDLETASK, 0, &regs, 0, NULL, NULL);
+ int pid;
+ pid = do_fork(CLONE_VM|CLONE_IDLETASK, 0, &regs, 0, NULL, NULL);
+ if (pid < 0)
+ return NULL;
+
+ return find_task_by_pid (pid);
}

/*
@@ -436,7 +441,7 @@
wish. We can't use kernel_thread since we must avoid
rescheduling the child. */
idle = fork_by_hand();
- if (IS_ERR(idle))
+ if (!idle)
panic("failed fork for CPU %d", cpuid);

init_idle(idle, cpuid);
--
Places change, faces change. Life is so very strange.
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/

\
 
 \ /
  Last update: 2005-03-22 13:35    [W:0.017 / U:0.200 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site