* [tipc-discussion][net 0/2] improvement for wait and wakeup
@ 2019-02-19 4:20 Tung Nguyen
2019-02-19 4:20 ` [tipc-discussion][net 1/2] tipc: improve function tipc_wait_for_cond() Tung Nguyen
` (2 more replies)
0 siblings, 3 replies; 8+ messages in thread
From: Tung Nguyen @ 2019-02-19 4:20 UTC (permalink / raw)
To: davem, netdev; +Cc: tipc-discussion
Some improvements for tipc_wait_for_xzy().
Tung Nguyen (2):
tipc: improve function tipc_wait_for_cond()
tipc: improve function tipc_wait_for_rcvmsg()
net/tipc/socket.c | 11 ++++++-----
1 file changed, 6 insertions(+), 5 deletions(-)
--
2.17.1
^ permalink raw reply [flat|nested] 8+ messages in thread* [tipc-discussion][net 1/2] tipc: improve function tipc_wait_for_cond() 2019-02-19 4:20 [tipc-discussion][net 0/2] improvement for wait and wakeup Tung Nguyen @ 2019-02-19 4:20 ` Tung Nguyen 2023-03-14 17:45 ` [STABLE REQUEST] " Lee Jones 2019-02-19 4:20 ` [tipc-discussion][net 2/2] tipc: improve function tipc_wait_for_rcvmsg() Tung Nguyen 2019-02-21 21:58 ` [tipc-discussion][net 0/2] improvement for wait and wakeup David Miller 2 siblings, 1 reply; 8+ messages in thread From: Tung Nguyen @ 2019-02-19 4:20 UTC (permalink / raw) To: davem, netdev; +Cc: tipc-discussion Commit 844cf763fba6 ("tipc: make macro tipc_wait_for_cond() smp safe") replaced finish_wait() with remove_wait_queue() but still used prepare_to_wait(). This causes unnecessary conditional checking before adding to wait queue in prepare_to_wait(). This commit replaces prepare_to_wait() with add_wait_queue() as the pair function with remove_wait_queue(). Acked-by: Ying Xue <ying.xue@windriver.com> Acked-by: Jon Maloy <jon.maloy@ericsson.com> Signed-off-by: Tung Nguyen <tung.q.nguyen@dektech.com.au> --- net/tipc/socket.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/net/tipc/socket.c b/net/tipc/socket.c index 1217c90a363b..81b87916a0eb 100644 --- a/net/tipc/socket.c +++ b/net/tipc/socket.c @@ -388,7 +388,7 @@ static int tipc_sk_sock_err(struct socket *sock, long *timeout) rc_ = tipc_sk_sock_err((sock_), timeo_); \ if (rc_) \ break; \ - prepare_to_wait(sk_sleep(sk_), &wait_, TASK_INTERRUPTIBLE); \ + add_wait_queue(sk_sleep(sk_), &wait_); \ release_sock(sk_); \ *(timeo_) = wait_woken(&wait_, TASK_INTERRUPTIBLE, *(timeo_)); \ sched_annotate_sleep(); \ -- 2.17.1 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* [STABLE REQUEST] tipc: improve function tipc_wait_for_cond() 2019-02-19 4:20 ` [tipc-discussion][net 1/2] tipc: improve function tipc_wait_for_cond() Tung Nguyen @ 2023-03-14 17:45 ` Lee Jones 2023-03-14 17:57 ` Greg KH 0 siblings, 1 reply; 8+ messages in thread From: Lee Jones @ 2023-03-14 17:45 UTC (permalink / raw) To: Tung Nguyen, stable; +Cc: davem, netdev, tipc-discussion Dear Stable, > Commit 844cf763fba6 ("tipc: make macro tipc_wait_for_cond() smp safe") > replaced finish_wait() with remove_wait_queue() but still used > prepare_to_wait(). This causes unnecessary conditional > checking before adding to wait queue in prepare_to_wait(). > > This commit replaces prepare_to_wait() with add_wait_queue() > as the pair function with remove_wait_queue(). > > Acked-by: Ying Xue <ying.xue@windriver.com> > Acked-by: Jon Maloy <jon.maloy@ericsson.com> > Signed-off-by: Tung Nguyen <tung.q.nguyen@dektech.com.au> > --- > net/tipc/socket.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/net/tipc/socket.c b/net/tipc/socket.c > index 1217c90a363b..81b87916a0eb 100644 > --- a/net/tipc/socket.c > +++ b/net/tipc/socket.c > @@ -388,7 +388,7 @@ static int tipc_sk_sock_err(struct socket *sock, long *timeout) > rc_ = tipc_sk_sock_err((sock_), timeo_); \ > if (rc_) \ > break; \ > - prepare_to_wait(sk_sleep(sk_), &wait_, TASK_INTERRUPTIBLE); \ > + add_wait_queue(sk_sleep(sk_), &wait_); \ > release_sock(sk_); \ > *(timeo_) = wait_woken(&wait_, TASK_INTERRUPTIBLE, *(timeo_)); \ > sched_annotate_sleep(); \ Could we have this ol' classic backported to v4.19 and v4.14 please? -- Lee Jones [李琼斯] ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [STABLE REQUEST] tipc: improve function tipc_wait_for_cond() 2023-03-14 17:45 ` [STABLE REQUEST] " Lee Jones @ 2023-03-14 17:57 ` Greg KH 2023-03-14 18:04 ` Lee Jones 0 siblings, 1 reply; 8+ messages in thread From: Greg KH @ 2023-03-14 17:57 UTC (permalink / raw) To: Lee Jones; +Cc: Tung Nguyen, stable, davem, netdev, tipc-discussion On Tue, Mar 14, 2023 at 05:45:37PM +0000, Lee Jones wrote: > Dear Stable, > > > Commit 844cf763fba6 ("tipc: make macro tipc_wait_for_cond() smp safe") > > replaced finish_wait() with remove_wait_queue() but still used > > prepare_to_wait(). This causes unnecessary conditional > > checking before adding to wait queue in prepare_to_wait(). > > > > This commit replaces prepare_to_wait() with add_wait_queue() > > as the pair function with remove_wait_queue(). > > > > Acked-by: Ying Xue <ying.xue@windriver.com> > > Acked-by: Jon Maloy <jon.maloy@ericsson.com> > > Signed-off-by: Tung Nguyen <tung.q.nguyen@dektech.com.au> > > --- > > net/tipc/socket.c | 2 +- > > 1 file changed, 1 insertion(+), 1 deletion(-) > > > > diff --git a/net/tipc/socket.c b/net/tipc/socket.c > > index 1217c90a363b..81b87916a0eb 100644 > > --- a/net/tipc/socket.c > > +++ b/net/tipc/socket.c > > @@ -388,7 +388,7 @@ static int tipc_sk_sock_err(struct socket *sock, long *timeout) > > rc_ = tipc_sk_sock_err((sock_), timeo_); \ > > if (rc_) \ > > break; \ > > - prepare_to_wait(sk_sleep(sk_), &wait_, TASK_INTERRUPTIBLE); \ > > + add_wait_queue(sk_sleep(sk_), &wait_); \ > > release_sock(sk_); \ > > *(timeo_) = wait_woken(&wait_, TASK_INTERRUPTIBLE, *(timeo_)); \ > > sched_annotate_sleep(); \ > > Could we have this ol' classic backported to v4.19 and v4.14 please? What is the git commit id? ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [STABLE REQUEST] tipc: improve function tipc_wait_for_cond() 2023-03-14 17:57 ` Greg KH @ 2023-03-14 18:04 ` Lee Jones 2023-03-15 7:24 ` Greg KH 0 siblings, 1 reply; 8+ messages in thread From: Lee Jones @ 2023-03-14 18:04 UTC (permalink / raw) To: Greg KH; +Cc: Tung Nguyen, stable, davem, netdev, tipc-discussion On Tue, 14 Mar 2023, Greg KH wrote: > On Tue, Mar 14, 2023 at 05:45:37PM +0000, Lee Jones wrote: > > Dear Stable, > > > > > Commit 844cf763fba6 ("tipc: make macro tipc_wait_for_cond() smp safe") > > > replaced finish_wait() with remove_wait_queue() but still used > > > prepare_to_wait(). This causes unnecessary conditional > > > checking before adding to wait queue in prepare_to_wait(). > > > > > > This commit replaces prepare_to_wait() with add_wait_queue() > > > as the pair function with remove_wait_queue(). > > > > > > Acked-by: Ying Xue <ying.xue@windriver.com> > > > Acked-by: Jon Maloy <jon.maloy@ericsson.com> > > > Signed-off-by: Tung Nguyen <tung.q.nguyen@dektech.com.au> > > > --- > > > net/tipc/socket.c | 2 +- > > > 1 file changed, 1 insertion(+), 1 deletion(-) > > > > > > diff --git a/net/tipc/socket.c b/net/tipc/socket.c > > > index 1217c90a363b..81b87916a0eb 100644 > > > --- a/net/tipc/socket.c > > > +++ b/net/tipc/socket.c > > > @@ -388,7 +388,7 @@ static int tipc_sk_sock_err(struct socket *sock, long *timeout) > > > rc_ = tipc_sk_sock_err((sock_), timeo_); \ > > > if (rc_) \ > > > break; \ > > > - prepare_to_wait(sk_sleep(sk_), &wait_, TASK_INTERRUPTIBLE); \ > > > + add_wait_queue(sk_sleep(sk_), &wait_); \ > > > release_sock(sk_); \ > > > *(timeo_) = wait_woken(&wait_, TASK_INTERRUPTIBLE, *(timeo_)); \ > > > sched_annotate_sleep(); \ > > > > Could we have this ol' classic backported to v4.19 and v4.14 please? > > What is the git commit id? Sorry, it's 223b7329ec6a0. -- Lee Jones [李琼斯] ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [STABLE REQUEST] tipc: improve function tipc_wait_for_cond() 2023-03-14 18:04 ` Lee Jones @ 2023-03-15 7:24 ` Greg KH 0 siblings, 0 replies; 8+ messages in thread From: Greg KH @ 2023-03-15 7:24 UTC (permalink / raw) To: Lee Jones; +Cc: Tung Nguyen, stable, davem, netdev, tipc-discussion On Tue, Mar 14, 2023 at 06:04:30PM +0000, Lee Jones wrote: > On Tue, 14 Mar 2023, Greg KH wrote: > > > On Tue, Mar 14, 2023 at 05:45:37PM +0000, Lee Jones wrote: > > > Dear Stable, > > > > > > > Commit 844cf763fba6 ("tipc: make macro tipc_wait_for_cond() smp safe") > > > > replaced finish_wait() with remove_wait_queue() but still used > > > > prepare_to_wait(). This causes unnecessary conditional > > > > checking before adding to wait queue in prepare_to_wait(). > > > > > > > > This commit replaces prepare_to_wait() with add_wait_queue() > > > > as the pair function with remove_wait_queue(). > > > > > > > > Acked-by: Ying Xue <ying.xue@windriver.com> > > > > Acked-by: Jon Maloy <jon.maloy@ericsson.com> > > > > Signed-off-by: Tung Nguyen <tung.q.nguyen@dektech.com.au> > > > > --- > > > > net/tipc/socket.c | 2 +- > > > > 1 file changed, 1 insertion(+), 1 deletion(-) > > > > > > > > diff --git a/net/tipc/socket.c b/net/tipc/socket.c > > > > index 1217c90a363b..81b87916a0eb 100644 > > > > --- a/net/tipc/socket.c > > > > +++ b/net/tipc/socket.c > > > > @@ -388,7 +388,7 @@ static int tipc_sk_sock_err(struct socket *sock, long *timeout) > > > > rc_ = tipc_sk_sock_err((sock_), timeo_); \ > > > > if (rc_) \ > > > > break; \ > > > > - prepare_to_wait(sk_sleep(sk_), &wait_, TASK_INTERRUPTIBLE); \ > > > > + add_wait_queue(sk_sleep(sk_), &wait_); \ > > > > release_sock(sk_); \ > > > > *(timeo_) = wait_woken(&wait_, TASK_INTERRUPTIBLE, *(timeo_)); \ > > > > sched_annotate_sleep(); \ > > > > > > Could we have this ol' classic backported to v4.19 and v4.14 please? > > > > What is the git commit id? > > Sorry, it's 223b7329ec6a0. Now queued up, thanks. greg k-h ^ permalink raw reply [flat|nested] 8+ messages in thread
* [tipc-discussion][net 2/2] tipc: improve function tipc_wait_for_rcvmsg() 2019-02-19 4:20 [tipc-discussion][net 0/2] improvement for wait and wakeup Tung Nguyen 2019-02-19 4:20 ` [tipc-discussion][net 1/2] tipc: improve function tipc_wait_for_cond() Tung Nguyen @ 2019-02-19 4:20 ` Tung Nguyen 2019-02-21 21:58 ` [tipc-discussion][net 0/2] improvement for wait and wakeup David Miller 2 siblings, 0 replies; 8+ messages in thread From: Tung Nguyen @ 2019-02-19 4:20 UTC (permalink / raw) To: davem, netdev; +Cc: tipc-discussion This commit replaces schedule_timeout() with wait_woken() in function tipc_wait_for_rcvmsg(). wait_woken() uses memory barriers in its implementation to avoid potential race condition when putting a process into sleeping state and then waking it up. Acked-by: Ying Xue <ying.xue@windriver.com> Acked-by: Jon Maloy <jon.maloy@ericsson.com> Signed-off-by: Tung Nguyen <tung.q.nguyen@dektech.com.au> --- net/tipc/socket.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/net/tipc/socket.c b/net/tipc/socket.c index 81b87916a0eb..684f2125fc6b 100644 --- a/net/tipc/socket.c +++ b/net/tipc/socket.c @@ -1677,7 +1677,7 @@ static void tipc_sk_send_ack(struct tipc_sock *tsk) static int tipc_wait_for_rcvmsg(struct socket *sock, long *timeop) { struct sock *sk = sock->sk; - DEFINE_WAIT(wait); + DEFINE_WAIT_FUNC(wait, woken_wake_function); long timeo = *timeop; int err = sock_error(sk); @@ -1685,15 +1685,17 @@ static int tipc_wait_for_rcvmsg(struct socket *sock, long *timeop) return err; for (;;) { - prepare_to_wait(sk_sleep(sk), &wait, TASK_INTERRUPTIBLE); if (timeo && skb_queue_empty(&sk->sk_receive_queue)) { if (sk->sk_shutdown & RCV_SHUTDOWN) { err = -ENOTCONN; break; } + add_wait_queue(sk_sleep(sk), &wait); release_sock(sk); - timeo = schedule_timeout(timeo); + timeo = wait_woken(&wait, TASK_INTERRUPTIBLE, timeo); + sched_annotate_sleep(); lock_sock(sk); + remove_wait_queue(sk_sleep(sk), &wait); } err = 0; if (!skb_queue_empty(&sk->sk_receive_queue)) @@ -1709,7 +1711,6 @@ static int tipc_wait_for_rcvmsg(struct socket *sock, long *timeop) if (err) break; } - finish_wait(sk_sleep(sk), &wait); *timeop = timeo; return err; } -- 2.17.1 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [tipc-discussion][net 0/2] improvement for wait and wakeup 2019-02-19 4:20 [tipc-discussion][net 0/2] improvement for wait and wakeup Tung Nguyen 2019-02-19 4:20 ` [tipc-discussion][net 1/2] tipc: improve function tipc_wait_for_cond() Tung Nguyen 2019-02-19 4:20 ` [tipc-discussion][net 2/2] tipc: improve function tipc_wait_for_rcvmsg() Tung Nguyen @ 2019-02-21 21:58 ` David Miller 2 siblings, 0 replies; 8+ messages in thread From: David Miller @ 2019-02-21 21:58 UTC (permalink / raw) To: tung.q.nguyen; +Cc: netdev, tipc-discussion From: Tung Nguyen <tung.q.nguyen@dektech.com.au> Date: Tue, 19 Feb 2019 11:20:46 +0700 > Some improvements for tipc_wait_for_xzy(). Series applied. ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2023-03-15 7:24 UTC | newest] Thread overview: 8+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2019-02-19 4:20 [tipc-discussion][net 0/2] improvement for wait and wakeup Tung Nguyen 2019-02-19 4:20 ` [tipc-discussion][net 1/2] tipc: improve function tipc_wait_for_cond() Tung Nguyen 2023-03-14 17:45 ` [STABLE REQUEST] " Lee Jones 2023-03-14 17:57 ` Greg KH 2023-03-14 18:04 ` Lee Jones 2023-03-15 7:24 ` Greg KH 2019-02-19 4:20 ` [tipc-discussion][net 2/2] tipc: improve function tipc_wait_for_rcvmsg() Tung Nguyen 2019-02-21 21:58 ` [tipc-discussion][net 0/2] improvement for wait and wakeup David Miller
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.