All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/3] More cleanups in do_wait() pathes
@ 2009-05-13 12:08 Vitaly Mayatskikh
  2009-05-13 12:08 ` [PATCH 1/3] Introduce "struct wait_info" to simplify wait_task*() pathes Vitaly Mayatskikh
                   ` (2 more replies)
  0 siblings, 3 replies; 8+ messages in thread
From: Vitaly Mayatskikh @ 2009-05-13 12:08 UTC (permalink / raw)
  To: Andrew Morton; +Cc: Oleg Nesterov, Ingo Molnar, Roland McGrath, linux-kernel

Further cleanups of do_wait() and friends. Thanks for all your
reviews of previous patches and ideas how to make it better. I'm currently
running kernel with these patches on my laptop for 1+ day, it is still able
to boot and live 5-10 hours w/o visible issues.

Next task is to optimize a bunch of put_user() in copy_wait_opts_to_user(),
but I'd like to use Ingo's idea with put_user_try/catch. Therefore, need to
implement generic stub for architectures which does not support try/catch yet.

Vitaly Mayatskikh (3):
  Introduce "struct wait_info" to simplify wait_task*() pathes
  Replace wait_noreap_copyout() by copy_wait_opts_to_user()
  Move more common code from wait_task_*() to copy_wait_opts_to_user()

 kernel/exit.c |  127 +++++++++++++++++++++++++++-----------------------------
 1 files changed, 61 insertions(+), 66 deletions(-)


^ permalink raw reply	[flat|nested] 8+ messages in thread

* [PATCH 1/3] Introduce "struct wait_info" to simplify wait_task*() pathes
  2009-05-13 12:08 [PATCH 0/3] More cleanups in do_wait() pathes Vitaly Mayatskikh
@ 2009-05-13 12:08 ` Vitaly Mayatskikh
  2009-05-13 18:13   ` Roland McGrath
  2009-05-13 12:08 ` [PATCH 2/3] Replace wait_noreap_copyout() by copy_wait_opts_to_user() Vitaly Mayatskikh
  2009-05-13 12:08 ` [PATCH 3/3] Move more common code from wait_task_*() to copy_wait_opts_to_user() Vitaly Mayatskikh
  2 siblings, 1 reply; 8+ messages in thread
From: Vitaly Mayatskikh @ 2009-05-13 12:08 UTC (permalink / raw)
  To: Andrew Morton; +Cc: Oleg Nesterov, Ingo Molnar, Roland McGrath, linux-kernel

There's too much parameters passing to wait_noreap_copyout() and
copy_wait_opts_to_user().

Introduce "struct wait_info" which holds data needed for user's siginfo
structure. This will save registers and some stack on
copy_wait_opts_to_user() invoke.

Signed-off-by: Vitaly Mayatskikh <v.mayatskih@gmail.com>
---
 kernel/exit.c |  116 +++++++++++++++++++++++++++++++--------------------------
 1 files changed, 63 insertions(+), 53 deletions(-)

diff --git a/kernel/exit.c b/kernel/exit.c
index f22e82c..f069bc1 100644
--- a/kernel/exit.c
+++ b/kernel/exit.c
@@ -1088,6 +1088,15 @@ struct wait_opts {
 	int			notask_error;
 };
 
+struct wait_info {
+	struct task_struct*	p;
+	pid_t			pid;
+	uid_t			uid;
+	int			why;
+	int			status;
+	int			signal;
+};
+
 static struct pid *task_pid_type(struct task_struct *task, enum pid_type type)
 {
 	struct pid *pid = NULL;
@@ -1123,36 +1132,36 @@ static int eligible_child(struct wait_opts *wo, struct task_struct *p)
 	return 1;
 }
 
-static int copy_wait_opts_to_user(struct wait_opts *wo, struct task_struct *p,
-				  pid_t pid, uid_t uid, int why, int status, int signal)
+static int copy_wait_opts_to_user(struct wait_opts *wo, struct wait_info *wi)
 {
 	struct siginfo __user *infop = wo->wo_info;
 	int retval = wo->wo_rusage
-		? getrusage(p, RUSAGE_BOTH, wo->wo_rusage) : 0;
+		? getrusage(wi->p, RUSAGE_BOTH, wo->wo_rusage) : 0;
 
 	if (!retval && infop) {
-		retval = put_user(signal, &infop->si_signo);
+		retval = put_user(wi->signal, &infop->si_signo);
 		if (!retval)
 			retval = put_user(0, &infop->si_errno);
 		if (!retval)
-			retval = put_user((short)why, &infop->si_code);
+			retval = put_user((short)wi->why, &infop->si_code);
 		if (!retval)
-			retval = put_user(pid, &infop->si_pid);
+			retval = put_user(wi->pid, &infop->si_pid);
 		if (!retval)
-			retval = put_user(uid, &infop->si_uid);
+			retval = put_user(wi->uid, &infop->si_uid);
 		if (!retval)
-			retval = put_user(status, &infop->si_status);
+			retval = put_user(wi->status, &infop->si_status);
 	}
 	return retval;
 }
 
-static int wait_noreap_copyout(struct wait_opts *wo, struct task_struct *p,
-				pid_t pid, uid_t uid, int why, int status)
+static int wait_noreap_copyout(struct wait_opts *wo, struct wait_info *wi)
 {
-	int retval = copy_wait_opts_to_user(wo, p, pid, uid, why, status, SIGCHLD);
-	put_task_struct(p);
+	int retval;
+	wi->signal = SIGCHLD;
+	retval = copy_wait_opts_to_user(wo, wi);
+	put_task_struct(wi->p);
 	if (!retval)
-		retval = pid;
+		retval = wi->pid;
 	return retval;
 }
 
@@ -1165,26 +1174,27 @@ static int wait_noreap_copyout(struct wait_opts *wo, struct task_struct *p,
 static int wait_task_zombie(struct wait_opts *wo, struct task_struct *p)
 {
 	unsigned long state;
-	int retval, why, status, traced;
-	pid_t pid = task_pid_vnr(p);
-	uid_t uid = __task_cred(p)->uid;
+	int retval, traced;
+	struct wait_info wi = { .p = p, .pid = task_pid_vnr(p),
+				.uid = __task_cred(p)->uid,
+				.signal = SIGCHLD };
 
 	if (!likely(wo->wo_flags & WEXITED))
 		return 0;
 
 	if (unlikely(wo->wo_flags & WNOWAIT)) {
-		int exit_code = p->exit_code;
+		wi.status = p->exit_code;
 
 		get_task_struct(p);
 		read_unlock(&tasklist_lock);
-		if ((exit_code & 0x7f) == 0) {
-			why = CLD_EXITED;
-			status = exit_code >> 8;
+		if ((wi.status & 0x7f) == 0) {
+			wi.why = CLD_EXITED;
+			wi.status >>= 8;
 		} else {
-			why = (exit_code & 0x80) ? CLD_DUMPED : CLD_KILLED;
-			status = exit_code & 0x7f;
+			wi.why = (wi.status & 0x80) ? CLD_DUMPED : CLD_KILLED;
+			wi.status &= 0x7f;
 		}
-		return wait_noreap_copyout(wo, p, pid, uid, why, status);
+		return wait_noreap_copyout(wo, &wi);
 	}
 
 	/*
@@ -1265,23 +1275,23 @@ static int wait_task_zombie(struct wait_opts *wo, struct task_struct *p)
 	 */
 	read_unlock(&tasklist_lock);
 
-	status = (p->signal->flags & SIGNAL_GROUP_EXIT)
+	wi.status = (p->signal->flags & SIGNAL_GROUP_EXIT)
 		? p->signal->group_exit_code : p->exit_code;
 	if (wo->wo_stat)
-		retval = put_user(status, wo->wo_stat);
+		retval = put_user(wi.status, wo->wo_stat);
 
-	if ((status & 0x7f) == 0) {
-		why = CLD_EXITED;
-		status >>= 8;
+	if ((wi.status & 0x7f) == 0) {
+		wi.why = CLD_EXITED;
+		wi.status >>= 8;
 	} else {
-		why = (status & 0x80) ? CLD_DUMPED : CLD_KILLED;
-		status &= 0x7f;
+		wi.why = (wi.status & 0x80) ? CLD_DUMPED : CLD_KILLED;
+		wi.status &= 0x7f;
 	}
 
-	retval = copy_wait_opts_to_user(wo, p, pid, uid, why, status, SIGCHLD);
+	retval = copy_wait_opts_to_user(wo, &wi);
 
 	if (!retval)
-		retval = pid;
+		retval = wi.pid;
 
 	if (traced) {
 		write_lock_irq(&tasklist_lock);
@@ -1328,9 +1338,8 @@ static int *task_stopped_code(struct task_struct *p, bool ptrace)
 static int wait_task_stopped(struct wait_opts *wo,
 				int ptrace, struct task_struct *p)
 {
-	int retval, exit_code, *p_code, why;
-	uid_t uid = 0; /* unneeded, required by compiler */
-	pid_t pid;
+	int retval, *p_code;
+	struct wait_info wi = { .p = p, .signal = SIGCHLD };
 
 	/*
 	 * Traditionally we see ptrace'd stopped tasks regardless of options.
@@ -1338,25 +1347,25 @@ static int wait_task_stopped(struct wait_opts *wo,
 	if (!ptrace && !(wo->wo_flags & WUNTRACED))
 		return 0;
 
-	exit_code = 0;
+	wi.status = 0;
 	spin_lock_irq(&p->sighand->siglock);
 
 	p_code = task_stopped_code(p, ptrace);
 	if (unlikely(!p_code))
 		goto unlock_sig;
 
-	exit_code = *p_code;
-	if (!exit_code)
+	wi.status = *p_code;
+	if (!wi.status)
 		goto unlock_sig;
 
 	if (!unlikely(wo->wo_flags & WNOWAIT))
 		*p_code = 0;
 
 	/* don't need the RCU readlock here as we're holding a spinlock */
-	uid = __task_cred(p)->uid;
+	wi.uid = __task_cred(p)->uid;
 unlock_sig:
 	spin_unlock_irq(&p->sighand->siglock);
-	if (!exit_code)
+	if (!wi.status)
 		return 0;
 
 	/*
@@ -1367,16 +1376,16 @@ unlock_sig:
 	 * possibly take page faults for user memory.
 	 */
 	get_task_struct(p);
-	pid = task_pid_vnr(p);
-	why = ptrace ? CLD_TRAPPED : CLD_STOPPED;
+	wi.pid = task_pid_vnr(p);
+	wi.why = ptrace ? CLD_TRAPPED : CLD_STOPPED;
 	read_unlock(&tasklist_lock);
 
-	retval = copy_wait_opts_to_user(wo, p, pid, uid, why, exit_code, SIGCHLD);
+	retval = copy_wait_opts_to_user(wo, &wi);
 
 	if (!retval && wo->wo_stat)
-		retval = put_user((exit_code << 8) | 0x7f, wo->wo_stat);
+		retval = put_user((wi.status << 8) | 0x7f, wo->wo_stat);
 	if (!retval)
-		retval = pid;
+		retval = wi.pid;
 	put_task_struct(p);
 
 	BUG_ON(!retval);
@@ -1392,8 +1401,8 @@ unlock_sig:
 static int wait_task_continued(struct wait_opts *wo, struct task_struct *p)
 {
 	int retval;
-	pid_t pid;
-	uid_t uid;
+	struct wait_info wi = { .p = p, .why = CLD_CONTINUED,
+				.status = SIGCONT, .signal = SIGCHLD };
 
 	if (!unlikely(wo->wo_flags & WCONTINUED))
 		return 0;
@@ -1409,21 +1418,21 @@ static int wait_task_continued(struct wait_opts *wo, struct task_struct *p)
 	}
 	if (!unlikely(wo->wo_flags & WNOWAIT))
 		p->signal->flags &= ~SIGNAL_STOP_CONTINUED;
-	uid = __task_cred(p)->uid;
+	wi.uid = __task_cred(p)->uid;
 	spin_unlock_irq(&p->sighand->siglock);
 
-	pid = task_pid_vnr(p);
+	wi.pid = task_pid_vnr(p);
 	get_task_struct(p);
 	read_unlock(&tasklist_lock);
 
-	retval = copy_wait_opts_to_user(wo, p, pid, uid,
-					CLD_CONTINUED, SIGCONT, SIGCHLD);
+	retval = copy_wait_opts_to_user(wo, &wi);
+
 	put_task_struct(p);
 
 	if (!retval && wo->wo_stat)
 		retval = put_user(0xffff, wo->wo_stat);
 	if (!retval)
-		retval = pid;
+		retval = wi.pid;
 
 	BUG_ON(retval == 0);
 
@@ -1588,7 +1597,8 @@ end:
 			 * we would set so the user can easily tell the
 			 * difference.
 			 */
-			retval = copy_wait_opts_to_user(wo, 0, 0, 0, 0, 0, 0);
+			struct wait_info wi = { 0 };
+			retval = copy_wait_opts_to_user(wo, &wi);
 		}
 	}
 	return retval;
-- 
1.6.2.2



^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 2/3] Replace wait_noreap_copyout() by copy_wait_opts_to_user()
  2009-05-13 12:08 [PATCH 0/3] More cleanups in do_wait() pathes Vitaly Mayatskikh
  2009-05-13 12:08 ` [PATCH 1/3] Introduce "struct wait_info" to simplify wait_task*() pathes Vitaly Mayatskikh
@ 2009-05-13 12:08 ` Vitaly Mayatskikh
  2009-05-13 12:08 ` [PATCH 3/3] Move more common code from wait_task_*() to copy_wait_opts_to_user() Vitaly Mayatskikh
  2 siblings, 0 replies; 8+ messages in thread
From: Vitaly Mayatskikh @ 2009-05-13 12:08 UTC (permalink / raw)
  To: Andrew Morton; +Cc: Oleg Nesterov, Ingo Molnar, Roland McGrath, linux-kernel

wait_noreap_copyout() currently is a short wrapper for
copy_wait_opts_to_user(), and wait_task_zombie() is the only one caller
of it.

Signed-off-by: Vitaly Mayatskikh <v.mayatskih@gmail.com>
---
 kernel/exit.c |   17 +++++------------
 1 files changed, 5 insertions(+), 12 deletions(-)

diff --git a/kernel/exit.c b/kernel/exit.c
index f069bc1..cea85c9 100644
--- a/kernel/exit.c
+++ b/kernel/exit.c
@@ -1154,17 +1154,6 @@ static int copy_wait_opts_to_user(struct wait_opts *wo, struct wait_info *wi)
 	return retval;
 }
 
-static int wait_noreap_copyout(struct wait_opts *wo, struct wait_info *wi)
-{
-	int retval;
-	wi->signal = SIGCHLD;
-	retval = copy_wait_opts_to_user(wo, wi);
-	put_task_struct(wi->p);
-	if (!retval)
-		retval = wi->pid;
-	return retval;
-}
-
 /*
  * Handle sys_wait4 work for one task in state EXIT_ZOMBIE.  We hold
  * read_lock(&tasklist_lock) on entry.  If we return zero, we still hold
@@ -1194,7 +1183,11 @@ static int wait_task_zombie(struct wait_opts *wo, struct task_struct *p)
 			wi.why = (wi.status & 0x80) ? CLD_DUMPED : CLD_KILLED;
 			wi.status &= 0x7f;
 		}
-		return wait_noreap_copyout(wo, &wi);
+		retval = copy_wait_opts_to_user(wo, &wi);
+		put_task_struct(p);
+		if (!retval)
+			retval = wi.pid;
+		return retval;
 	}
 
 	/*
-- 
1.6.2.2



^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 3/3] Move more common code from wait_task_*() to copy_wait_opts_to_user()
  2009-05-13 12:08 [PATCH 0/3] More cleanups in do_wait() pathes Vitaly Mayatskikh
  2009-05-13 12:08 ` [PATCH 1/3] Introduce "struct wait_info" to simplify wait_task*() pathes Vitaly Mayatskikh
  2009-05-13 12:08 ` [PATCH 2/3] Replace wait_noreap_copyout() by copy_wait_opts_to_user() Vitaly Mayatskikh
@ 2009-05-13 12:08 ` Vitaly Mayatskikh
  2 siblings, 0 replies; 8+ messages in thread
From: Vitaly Mayatskikh @ 2009-05-13 12:08 UTC (permalink / raw)
  To: Andrew Morton; +Cc: Oleg Nesterov, Ingo Molnar, Roland McGrath, linux-kernel

Roland McGrath pointed to more common checks and put_user() around
invoke of copy_wait_opts_to_user() in wait_task_*() functions.
This common code is moved to copy_wait_opts_to_user().

Signed-off-by: Vitaly Mayatskikh <v.mayatskih@gmail.com>
---
 kernel/exit.c |   40 ++++++++++++++++------------------------
 1 files changed, 16 insertions(+), 24 deletions(-)

diff --git a/kernel/exit.c b/kernel/exit.c
index cea85c9..cf41c2b 100644
--- a/kernel/exit.c
+++ b/kernel/exit.c
@@ -1095,6 +1095,7 @@ struct wait_info {
 	int			why;
 	int			status;
 	int			signal;
+	int			stat;
 };
 
 static struct pid *task_pid_type(struct task_struct *task, enum pid_type type)
@@ -1151,6 +1152,10 @@ static int copy_wait_opts_to_user(struct wait_opts *wo, struct wait_info *wi)
 		if (!retval)
 			retval = put_user(wi->status, &infop->si_status);
 	}
+	if (!retval && wo->wo_stat)
+		retval = put_user(wi->stat, wo->wo_stat);
+	if (!retval)
+		retval = wi->pid;
 	return retval;
 }
 
@@ -1166,7 +1171,7 @@ static int wait_task_zombie(struct wait_opts *wo, struct task_struct *p)
 	int retval, traced;
 	struct wait_info wi = { .p = p, .pid = task_pid_vnr(p),
 				.uid = __task_cred(p)->uid,
-				.signal = SIGCHLD };
+				.signal = SIGCHLD, .stat = 0 };
 
 	if (!likely(wo->wo_flags & WEXITED))
 		return 0;
