aboutsummaryrefslogtreecommitdiffstats
path: root/kernel
diff options
context:
space:
mode:
authorTim Chen <tim.c.chen@linux.intel.com>2017-08-25 12:13:55 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2017-09-14 12:56:18 -0400
commit11a19c7b099f96d00a8dec52bfbb8475e89b6745 (patch)
treef1b357ea18df807c38355591ff929aaf4bb3e3f0 /kernel
parent2554db916586b228ce93e6f74a12fd7fe430a004 (diff)
sched/wait: Introduce wakeup boomark in wake_up_page_bit
Now that we have added breaks in the wait queue scan and allow bookmark on scan position, we put this logic in the wake_up_page_bit function. We can have very long page wait list in large system where multiple pages share the same wait list. We break the wake up walk here to allow other cpus a chance to access the list, and not to disable the interrupts when traversing the list for too long. This reduces the interrupt and rescheduling latency, and excessive page wait queue lock hold time. [ v2: Remove bookmark_wake_function ] Signed-off-by: Tim Chen <tim.c.chen@linux.intel.com> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'kernel')
-rw-r--r--kernel/sched/wait.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/kernel/sched/wait.c b/kernel/sched/wait.c
index 70701ef50465..98feab7933c7 100644
--- a/kernel/sched/wait.c
+++ b/kernel/sched/wait.c
@@ -165,6 +165,13 @@ void __wake_up_locked_key(struct wait_queue_head *wq_head, unsigned int mode, vo
165} 165}
166EXPORT_SYMBOL_GPL(__wake_up_locked_key); 166EXPORT_SYMBOL_GPL(__wake_up_locked_key);
167 167
168void __wake_up_locked_key_bookmark(struct wait_queue_head *wq_head,
169 unsigned int mode, void *key, wait_queue_entry_t *bookmark)
170{
171 __wake_up_common(wq_head, mode, 1, 0, key, bookmark);
172}
173EXPORT_SYMBOL_GPL(__wake_up_locked_key_bookmark);
174
168/** 175/**
169 * __wake_up_sync_key - wake up threads blocked on a waitqueue. 176 * __wake_up_sync_key - wake up threads blocked on a waitqueue.
170 * @wq_head: the waitqueue 177 * @wq_head: the waitqueue