History

cpumask: convert kernel/workqueue.c

Impact: Reduce memory usage, use new cpumask API. cpu_populated_map becomes a cpumask_var_t, and cpu_singlethread_map is simply a cpumask pointer: it's simply the cpumask containing the first possible CPU anyway.

Rusty Russell committed 17 years ago

Commit e7577c51 parent a45185d1 file · +14 −12Browse files

Showing the changes to kernel/workqueue.c (1 of 1 file). Show all

Unified · Split

kernel/workqueue.c+14−12
@@ -73,7 +73,7 @@ static DEFINE_SPINLOCK(workqueue_lock); · 72 unmodified lines
7373 static LIST_HEAD(workqueues);
7474
7575 static int singlethread_cpu __read_mostly;
76−static cpumask_t cpu_singlethread_map __read_mostly;
76+static const struct cpumask *cpu_singlethread_map __read_mostly;
7777 /*
7878 * _cpu_down() first removes CPU from cpu_online_map, then CPU_DEAD
7979 * flushes cwq->worklist. This means that flush_workqueue/wait_on_work
@@ -81,7 +81,7 @@ static cpumask_t cpu_singlethread_map __read_mostly; · 1 unmodified line
8181 * use cpu_possible_map, the cpumask below is more a documentation
8282 * than optimization.
8383 */
84−static cpumask_t cpu_populated_map __read_mostly;
84+static cpumask_var_t cpu_populated_map __read_mostly;
8585
8686 /* If it's single threaded, it isn't in the list of workqueues. */
8787 static inline int is_wq_single_threaded(struct workqueue_struct *wq)
@@ -89,10 +89,10 @@ static inline int is_wq_single_threaded(struct workqueue_struct *wq) · 1 unmodified line
8989 return wq->singlethread;
9090 }
9191
92−static const cpumask_t *wq_cpu_map(struct workqueue_struct *wq)
92+static const struct cpumask *wq_cpu_map(struct workqueue_struct *wq)
9393 {
9494 return is_wq_single_threaded(wq)
95− ? &cpu_singlethread_map : &cpu_populated_map;
95+ ? cpu_singlethread_map : cpu_populated_map;
9696 }
9797
9898 static
@@ -410,7 +410,7 @@ static int flush_cpu_workqueue(struct cpu_workqueue_struct *cwq) · 311 unmodified lines
410410 */
411411 void flush_workqueue(struct workqueue_struct *wq)
412412 {
413− const cpumask_t *cpu_map = wq_cpu_map(wq);
413+ const struct cpumask *cpu_map = wq_cpu_map(wq);
414414 int cpu;
415415
416416 might_sleep();
@@ -532,7 +532,7 @@ static void wait_on_work(struct work_struct *work) · 115 unmodified lines
532532 {
533533 struct cpu_workqueue_struct *cwq;
534534 struct workqueue_struct *wq;
535− const cpumask_t *cpu_map;
535+ const struct cpumask *cpu_map;
536536 int cpu;
537537
538538 might_sleep();
@@ -903,7 +903,7 @@ static void cleanup_workqueue_thread(struct cpu_workqueue_struct *cwq) · 364 unmodified lines
903903 */
904904 void destroy_workqueue(struct workqueue_struct *wq)
905905 {
906− const cpumask_t *cpu_map = wq_cpu_map(wq);
906+ const struct cpumask *cpu_map = wq_cpu_map(wq);
907907 int cpu;
908908
909909 cpu_maps_update_begin();
@@ -933,7 +933,7 @@ static int __devinit workqueue_cpu_callback(struct notifier_block *nfb, · 23 unmodified lines
933933
934934 switch (action) {
935935 case CPU_UP_PREPARE:
936− cpu_set(cpu, cpu_populated_map);
936+ cpumask_set_cpu(cpu, cpu_populated_map);
937937 }
938938 undo:
939939 list_for_each_entry(wq, &workqueues, list) {
@@ -964,7 +964,7 @@ undo: · 24 unmodified lines
964964 switch (action) {
965965 case CPU_UP_CANCELED:
966966 case CPU_POST_DEAD:
967− cpu_clear(cpu, cpu_populated_map);
967+ cpumask_clear_cpu(cpu, cpu_populated_map);
968968 }
969969
970970 return ret;
@@ -1017,9 +1017,11 @@ EXPORT_SYMBOL_GPL(work_on_cpu); · 46 unmodified lines
10171017
10181018 void __init init_workqueues(void)
10191019 {
1020− cpu_populated_map = cpu_online_map;
1021− singlethread_cpu = first_cpu(cpu_possible_map);
1022− cpu_singlethread_map = cpumask_of_cpu(singlethread_cpu);
1020+ alloc_cpumask_var(&cpu_populated_map, GFP_KERNEL);
1021+
1022+ cpumask_copy(cpu_populated_map, cpu_online_mask);
1023+ singlethread_cpu = cpumask_first(cpu_possible_mask);
1024+ cpu_singlethread_map = cpumask_of(singlethread_cpu);
10231025 hotcpu_notifier(workqueue_cpu_callback, 0);
10241026 keventd_wq = create_workqueue("events");
10251027 BUG_ON(!keventd_wq);

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t