aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/linux/rcupdate.h3
-rw-r--r--kernel/rcutorture.c33
-rw-r--r--kernel/rcutree_trace.c25
-rw-r--r--lib/list_debug.c6
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);
427static inline void rcu_preempt_sleep_check(void) 427static 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 */
434static inline void rcu_preempt_sleep_check(void) 433static 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
51MODULE_LICENSE("GPL"); 51MODULE_LICENSE("GPL");
52MODULE_AUTHOR("Paul E. McKenney <paulmck@us.ibm.com> and " 52MODULE_AUTHOR("Paul E. McKenney <paulmck@us.ibm.com> and Josh Triplett <josh@freedesktop.org>");
53 "Josh Triplett <josh@freedesktop.org>");
54 53
55static int nreaders = -1; /* # reader threads, defaults to 2*ncpus */ 54static int nreaders = -1; /* # reader threads, defaults to 2*ncpus */
56static int nfakewriters = 4; /* # fake writer threads */ 55static 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
219static void print_one_rcu_node_boost(struct seq_file *m, struct rcu_node *rnp) 219static 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
379static void print_one_rcu_pending(struct seq_file *m, struct rcu_data *rdp) 378static 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;