Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1606816

[PATCH-tip v6 21/22] sched, TP-futex: Make wake_up_q() return wakeup count

From Waiman Long <longman@redhat.com>
Newsgroups linux.kernel
Subject [PATCH-tip v6 21/22] sched, TP-futex: Make wake_up_q() return wakeup count
Date 2017-03-22 18:50 +0100
Message-ID <tnSyt-6bg-17@gated-at.bofh.it> (permalink)
References <tnSyt-6bg-3@gated-at.bofh.it>
Organization linux.* mail to news gateway

Show all headers | View raw


Unlike wake_up_process(), wake_up_q() doesn't tell us how many
tasks have been woken up. This information can sometimes be useful
for tracking purpose. So wake_up_q() is now modified to return that
information.

Signed-off-by: Waiman Long <longman@redhat.com>
---
 include/linux/sched/wake_q.h | 2 +-
 kernel/futex.c               | 8 +++-----
 kernel/sched/core.c          | 6 ++++--
 3 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/include/linux/sched/wake_q.h b/include/linux/sched/wake_q.h
index d03d8a9..8b88fc0 100644
--- a/include/linux/sched/wake_q.h
+++ b/include/linux/sched/wake_q.h
@@ -48,6 +48,6 @@ static inline void wake_q_init(struct wake_q_head *head)
 
 extern void wake_q_add(struct wake_q_head *head,
 		       struct task_struct *task);
-extern void wake_up_q(struct wake_q_head *head);
+extern int wake_up_q(struct wake_q_head *head);
 
 #endif /* _LINUX_SCHED_WAKE_Q_H */
diff --git a/kernel/futex.c b/kernel/futex.c
index 984b836..a199574 100644
--- a/kernel/futex.c
+++ b/kernel/futex.c
@@ -4298,11 +4298,9 @@ static int futex_unlock(u32 __user *uaddr, unsigned int flags,
 out_put_key:
 	put_futex_key(&key);
 	if (owner) {
-		/*
-		 * No error would have happened if owner defined.
-		 */
-		wake_up_q(&wake_q);
-		return ret ? ret : 1;
+		int cnt = wake_up_q(&wake_q);
+
+		return ret ? ret : cnt;
 	}
 
 	return ret;
diff --git a/kernel/sched/core.c b/kernel/sched/core.c
index 6d6cad9..2193d59 100644
--- a/kernel/sched/core.c
+++ b/kernel/sched/core.c
@@ -447,9 +447,10 @@ void wake_q_add(struct wake_q_head *head, struct task_struct *task)
 	head->lastp = &node->next;
 }
 
-void wake_up_q(struct wake_q_head *head)
+int wake_up_q(struct wake_q_head *head)
 {
 	struct wake_q_node *node = head->first;
+	int wakecnt = 0;
 
 	while (node != WAKE_Q_TAIL) {
 		struct task_struct *task;
@@ -464,9 +465,10 @@ void wake_up_q(struct wake_q_head *head)
 		 * wake_up_process() implies a wmb() to pair with the queueing
 		 * in wake_q_add() so as not to miss wakeups.
 		 */
-		wake_up_process(task);
+		wakecnt += wake_up_process(task);
 		put_task_struct(task);
 	}
+	return wakecnt;
 }
 
 /*
-- 
1.8.3.1

Back to linux.kernel | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

[PATCH-tip v6 00/22] futex: Introducing throughput-optimized (TP) futexes Waiman Long <longman@redhat.com> - 2017-03-22 18:50 +0100
  [PATCH-tip v6 12/22] TP-futex: Return status code on FUTEX_LOCK calls Waiman Long <longman@redhat.com> - 2017-03-22 18:50 +0100
  [PATCH-tip v6 11/22] TP-futex: Implement lock handoff to prevent lock starvation Waiman Long <longman@redhat.com> - 2017-03-22 18:50 +0100
  [PATCH-tip v6 20/22] perf bench: Extend mutex/rwlock futex suite to test TP futexes Waiman Long <longman@redhat.com> - 2017-03-22 18:50 +0100
  [PATCH-tip v6 21/22] sched, TP-futex: Make wake_up_q() return wakeup count Waiman Long <longman@redhat.com> - 2017-03-22 18:50 +0100
  [PATCH-tip v6 02/22] perf bench: New microbenchmark for userspace rwlock performance Waiman Long <longman@redhat.com> - 2017-03-22 18:50 +0100
  [PATCH-tip v6 03/22] futex: Consolidate duplicated timer setup code Waiman Long <longman@redhat.com> - 2017-03-22 18:50 +0100
  [PATCH-tip v6 04/22] futex: Rename futex_pi_state to futex_state Waiman Long <longman@redhat.com> - 2017-03-22 18:50 +0100
  [PATCH-tip v6 22/22] futex: Dump internal futex state via debugfs Waiman Long <longman@redhat.com> - 2017-03-22 18:50 +0100
  [PATCH-tip v6 19/22] TP-futex, doc: Update TP futexes document on shared locking Waiman Long <longman@redhat.com> - 2017-03-22 18:50 +0100
  [PATCH-tip v6 08/22] futex: Allow direct attachment of futex_state objects to hash bucket Waiman Long <longman@redhat.com> - 2017-03-22 18:50 +0100
  [PATCH-tip v6 09/22] futex: Introduce throughput-optimized (TP) futexes Waiman Long <longman@redhat.com> - 2017-03-22 18:50 +0100
  [PATCH-tip v6 01/22] perf bench: New microbenchmark for userspace mutex performance Waiman Long <longman@redhat.com> - 2017-03-22 18:50 +0100
  [PATCH-tip v6 18/22] TP-futex: Group readers together in wait queue Waiman Long <longman@redhat.com> - 2017-03-22 18:50 +0100
    Re: [PATCH-tip v6 18/22] TP-futex: Group readers together in wait  queue kbuild test robot <lkp@intel.com> - 2017-03-24 09:30 +0100
    Re: [PATCH-tip v6 18/22] TP-futex: Group readers together in wait  queue kbuild test robot <lkp@intel.com> - 2017-03-24 09:40 +0100
  [PATCH-tip v6 16/22] TP-futex: Support userspace reader/writer locks Waiman Long <longman@redhat.com> - 2017-03-22 18:50 +0100
  [PATCH-tip v6 13/22] TP-futex: Add timeout support Waiman Long <longman@redhat.com> - 2017-03-22 18:50 +0100
  [PATCH-tip v6 17/22] TP-futex: Enable kernel reader lock stealing Waiman Long <longman@redhat.com> - 2017-03-22 18:50 +0100
  [PATCH-tip v6 05/22] futex: Add helpers to get & cmpxchg futex value without lock Waiman Long <longman@redhat.com> - 2017-03-22 18:50 +0100
  [PATCH-tip v6 10/22] TP-futex: Enable robust handling Waiman Long <longman@redhat.com> - 2017-03-22 18:50 +0100
  [PATCH-tip v6 07/22] futex: Add a new futex type field into futex_state Waiman Long <longman@redhat.com> - 2017-03-22 18:50 +0100
  [PATCH-tip v6 15/22] TP-futex, doc: Add TP futexes documentation Waiman Long <longman@redhat.com> - 2017-03-22 18:50 +0100
  [PATCH-tip v6 14/22] TP-futex: Optionally return EAGAIN for userspace locking Waiman Long <longman@redhat.com> - 2017-03-22 18:50 +0100

csiph-web