diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2009-03-30 21:00:26 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-03-30 21:00:26 -0400 |
commit | d17abcd5417d84cfa8a225160481203a37dc81d4 (patch) | |
tree | 74ce2c425c5c6550acec90bc92c8a3f735f0d257 /kernel/rcutorture.c | |
parent | db6f204019380c788f1de06ee937bdbccd60e5c0 (diff) | |
parent | bb75efddeaca89f8a67fd82cdcbaaf436cf17ca9 (diff) |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/rusty/linux-2.6-cpumask
* git://git.kernel.org/pub/scm/linux/kernel/git/rusty/linux-2.6-cpumask:
oprofile: Thou shalt not call __exit functions from __init functions
cpumask: remove the now-obsoleted pcibus_to_cpumask(): generic
cpumask: remove cpumask_t from core
cpumask: convert rcutorture.c
cpumask: use new cpumask_ functions in core code.
cpumask: remove references to struct irqaction's mask field.
cpumask: use mm_cpumask() wrapper: kernel/fork.c
cpumask: use set_cpu_active in init/main.c
cpumask: remove node_to_first_cpu
cpumask: fix seq_bitmap_*() functions.
cpumask: remove dangerous CPU_MASK_ALL_PTR, &CPU_MASK_ALL
Diffstat (limited to 'kernel/rcutorture.c')
-rw-r--r-- | kernel/rcutorture.c | 25 |
1 files changed, 17 insertions, 8 deletions
diff --git a/kernel/rcutorture.c b/kernel/rcutorture.c index 7c4142a79f0a..9b4a975a4b4a 100644 --- a/kernel/rcutorture.c +++ b/kernel/rcutorture.c | |||
@@ -126,6 +126,7 @@ static atomic_t n_rcu_torture_mberror; | |||
126 | static atomic_t n_rcu_torture_error; | 126 | static atomic_t n_rcu_torture_error; |
127 | static long n_rcu_torture_timers = 0; | 127 | static long n_rcu_torture_timers = 0; |
128 | static struct list_head rcu_torture_removed; | 128 | static struct list_head rcu_torture_removed; |
129 | static cpumask_var_t shuffle_tmp_mask; | ||
129 | 130 | ||
130 | static int stutter_pause_test = 0; | 131 | static int stutter_pause_test = 0; |
131 | 132 | ||
@@ -889,10 +890,9 @@ static int rcu_idle_cpu; /* Force all torture tasks off this CPU */ | |||
889 | */ | 890 | */ |
890 | static void rcu_torture_shuffle_tasks(void) | 891 | static void rcu_torture_shuffle_tasks(void) |
891 | { | 892 | { |
892 | cpumask_t tmp_mask; | ||
893 | int i; | 893 | int i; |
894 | 894 | ||
895 | cpus_setall(tmp_mask); | 895 | cpumask_setall(shuffle_tmp_mask); |
896 | get_online_cpus(); | 896 | get_online_cpus(); |
897 | 897 | ||
898 | /* No point in shuffling if there is only one online CPU (ex: UP) */ | 898 | /* No point in shuffling if there is only one online CPU (ex: UP) */ |
@@ -902,29 +902,29 @@ static void rcu_torture_shuffle_tasks(void) | |||
902 | } | 902 | } |
903 | 903 | ||
904 | if (rcu_idle_cpu != -1) | 904 | if (rcu_idle_cpu != -1) |
905 | cpu_clear(rcu_idle_cpu, tmp_mask); | 905 | cpumask_clear_cpu(rcu_idle_cpu, shuffle_tmp_mask); |
906 | 906 | ||
907 | set_cpus_allowed_ptr(current, &tmp_mask); | 907 | set_cpus_allowed_ptr(current, shuffle_tmp_mask); |
908 | 908 | ||
909 | if (reader_tasks) { | 909 | if (reader_tasks) { |
910 | for (i = 0; i < nrealreaders; i++) | 910 | for (i = 0; i < nrealreaders; i++) |
911 | if (reader_tasks[i]) | 911 | if (reader_tasks[i]) |
912 | set_cpus_allowed_ptr(reader_tasks[i], | 912 | set_cpus_allowed_ptr(reader_tasks[i], |
913 | &tmp_mask); | 913 | shuffle_tmp_mask); |
914 | } | 914 | } |
915 | 915 | ||
916 | if (fakewriter_tasks) { | 916 | if (fakewriter_tasks) { |
917 | for (i = 0; i < nfakewriters; i++) | 917 | for (i = 0; i < nfakewriters; i++) |
918 | if (fakewriter_tasks[i]) | 918 | if (fakewriter_tasks[i]) |
919 | set_cpus_allowed_ptr(fakewriter_tasks[i], | 919 | set_cpus_allowed_ptr(fakewriter_tasks[i], |
920 | &tmp_mask); | 920 | shuffle_tmp_mask); |
921 | } | 921 | } |
922 | 922 | ||
923 | if (writer_task) | 923 | if (writer_task) |
924 | set_cpus_allowed_ptr(writer_task, &tmp_mask); | 924 | set_cpus_allowed_ptr(writer_task, shuffle_tmp_mask); |
925 | 925 | ||
926 | if (stats_task) | 926 | if (stats_task) |
927 | set_cpus_allowed_ptr(stats_task, &tmp_mask); | 927 | set_cpus_allowed_ptr(stats_task, shuffle_tmp_mask); |
928 | 928 | ||
929 | if (rcu_idle_cpu == -1) | 929 | if (rcu_idle_cpu == -1) |
930 | rcu_idle_cpu = num_online_cpus() - 1; | 930 | rcu_idle_cpu = num_online_cpus() - 1; |
@@ -1012,6 +1012,7 @@ rcu_torture_cleanup(void) | |||
1012 | if (shuffler_task) { | 1012 | if (shuffler_task) { |
1013 | VERBOSE_PRINTK_STRING("Stopping rcu_torture_shuffle task"); | 1013 | VERBOSE_PRINTK_STRING("Stopping rcu_torture_shuffle task"); |
1014 | kthread_stop(shuffler_task); | 1014 | kthread_stop(shuffler_task); |
1015 | free_cpumask_var(shuffle_tmp_mask); | ||
1015 | } | 1016 | } |
1016 | shuffler_task = NULL; | 1017 | shuffler_task = NULL; |
1017 | 1018 | ||
@@ -1190,10 +1191,18 @@ rcu_torture_init(void) | |||
1190 | } | 1191 | } |
1191 | if (test_no_idle_hz) { | 1192 | if (test_no_idle_hz) { |
1192 | rcu_idle_cpu = num_online_cpus() - 1; | 1193 | rcu_idle_cpu = num_online_cpus() - 1; |
1194 | |||
1195 | if (!alloc_cpumask_var(&shuffle_tmp_mask, GFP_KERNEL)) { | ||
1196 | firsterr = -ENOMEM; | ||
1197 | VERBOSE_PRINTK_ERRSTRING("Failed to alloc mask"); | ||
1198 | goto unwind; | ||
1199 | } | ||
1200 | |||
1193 | /* Create the shuffler thread */ | 1201 | /* Create the shuffler thread */ |
1194 | shuffler_task = kthread_run(rcu_torture_shuffle, NULL, | 1202 | shuffler_task = kthread_run(rcu_torture_shuffle, NULL, |
1195 | "rcu_torture_shuffle"); | 1203 | "rcu_torture_shuffle"); |
1196 | if (IS_ERR(shuffler_task)) { | 1204 | if (IS_ERR(shuffler_task)) { |
1205 | free_cpumask_var(shuffle_tmp_mask); | ||
1197 | firsterr = PTR_ERR(shuffler_task); | 1206 | firsterr = PTR_ERR(shuffler_task); |
1198 | VERBOSE_PRINTK_ERRSTRING("Failed to create shuffler"); | 1207 | VERBOSE_PRINTK_ERRSTRING("Failed to create shuffler"); |
1199 | shuffler_task = NULL; | 1208 | shuffler_task = NULL; |