@@ -1185,8 +1190,6 @@ static int wait_task_zombie(struct wait_opts *wo, struct task_struct *p)
 		}
 		retval = copy_wait_opts_to_user(wo, &wi);
 		put_task_struct(p);
-		if (!retval)
-			retval = wi.pid;
 		return retval;
 	}
 
@@ -1268,24 +1271,19 @@ static int wait_task_zombie(struct wait_opts *wo, struct task_struct *p)
 	 */
 	read_unlock(&tasklist_lock);
 
-	wi.status = (p->signal->flags & SIGNAL_GROUP_EXIT)
+	wi.stat = (p->signal->flags & SIGNAL_GROUP_EXIT)
 		? p->signal->group_exit_code : p->exit_code;
-	if (wo->wo_stat)
-		retval = put_user(wi.status, wo->wo_stat);
 
-	if ((wi.status & 0x7f) == 0) {
+	if ((wi.stat & 0x7f) == 0) {
 		wi.why = CLD_EXITED;
-		wi.status >>= 8;
+		wi.status = wi.stat >> 8;
 	} else {
-		wi.why = (wi.status & 0x80) ? CLD_DUMPED : CLD_KILLED;
-		wi.status &= 0x7f;
+		wi.why = (wi.stat & 0x80) ? CLD_DUMPED : CLD_KILLED;
+		wi.status = wi.stat & 0x7f;
 	}
 
 	retval = copy_wait_opts_to_user(wo, &wi);
 
-	if (!retval)
-		retval = wi.pid;
-
 	if (traced) {
 		write_lock_irq(&tasklist_lock);
 		/* We dropped tasklist, ptracer could die and untrace */
@@ -1369,16 +1367,14 @@ unlock_sig:
 	 * possibly take page faults for user memory.
 	 */
 	get_task_struct(p);
+	read_unlock(&tasklist_lock);
+
 	wi.pid = task_pid_vnr(p);
 	wi.why = ptrace ? CLD_TRAPPED : CLD_STOPPED;
-	read_unlock(&tasklist_lock);
+	wi.stat = (wi.status << 8) | 0x7f;
 
 	retval = copy_wait_opts_to_user(wo, &wi);
 
-	if (!retval && wo->wo_stat)
-		retval = put_user((wi.status << 8) | 0x7f, wo->wo_stat);
-	if (!retval)
-		retval = wi.pid;
 	put_task_struct(p);
 
 	BUG_ON(!retval);
@@ -1395,7 +1391,8 @@ static int wait_task_continued(struct wait_opts *wo, struct task_struct *p)
 {
 	int retval;
 	struct wait_info wi = { .p = p, .why = CLD_CONTINUED,
-				.status = SIGCONT, .signal = SIGCHLD };
+				.status = SIGCONT, .signal = SIGCHLD,
+				.stat = 0xffff };
 
 	if (!unlikely(wo->wo_flags & WCONTINUED))
 		return 0;
@@ -1422,11 +1419,6 @@ static int wait_task_continued(struct wait_opts *wo, struct task_struct *p)
 
 	put_task_struct(p);
 
-	if (!retval && wo->wo_stat)
-		retval = put_user(0xffff, wo->wo_stat);
-	if (!retval)
-		retval = wi.pid;
-
 	BUG_ON(retval == 0);
 
 	return retval;
-- 
1.6.2.2


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH 1/3] Introduce "struct wait_info" to simplify wait_task*() pathes
  2009-05-13 12:08 ` [PATCH 1/3] Introduce "struct wait_info" to simplify wait_task*() pathes Vitaly Mayatskikh
@ 2009-05-13 18:13   ` Roland McGrath
  2009-05-13 19:05     ` Vitaly Mayatskikh
  0 siblings, 1 reply; 8+ messages in thread
From: Roland McGrath @ 2009-05-13 18:13 UTC (permalink / raw)
  To: Vitaly Mayatskikh; +Cc: Andrew Morton, Oleg Nesterov, Ingo Molnar, linux-kernel

What's the benefit of this?  Those parameters are probably happily in
registers and compiled well, I would guess.  Adding more memory copying
does not seem like a benefit.  Have you verified that your change reduces
code size or something like that?


Thanks,
Roland

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 1/3] Introduce "struct wait_info" to simplify wait_task*() pathes
  2009-05-13 18:13   ` Roland McGrath
@ 2009-05-13 19:05     ` Vitaly Mayatskikh
  2009-05-15 17:37       ` Ingo Molnar
  0 siblings, 1 reply; 8+ messages in thread
From: Vitaly Mayatskikh @ 2009-05-13 19:05 UTC (permalink / raw)
  To: Roland McGrath
  Cc: Vitaly Mayatskikh, Andrew Morton, Oleg Nesterov, Ingo Molnar,
	linux-kernel

At Wed, 13 May 2009 11:13:58 -0700 (PDT), Roland McGrath wrote:

> What's the benefit of this?  Those parameters are probably happily in
> registers and compiled well, I would guess.  Adding more memory copying
> does not seem like a benefit.  Have you verified that your change reduces
> code size or something like that?

Yeah, I was wrong. There's no benefit in size of .text

-- 
wbr, Vitaly

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 1/3] Introduce "struct wait_info" to simplify wait_task*() pathes
  2009-05-13 19:05     ` Vitaly Mayatskikh
@ 2009-05-15 17:37       ` Ingo Molnar
  2009-05-16 10:45         ` Vitaly Mayatskikh
  0 siblings, 1 reply; 8+ messages in thread
From: Ingo Molnar @ 2009-05-15 17:37 UTC (permalink / raw)
  To: Vitaly Mayatskikh
  Cc: Roland McGrath, Andrew Morton, Oleg Nesterov, linux-kernel


* Vitaly Mayatskikh <v.mayatskih@gmail.com> wrote:

> At Wed, 13 May 2009 11:13:58 -0700 (PDT), Roland McGrath wrote:
> 
> > What's the benefit of this?  Those parameters are probably 
> > happily in registers and compiled well, I would guess.  Adding 
> > more memory copying does not seem like a benefit.  Have you 
> > verified that your change reduces code size or something like 
> > that?
> 
> Yeah, I was wrong. There's no benefit in size of .text

but there's a lot of benefit in cleanliness - just look at the 
simplification of the prototypes.

	Ingo

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 1/3] Introduce "struct wait_info" to simplify wait_task*() pathes
  2009-05-15 17:37       ` Ingo Molnar
