The documentation for schedule_on_each_cpu() states that it calls a function on each online CPU from keventd. This can easily be interpreted as an asyncronous call because the description does not mention that flush_work is called. Clarify that it is synchronous. tj: rephrased a bit
Showing the changes to kernel/workqueue.c (1 of 1 file). Show all
Unified · Split
| @@ -2676,13 +2676,15 @@ int schedule_delayed_work_on(int cpu, · 2675 unmodified lines | ||
| 2676 | 2676 | EXPORT_SYMBOL(schedule_delayed_work_on); |
| 2677 | 2677 | |
| 2678 | 2678 | /** |
| 2679 | − * schedule_on_each_cpu - call a function on each online CPU from keventd | |
| 2679 | + * schedule_on_each_cpu - execute a function synchronously on each online CPU | |
| 2680 | 2680 | * @func: the function to call |
| 2681 | 2681 | * |
| 2682 | − * Returns zero on success. | |
| 2683 | − * Returns -ve errno on failure. | |
| 2684 | − * | |
| 2682 | + * schedule_on_each_cpu() executes @func on each online CPU using the | |
| 2683 | + * system workqueue and blocks until all CPUs have completed. | |
| 2685 | 2684 | * schedule_on_each_cpu() is very slow. |
| 2685 | + * | |
| 2686 | + * RETURNS: | |
| 2687 | + * 0 on success, -errno on failure. | |
| 2686 | 2688 | */ |
| 2687 | 2689 | int schedule_on_each_cpu(work_func_t func) |
| 2688 | 2690 | { |