diff options
-rw-r--r-- | include/linux/rcupdate.h | 3 | ||||
-rw-r--r-- | kernel/rcutorture.c | 33 | ||||
-rw-r--r-- | kernel/rcutree_trace.c | 25 | ||||
-rw-r--r-- | lib/list_debug.c | 6 |
4 files changed, 29 insertions, 38 deletions
diff --git a/include/linux/rcupdate.h b/include/linux/rcupdate.h index c2c0d86dd3ac..115ead2b5155 100644 --- a/include/linux/rcupdate.h +++ b/include/linux/rcupdate.h | |||
@@ -427,8 +427,7 @@ extern int rcu_my_thread_group_empty(void); | |||
427 | static inline void rcu_preempt_sleep_check(void) | 427 | static inline void rcu_preempt_sleep_check(void) |
428 | { | 428 | { |
429 | rcu_lockdep_assert(!lock_is_held(&rcu_lock_map), | 429 | rcu_lockdep_assert(!lock_is_held(&rcu_lock_map), |
430 | "Illegal context switch in RCU read-side " | 430 | "Illegal context switch in RCU read-side critical section"); |
431 | "critical section"); | ||
432 | } | 431 | } |
433 | #else /* #ifdef CONFIG_PROVE_RCU */ | 432 | #else /* #ifdef CONFIG_PROVE_RCU */ |
434 | static inline void rcu_preempt_sleep_check(void) | 433 | static inline void rcu_preempt_sleep_check(void) |
diff --git a/kernel/rcutorture.c b/kernel/rcutorture.c index 155fb129b641..25b15033c61f 100644 --- a/kernel/rcutorture.c +++ b/kernel/rcutorture.c | |||
@@ -49,8 +49,7 @@ | |||
49 | #include <asm/byteorder.h> | 49 | #include <asm/byteorder.h> |
50 | 50 | ||
51 | MODULE_LICENSE("GPL"); | 51 | MODULE_LICENSE("GPL"); |
52 | MODULE_AUTHOR("Paul E. McKenney <paulmck@us.ibm.com> and " | 52 | MODULE_AUTHOR("Paul E. McKenney <paulmck@us.ibm.com> and Josh Triplett <josh@freedesktop.org>"); |
53 | "Josh Triplett <josh@freedesktop.org>"); | ||
54 | 53 | ||
55 | static int nreaders = -1; /* # reader threads, defaults to 2*ncpus */ | 54 | static int nreaders = -1; /* # reader threads, defaults to 2*ncpus */ |
56 | static int nfakewriters = 4; /* # fake writer threads */ | 55 | static int nfakewriters = 4; /* # fake writer threads */ |
@@ -1200,27 +1199,27 @@ rcu_torture_printk(char *page) | |||
1200 | } | 1199 | } |
1201 | cnt += sprintf(&page[cnt], "%s%s ", torture_type, TORTURE_FLAG); | 1200 | cnt += sprintf(&page[cnt], "%s%s ", torture_type, TORTURE_FLAG); |
1202 | cnt += sprintf(&page[cnt], | 1201 | cnt += sprintf(&page[cnt], |
1203 | "rtc: %p ver: %lu tfle: %d rta: %d rtaf: %d rtf: %d " | 1202 | "rtc: %p ver: %lu tfle: %d rta: %d rtaf: %d rtf: %d ", |
1204 | "rtmbe: %d rtbke: %ld rtbre: %ld " | ||
1205 | "rtbf: %ld rtb: %ld nt: %ld " | ||
1206 | "onoff: %ld/%ld:%ld/%ld " | ||
1207 | "barrier: %ld/%ld:%ld", | ||
1208 | rcu_torture_current, | 1203 | rcu_torture_current, |
1209 | rcu_torture_current_version, | 1204 | rcu_torture_current_version, |
1210 | list_empty(&rcu_torture_freelist), | 1205 | list_empty(&rcu_torture_freelist), |
1211 | atomic_read(&n_rcu_torture_alloc), | 1206 | atomic_read(&n_rcu_torture_alloc), |
1212 | atomic_read(&n_rcu_torture_alloc_fail), | 1207 | atomic_read(&n_rcu_torture_alloc_fail), |
1213 | atomic_read(&n_rcu_torture_free), | 1208 | atomic_read(&n_rcu_torture_free)); |
1209 | cnt += sprintf(&page[cnt], "rtmbe: %d rtbke: %ld rtbre: %ld ", | ||
1214 | atomic_read(&n_rcu_torture_mberror), | 1210 | atomic_read(&n_rcu_torture_mberror), |
1215 | n_rcu_torture_boost_ktrerror, | 1211 | n_rcu_torture_boost_ktrerror, |
1216 | n_rcu_torture_boost_rterror, | 1212 | n_rcu_torture_boost_rterror); |
1213 | cnt += sprintf(&page[cnt], "rtbf: %ld rtb: %ld nt: %ld ", | ||
1217 | n_rcu_torture_boost_failure, | 1214 | n_rcu_torture_boost_failure, |
1218 | n_rcu_torture_boosts, | 1215 | n_rcu_torture_boosts, |
1219 | n_rcu_torture_timers, | 1216 | n_rcu_torture_timers); |
1217 | cnt += sprintf(&page[cnt], "onoff: %ld/%ld:%ld/%ld ", | ||
1220 | n_online_successes, | 1218 | n_online_successes, |
1221 | n_online_attempts, | 1219 | n_online_attempts, |
1222 | n_offline_successes, | 1220 | n_offline_successes, |
1223 | n_offline_attempts, | 1221 | n_offline_attempts); |
1222 | cnt += sprintf(&page[cnt], "barrier: %ld/%ld:%ld", | ||
1224 | n_barrier_successes, | 1223 | n_barrier_successes, |
1225 | n_barrier_attempts, | 1224 | n_barrier_attempts, |
1226 | n_rcu_torture_barrier_error); | 1225 | n_rcu_torture_barrier_error); |
@@ -1462,8 +1461,7 @@ rcu_torture_shutdown(void *arg) | |||
1462 | delta = shutdown_time - jiffies_snap; | 1461 | delta = shutdown_time - jiffies_snap; |
1463 | if (verbose) | 1462 | if (verbose) |
1464 | printk(KERN_ALERT "%s" TORTURE_FLAG | 1463 | printk(KERN_ALERT "%s" TORTURE_FLAG |
1465 | "rcu_torture_shutdown task: %lu " | 1464 | "rcu_torture_shutdown task: %lu jiffies remaining\n", |
1466 | "jiffies remaining\n", | ||
1467 | torture_type, delta); | 1465 | torture_type, delta); |
1468 | schedule_timeout_interruptible(delta); | 1466 | schedule_timeout_interruptible(delta); |
1469 | jiffies_snap = ACCESS_ONCE(jiffies); | 1467 | jiffies_snap = ACCESS_ONCE(jiffies); |
@@ -1515,8 +1513,7 @@ rcu_torture_onoff(void *arg) | |||
1515 | if (cpu_down(cpu) == 0) { | 1513 | if (cpu_down(cpu) == 0) { |
1516 | if (verbose) | 1514 | if (verbose) |
1517 | printk(KERN_ALERT "%s" TORTURE_FLAG | 1515 | printk(KERN_ALERT "%s" TORTURE_FLAG |
1518 | "rcu_torture_onoff task: " | 1516 | "rcu_torture_onoff task: offlined %d\n", |
1519 | "offlined %d\n", | ||
1520 | torture_type, cpu); | 1517 | torture_type, cpu); |
1521 | n_offline_successes++; | 1518 | n_offline_successes++; |
1522 | } | 1519 | } |
@@ -1529,8 +1526,7 @@ rcu_torture_onoff(void *arg) | |||
1529 | if (cpu_up(cpu) == 0) { | 1526 | if (cpu_up(cpu) == 0) { |
1530 | if (verbose) | 1527 | if (verbose) |
1531 | printk(KERN_ALERT "%s" TORTURE_FLAG | 1528 | printk(KERN_ALERT "%s" TORTURE_FLAG |
1532 | "rcu_torture_onoff task: " | 1529 | "rcu_torture_onoff task: onlined %d\n", |
1533 | "onlined %d\n", | ||
1534 | torture_type, cpu); | 1530 | torture_type, cpu); |
1535 | n_online_successes++; | 1531 | n_online_successes++; |
1536 | } | 1532 | } |
@@ -1952,8 +1948,7 @@ rcu_torture_init(void) | |||
1952 | return -EINVAL; | 1948 | return -EINVAL; |
1953 | } | 1949 | } |
1954 | if (cur_ops->fqs == NULL && fqs_duration != 0) { | 1950 | if (cur_ops->fqs == NULL && fqs_duration != 0) { |
1955 | printk(KERN_ALERT "rcu-torture: ->fqs NULL and non-zero " | 1951 | printk(KERN_ALERT "rcu-torture: ->fqs NULL and non-zero fqs_duration, fqs disabled.\n"); |
1956 | "fqs_duration, fqs disabled.\n"); | ||
1957 | fqs_duration = 0; | 1952 | fqs_duration = 0; |
1958 | } | 1953 | } |
1959 | if (cur_ops->init) | 1954 | if (cur_ops->init) |
diff --git a/kernel/rcutree_trace.c b/kernel/rcutree_trace.c index a16ddbd6fdc4..abffb486e94e 100644 --- a/kernel/rcutree_trace.c +++ b/kernel/rcutree_trace.c | |||
@@ -218,8 +218,7 @@ static const struct file_operations rcudata_csv_fops = { | |||
218 | 218 | ||
219 | static void print_one_rcu_node_boost(struct seq_file *m, struct rcu_node *rnp) | 219 | static void print_one_rcu_node_boost(struct seq_file *m, struct rcu_node *rnp) |
220 | { | 220 | { |
221 | seq_printf(m, "%d:%d tasks=%c%c%c%c kt=%c ntb=%lu neb=%lu nnb=%lu " | 221 | seq_printf(m, "%d:%d tasks=%c%c%c%c kt=%c ntb=%lu neb=%lu nnb=%lu ", |
222 | "j=%04x bt=%04x\n", | ||
223 | rnp->grplo, rnp->grphi, | 222 | rnp->grplo, rnp->grphi, |
224 | "T."[list_empty(&rnp->blkd_tasks)], | 223 | "T."[list_empty(&rnp->blkd_tasks)], |
225 | "N."[!rnp->gp_tasks], | 224 | "N."[!rnp->gp_tasks], |
@@ -227,11 +226,11 @@ static void print_one_rcu_node_boost(struct seq_file *m, struct rcu_node *rnp) | |||
227 | "B."[!rnp->boost_tasks], | 226 | "B."[!rnp->boost_tasks], |
228 | convert_kthread_status(rnp->boost_kthread_status), | 227 | convert_kthread_status(rnp->boost_kthread_status), |
229 | rnp->n_tasks_boosted, rnp->n_exp_boosts, | 228 | rnp->n_tasks_boosted, rnp->n_exp_boosts, |
230 | rnp->n_normal_boosts, | 229 | rnp->n_normal_boosts); |
230 | seq_printf(m, "j=%04x bt=%04x\n", | ||
231 | (int)(jiffies & 0xffff), | 231 | (int)(jiffies & 0xffff), |
232 | (int)(rnp->boost_time & 0xffff)); | 232 | (int)(rnp->boost_time & 0xffff)); |
233 | seq_printf(m, "%s: nt=%lu egt=%lu bt=%lu nb=%lu ny=%lu nos=%lu\n", | 233 | seq_printf(m, " balk: nt=%lu egt=%lu bt=%lu nb=%lu ny=%lu nos=%lu\n", |
234 | " balk", | ||
235 | rnp->n_balk_blkd_tasks, | 234 | rnp->n_balk_blkd_tasks, |
236 | rnp->n_balk_exp_gp_tasks, | 235 | rnp->n_balk_exp_gp_tasks, |
237 | rnp->n_balk_boost_tasks, | 236 | rnp->n_balk_boost_tasks, |
@@ -287,11 +286,11 @@ static void print_one_rcu_state(struct seq_file *m, struct rcu_state *rsp) | |||
287 | struct rcu_node *rnp; | 286 | struct rcu_node *rnp; |
288 | 287 | ||
289 | gpnum = rsp->gpnum; | 288 | gpnum = rsp->gpnum; |
290 | seq_printf(m, "%s: c=%lu g=%lu s=%d jfq=%ld j=%x " | 289 | seq_printf(m, "%s: c=%lu g=%lu s=%d jfq=%ld j=%x ", |
291 | "nfqs=%lu/nfqsng=%lu(%lu) fqlh=%lu oqlen=%ld/%ld\n", | ||
292 | rsp->name, rsp->completed, gpnum, rsp->fqs_state, | 290 | rsp->name, rsp->completed, gpnum, rsp->fqs_state, |
293 | (long)(rsp->jiffies_force_qs - jiffies), | 291 | (long)(rsp->jiffies_force_qs - jiffies), |
294 | (int)(jiffies & 0xffff), | 292 | (int)(jiffies & 0xffff)); |
293 | seq_printf(m, "nfqs=%lu/nfqsng=%lu(%lu) fqlh=%lu oqlen=%ld/%ld\n", | ||
295 | rsp->n_force_qs, rsp->n_force_qs_ngp, | 294 | rsp->n_force_qs, rsp->n_force_qs_ngp, |
296 | rsp->n_force_qs - rsp->n_force_qs_ngp, | 295 | rsp->n_force_qs - rsp->n_force_qs_ngp, |
297 | rsp->n_force_qs_lh, rsp->qlen_lazy, rsp->qlen); | 296 | rsp->n_force_qs_lh, rsp->qlen_lazy, rsp->qlen); |
@@ -378,16 +377,16 @@ static const struct file_operations rcugp_fops = { | |||
378 | 377 | ||
379 | static void print_one_rcu_pending(struct seq_file *m, struct rcu_data *rdp) | 378 | static void print_one_rcu_pending(struct seq_file *m, struct rcu_data *rdp) |
380 | { | 379 | { |
381 | seq_printf(m, "%3d%cnp=%ld " | 380 | seq_printf(m, "%3d%cnp=%ld ", |
382 | "qsp=%ld rpq=%ld cbr=%ld cng=%ld " | ||
383 | "gpc=%ld gps=%ld nf=%ld nn=%ld\n", | ||
384 | rdp->cpu, | 381 | rdp->cpu, |
385 | cpu_is_offline(rdp->cpu) ? '!' : ' ', | 382 | cpu_is_offline(rdp->cpu) ? '!' : ' ', |
386 | rdp->n_rcu_pending, | 383 | rdp->n_rcu_pending); |
384 | seq_printf(m, "qsp=%ld rpq=%ld cbr=%ld cng=%ld ", | ||
387 | rdp->n_rp_qs_pending, | 385 | rdp->n_rp_qs_pending, |
388 | rdp->n_rp_report_qs, | 386 | rdp->n_rp_report_qs, |
389 | rdp->n_rp_cb_ready, | 387 | rdp->n_rp_cb_ready, |
390 | rdp->n_rp_cpu_needs_gp, | 388 | rdp->n_rp_cpu_needs_gp); |
389 | seq_printf(m, "gpc=%ld gps=%ld nf=%ld nn=%ld\n", | ||
391 | rdp->n_rp_gp_completed, | 390 | rdp->n_rp_gp_completed, |
392 | rdp->n_rp_gp_started, | 391 | rdp->n_rp_gp_started, |
393 | rdp->n_rp_need_fqs, | 392 | rdp->n_rp_need_fqs, |
diff --git a/lib/list_debug.c b/lib/list_debug.c index 23a5e031cd8b..c24c2f7e296f 100644 --- a/lib/list_debug.c +++ b/lib/list_debug.c | |||
@@ -87,12 +87,10 @@ void __list_add_rcu(struct list_head *new, | |||
87 | struct list_head *prev, struct list_head *next) | 87 | struct list_head *prev, struct list_head *next) |
88 | { | 88 | { |
89 | WARN(next->prev != prev, | 89 | WARN(next->prev != prev, |
90 | "list_add_rcu corruption. next->prev should be " | 90 | "list_add_rcu corruption. next->prev should be prev (%p), but was %p. (next=%p).\n", |
91 | "prev (%p), but was %p. (next=%p).\n", | ||
92 | prev, next->prev, next); | 91 | prev, next->prev, next); |
93 | WARN(prev->next != next, | 92 | WARN(prev->next != next, |
94 | "list_add_rcu corruption. prev->next should be " | 93 | "list_add_rcu corruption. prev->next should be next (%p), but was %p. (prev=%p).\n", |
95 | "next (%p), but was %p. (prev=%p).\n", | ||
96 | next, prev->next, prev); | 94 | next, prev->next, prev); |
97 | new->next = next; | 95 | new->next = next; |
98 | new->prev = prev; | 96 | new->prev = prev; |