@ 2009-05-16 10:45         ` Vitaly Mayatskikh
  0 siblings, 0 replies; 8+ messages in thread
From: Vitaly Mayatskikh @ 2009-05-16 10:45 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: Vitaly Mayatskikh, Roland McGrath, Andrew Morton, Oleg Nesterov,
	linux-kernel

At Fri, 15 May 2009 19:37:20 +0200, Ingo Molnar wrote:

> > Yeah, I was wrong. There's no benefit in size of .text
> 
> but there's a lot of benefit in cleanliness - just look at the 
> simplification of the prototypes.

Simplification was my other intention. Ok, I'll wait for Oleg's review :)

-- 
wbr, Vitaly

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2009-05-16 10:45 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-05-13 12:08 [PATCH 0/3] More cleanups in do_wait() pathes Vitaly Mayatskikh
2009-05-13 12:08 ` [PATCH 1/3] Introduce "struct wait_info" to simplify wait_task*() pathes Vitaly Mayatskikh
2009-05-13 18:13   ` Roland McGrath
2009-05-13 19:05     ` Vitaly Mayatskikh
2009-05-15 17:37       ` Ingo Molnar
2009-05-16 10:45         ` Vitaly Mayatskikh
2009-05-13 12:08 ` [PATCH 2/3] Replace wait_noreap_copyout() by copy_wait_opts_to_user() Vitaly Mayatskikh
2009-05-13 12:08 ` [PATCH 3/3] Move more common code from wait_task_*() to copy_wait_opts_to_user() Vitaly Mayatskikh

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.