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 <paul...@linux.vnet.ibm.com> :::::: CC: Paul E. McKenney <paul...@linux.vnet.ibm.com> --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation