diff options
| author | Ingo Molnar <mingo@elte.hu> | 2009-03-03 00:08:56 +0300 |
|---|---|---|
| committer | Ingo Molnar <mingo@elte.hu> | 2009-03-03 00:08:56 +0300 |
| commit | c02368a9d059322f913a58111eade87a656fefd5 (patch) | |
| tree | 2f02dbbe69b86535f58d2010d9adfb20a9c16fb9 /kernel/cpuset.c | |
| parent | f17c75453b2d195eba0a90d9f16a3ba88c85b3b4 (diff) | |
| parent | 778ef1e6cbb049c9bcbf405936ee6f2b6e451892 (diff) | |
| download | linux-c02368a9d059322f913a58111eade87a656fefd5.tar.xz | |
Merge branch 'linus' into irq/genirq
Diffstat (limited to 'kernel/cpuset.c')
| -rw-r--r-- | kernel/cpuset.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/kernel/cpuset.c b/kernel/cpuset.c index a85678865c5e..f76db9dcaa05 100644 --- a/kernel/cpuset.c +++ b/kernel/cpuset.c @@ -61,6 +61,14 @@ #include <linux/cgroup.h> /* + * Workqueue for cpuset related tasks. + * + * Using kevent workqueue may cause deadlock when memory_migrate + * is set. So we create a separate workqueue thread for cpuset. + */ +static struct workqueue_struct *cpuset_wq; + +/* * Tracks how many cpusets are currently defined in system. * When there is only one cpuset (the root cpuset) we can * short circuit some hooks. @@ -831,7 +839,7 @@ static DECLARE_WORK(rebuild_sched_domains_work, do_rebuild_sched_domains); */ static void async_rebuild_sched_domains(void) { - schedule_work(&rebuild_sched_domains_work); + queue_work(cpuset_wq, &rebuild_sched_domains_work); } /* @@ -2111,6 +2119,9 @@ void __init cpuset_init_smp(void) hotcpu_notifier(cpuset_track_online_cpus, 0); hotplug_memory_notifier(cpuset_track_online_nodes, 10); + + cpuset_wq = create_singlethread_workqueue("cpuset"); + BUG_ON(!cpuset_wq); } /** |
