tree: https://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-rcu.git
rcu/dev
head: b151f93a71fc9fecb560e823a92402d882516483
commit: b151f93a71fc9fecb560e823a92402d882516483 [62/62] torture: Eliminate
torture_runnable
reproduce:
# apt-get install sparse
git checkout b151f93a71fc9fecb560e823a92402d882516483
make ARCH=x86_64 allmodconfig
make C=1 CF=-D__CHECK_ENDIAN__
sparse warnings: (new ones prefixed by >>)
vim +649 kernel/rcu/rcuperf.c
8704baab9 Paul E. McKenney 2015-12-31 638
8704baab9 Paul E. McKenney 2015-12-31 639 static int __init
8704baab9 Paul E. McKenney 2015-12-31 640 rcu_perf_init(void)
8704baab9 Paul E. McKenney 2015-12-31 641 {
8704baab9 Paul E. McKenney 2015-12-31 642 long i;
8704baab9 Paul E. McKenney 2015-12-31 643 int firsterr = 0;
8704baab9 Paul E. McKenney 2015-12-31 644 static struct rcu_perf_ops
*perf_ops[] = {
f60cb4d4c Paul E. McKenney 2017-04-19 645 &rcu_ops, &rcu_bh_ops,
&srcu_ops, &srcud_ops, &sched_ops,
f1dbc54b9 Paul E. McKenney 2017-05-25 646 &tasks_ops,
8704baab9 Paul E. McKenney 2015-12-31 647 };
8704baab9 Paul E. McKenney 2015-12-31 648
8704baab9 Paul E. McKenney 2015-12-31 @649 if
(!torture_init_begin(perf_type, verbose, &perf_runnable))
8704baab9 Paul E. McKenney 2015-12-31 650 return -EBUSY;
8704baab9 Paul E. McKenney 2015-12-31 651
8704baab9 Paul E. McKenney 2015-12-31 652 /* Process args and tell the
world that the perf'er is on the job. */
8704baab9 Paul E. McKenney 2015-12-31 653 for (i = 0; i <
ARRAY_SIZE(perf_ops); i++) {
8704baab9 Paul E. McKenney 2015-12-31 654 cur_ops = perf_ops[i];
8704baab9 Paul E. McKenney 2015-12-31 655 if (strcmp(perf_type,
cur_ops->name) == 0)
8704baab9 Paul E. McKenney 2015-12-31 656 break;
8704baab9 Paul E. McKenney 2015-12-31 657 }
8704baab9 Paul E. McKenney 2015-12-31 658 if (i == ARRAY_SIZE(perf_ops)) {
8704baab9 Paul E. McKenney 2015-12-31 659 pr_alert("rcu-perf:
invalid perf type: \"%s\"\n",
8704baab9 Paul E. McKenney 2015-12-31 660 perf_type);
8704baab9 Paul E. McKenney 2015-12-31 661 pr_alert("rcu-perf
types:");
8704baab9 Paul E. McKenney 2015-12-31 662 for (i = 0; i <
ARRAY_SIZE(perf_ops); i++)
8704baab9 Paul E. McKenney 2015-12-31 663 pr_alert(" %s",
perf_ops[i]->name);
8704baab9 Paul E. McKenney 2015-12-31 664 pr_alert("\n");
8704baab9 Paul E. McKenney 2015-12-31 665 firsterr = -EINVAL;
8704baab9 Paul E. McKenney 2015-12-31 666 goto unwind;
8704baab9 Paul E. McKenney 2015-12-31 667 }
8704baab9 Paul E. McKenney 2015-12-31 668 if (cur_ops->init)
8704baab9 Paul E. McKenney 2015-12-31 669 cur_ops->init();
8704baab9 Paul E. McKenney 2015-12-31 670
8704baab9 Paul E. McKenney 2015-12-31 671 nrealwriters =
compute_real(nwriters);
8704baab9 Paul E. McKenney 2015-12-31 672 nrealreaders =
compute_real(nreaders);
8704baab9 Paul E. McKenney 2015-12-31 673
atomic_set(&n_rcu_perf_reader_started, 0);
8704baab9 Paul E. McKenney 2015-12-31 674
atomic_set(&n_rcu_perf_writer_started, 0);
8704baab9 Paul E. McKenney 2015-12-31 675
atomic_set(&n_rcu_perf_writer_finished, 0);
8704baab9 Paul E. McKenney 2015-12-31 676
rcu_perf_print_module_parms(cur_ops, "Start of test");
8704baab9 Paul E. McKenney 2015-12-31 677
8704baab9 Paul E. McKenney 2015-12-31 678 /* Start up the kthreads. */
8704baab9 Paul E. McKenney 2015-12-31 679
8704baab9 Paul E. McKenney 2015-12-31 680 if (shutdown) {
8704baab9 Paul E. McKenney 2015-12-31 681
init_waitqueue_head(&shutdown_wq);
8704baab9 Paul E. McKenney 2015-12-31 682 firsterr =
torture_create_kthread(rcu_perf_shutdown, NULL,
8704baab9 Paul E. McKenney 2015-12-31 683
shutdown_task);
8704baab9 Paul E. McKenney 2015-12-31 684 if (firsterr)
8704baab9 Paul E. McKenney 2015-12-31 685 goto unwind;
8704baab9 Paul E. McKenney 2015-12-31 686
schedule_timeout_uninterruptible(1);
8704baab9 Paul E. McKenney 2015-12-31 687 }
8704baab9 Paul E. McKenney 2015-12-31 688 reader_tasks =
kcalloc(nrealreaders, sizeof(reader_tasks[0]),
8704baab9 Paul E. McKenney 2015-12-31 689
GFP_KERNEL);
8704baab9 Paul E. McKenney 2015-12-31 690 if (reader_tasks == NULL) {
8704baab9 Paul E. McKenney 2015-12-31 691
VERBOSE_PERFOUT_ERRSTRING("out of memory");
8704baab9 Paul E. McKenney 2015-12-31 692 firsterr = -ENOMEM;
8704baab9 Paul E. McKenney 2015-12-31 693 goto unwind;
8704baab9 Paul E. McKenney 2015-12-31 694 }
8704baab9 Paul E. McKenney 2015-12-31 695 for (i = 0; i < nrealreaders;
i++) {
6b558c4c7 Paul E. McKenney 2016-01-12 696 firsterr =
torture_create_kthread(rcu_perf_reader, (void *)i,
8704baab9 Paul E. McKenney 2015-12-31 697
reader_tasks[i]);
8704baab9 Paul E. McKenney 2015-12-31 698 if (firsterr)
8704baab9 Paul E. McKenney 2015-12-31 699 goto unwind;
8704baab9 Paul E. McKenney 2015-12-31 700 }
8704baab9 Paul E. McKenney 2015-12-31 701 while
(atomic_read(&n_rcu_perf_reader_started) < nrealreaders)
8704baab9 Paul E. McKenney 2015-12-31 702
schedule_timeout_uninterruptible(1);
8704baab9 Paul E. McKenney 2015-12-31 703 writer_tasks =
kcalloc(nrealwriters, sizeof(reader_tasks[0]),
8704baab9 Paul E. McKenney 2015-12-31 704
GFP_KERNEL);
8704baab9 Paul E. McKenney 2015-12-31 705 writer_durations =
kcalloc(nrealwriters, sizeof(*writer_durations),
8704baab9 Paul E. McKenney 2015-12-31 706
GFP_KERNEL);
8704baab9 Paul E. McKenney 2015-12-31 707 writer_n_durations =
8704baab9 Paul E. McKenney 2015-12-31 708 kcalloc(nrealwriters,
sizeof(*writer_n_durations),
8704baab9 Paul E. McKenney 2015-12-31 709 GFP_KERNEL);
8704baab9 Paul E. McKenney 2015-12-31 710 if (!writer_tasks ||
!writer_durations || !writer_n_durations) {
8704baab9 Paul E. McKenney 2015-12-31 711
VERBOSE_PERFOUT_ERRSTRING("out of memory");
8704baab9 Paul E. McKenney 2015-12-31 712 firsterr = -ENOMEM;
8704baab9 Paul E. McKenney 2015-12-31 713 goto unwind;
8704baab9 Paul E. McKenney 2015-12-31 714 }
8704baab9 Paul E. McKenney 2015-12-31 715 for (i = 0; i < nrealwriters;
i++) {
8704baab9 Paul E. McKenney 2015-12-31 716 writer_durations[i] =
8704baab9 Paul E. McKenney 2015-12-31 717
kcalloc(MAX_MEAS, sizeof(*writer_durations[i]),
8704baab9 Paul E. McKenney 2015-12-31 718
GFP_KERNEL);
05dbbfe75 Wei Yongjun 2016-06-13 719 if
(!writer_durations[i]) {
05dbbfe75 Wei Yongjun 2016-06-13 720 firsterr =
-ENOMEM;
8704baab9 Paul E. McKenney 2015-12-31 721 goto unwind;
05dbbfe75 Wei Yongjun 2016-06-13 722 }
8704baab9 Paul E. McKenney 2015-12-31 723 firsterr =
torture_create_kthread(rcu_perf_writer, (void *)i,
8704baab9 Paul E. McKenney 2015-12-31 724
writer_tasks[i]);
8704baab9 Paul E. McKenney 2015-12-31 725 if (firsterr)
8704baab9 Paul E. McKenney 2015-12-31 726 goto unwind;
8704baab9 Paul E. McKenney 2015-12-31 727 }
8704baab9 Paul E. McKenney 2015-12-31 728 torture_init_end();
8704baab9 Paul E. McKenney 2015-12-31 729 return 0;
8704baab9 Paul E. McKenney 2015-12-31 730
8704baab9 Paul E. McKenney 2015-12-31 731 unwind:
8704baab9 Paul E. McKenney 2015-12-31 732 torture_init_end();
8704baab9 Paul E. McKenney 2015-12-31 733 rcu_perf_cleanup();
8704baab9 Paul E. McKenney 2015-12-31 734 return firsterr;
8704baab9 Paul E. McKenney 2015-12-31 735 }
8704baab9 Paul E. McKenney 2015-12-31 736
:::::: The code at line 649 was first introduced by commit
:::::: 8704baab9bc848b58c129fed6b591bb84ec02f41 rcutorture: Add RCU
grace-period performance tests
:::::: TO: Paul E. McKenney <[email protected]>
:::::: CC: Paul E. McKenney <[email protected]>
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation