projects
/
openwrt
/
staging
/
blogic.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
| inline |
side by side
(parent:
db70089
)
workqueues: schedule_on_each_cpu: use flush_work()
author
Oleg Nesterov
<
[email protected]
>
Fri, 25 Jul 2008 08:47:49 +0000
(
01:47
-0700)
committer
Linus Torvalds
<
[email protected]
>
Fri, 25 Jul 2008 17:53:40 +0000
(10:53 -0700)
Change schedule_on_each_cpu() to use flush_work() instead of
flush_workqueue(), this way we don't wait for other work_struct's which
can be queued meanwhile.
Signed-off-by: Oleg Nesterov <
[email protected]
>
Cc: Jarek Poplawski <
[email protected]
>
Cc: Max Krasnyansky <
[email protected]
>
Cc: Peter Zijlstra <
[email protected]
>
Signed-off-by: Andrew Morton <
[email protected]
>
Signed-off-by: Linus Torvalds <
[email protected]
>
kernel/workqueue.c
patch
|
blob
|
history
diff --git
a/kernel/workqueue.c
b/kernel/workqueue.c
index ee41cf857d5578da5dad1fa649aaadefbebe34ff..5fbffd302eb5f0d61b924861825954b490fa4312 100644
(file)
--- a/
kernel/workqueue.c
+++ b/
kernel/workqueue.c
@@
-690,7
+690,8
@@
int schedule_on_each_cpu(work_func_t func)
set_bit(WORK_STRUCT_PENDING, work_data_bits(work));
__queue_work(per_cpu_ptr(keventd_wq->cpu_wq, cpu), work);
}
- flush_workqueue(keventd_wq);
+ for_each_online_cpu(cpu)
+ flush_work(per_cpu_ptr(works, cpu));
put_online_cpus();
free_percpu(works);
return 0;