@@ -381,6 +381,7 @@ struct rcu_torture_ops {
381381 void (* gp_kthread_dbg )(void );
382382 bool (* check_boost_failed )(unsigned long gp_state , int * cpup );
383383 int (* stall_dur )(void );
384+ void (* get_gp_data )(int * flags , unsigned long * gp_seq );
384385 long cbflood_max ;
385386 int irq_capable ;
386387 int can_boost ;
@@ -569,6 +570,7 @@ static struct rcu_torture_ops rcu_ops = {
569570 .gp_kthread_dbg = show_rcu_gp_kthreads ,
570571 .check_boost_failed = rcu_check_boost_fail ,
571572 .stall_dur = rcu_jiffies_till_stall_check ,
573+ .get_gp_data = rcutorture_get_gp_data ,
572574 .irq_capable = 1 ,
573575 .can_boost = IS_ENABLED (CONFIG_RCU_BOOST ),
574576 .extendables = RCUTORTURE_MAX_EXTEND ,
@@ -628,6 +630,11 @@ static struct srcu_struct srcu_ctld;
628630static struct srcu_struct * srcu_ctlp = & srcu_ctl ;
629631static struct rcu_torture_ops srcud_ops ;
630632
633+ static void srcu_get_gp_data (int * flags , unsigned long * gp_seq )
634+ {
635+ srcutorture_get_gp_data (srcu_ctlp , flags , gp_seq );
636+ }
637+
631638static int srcu_torture_read_lock (void )
632639{
633640 if (cur_ops == & srcud_ops )
@@ -736,6 +743,7 @@ static struct rcu_torture_ops srcu_ops = {
736743 .call = srcu_torture_call ,
737744 .cb_barrier = srcu_torture_barrier ,
738745 .stats = srcu_torture_stats ,
746+ .get_gp_data = srcu_get_gp_data ,
739747 .cbflood_max = 50000 ,
740748 .irq_capable = 1 ,
741749 .no_pi_lock = IS_ENABLED (CONFIG_TINY_SRCU ),
@@ -774,6 +782,7 @@ static struct rcu_torture_ops srcud_ops = {
774782 .call = srcu_torture_call ,
775783 .cb_barrier = srcu_torture_barrier ,
776784 .stats = srcu_torture_stats ,
785+ .get_gp_data = srcu_get_gp_data ,
777786 .cbflood_max = 50000 ,
778787 .irq_capable = 1 ,
779788 .no_pi_lock = IS_ENABLED (CONFIG_TINY_SRCU ),
@@ -882,6 +891,7 @@ static struct rcu_torture_ops tasks_ops = {
882891 .call = call_rcu_tasks ,
883892 .cb_barrier = rcu_barrier_tasks ,
884893 .gp_kthread_dbg = show_rcu_tasks_classic_gp_kthread ,
894+ .get_gp_data = rcu_tasks_get_gp_data ,
885895 .fqs = NULL ,
886896 .stats = NULL ,
887897 .irq_capable = 1 ,
@@ -922,6 +932,7 @@ static struct rcu_torture_ops tasks_rude_ops = {
922932 .call = call_rcu_tasks_rude ,
923933 .cb_barrier = rcu_barrier_tasks_rude ,
924934 .gp_kthread_dbg = show_rcu_tasks_rude_gp_kthread ,
935+ .get_gp_data = rcu_tasks_rude_get_gp_data ,
925936 .cbflood_max = 50000 ,
926937 .fqs = NULL ,
927938 .stats = NULL ,
@@ -974,6 +985,7 @@ static struct rcu_torture_ops tasks_tracing_ops = {
974985 .call = call_rcu_tasks_trace ,
975986 .cb_barrier = rcu_barrier_tasks_trace ,
976987 .gp_kthread_dbg = show_rcu_tasks_trace_gp_kthread ,
988+ .get_gp_data = rcu_tasks_trace_get_gp_data ,
977989 .cbflood_max = 50000 ,
978990 .fqs = NULL ,
979991 .stats = NULL ,
@@ -2264,10 +2276,8 @@ rcu_torture_stats_print(void)
22642276 int __maybe_unused flags = 0 ;
22652277 unsigned long __maybe_unused gp_seq = 0 ;
22662278
2267- rcutorture_get_gp_data (cur_ops -> ttype ,
2268- & flags , & gp_seq );
2269- srcutorture_get_gp_data (cur_ops -> ttype , srcu_ctlp ,
2270- & flags , & gp_seq );
2279+ if (cur_ops -> get_gp_data )
2280+ cur_ops -> get_gp_data (& flags , & gp_seq );
22712281 wtp = READ_ONCE (writer_task );
22722282 pr_alert ("??? Writer stall state %s(%d) g%lu f%#x ->state %#x cpu %d\n" ,
22732283 rcu_torture_writer_state_getname (),
@@ -3390,8 +3400,8 @@ rcu_torture_cleanup(void)
33903400 fakewriter_tasks = NULL ;
33913401 }
33923402
3393- rcutorture_get_gp_data (cur_ops -> ttype , & flags , & gp_seq );
3394- srcutorture_get_gp_data ( cur_ops -> ttype , srcu_ctlp , & flags , & gp_seq );
3403+ if (cur_ops -> get_gp_data )
3404+ cur_ops -> get_gp_data ( & flags , & gp_seq );
33953405 pr_alert ("%s: End-test grace-period state: g%ld f%#x total-gps=%ld\n" ,
33963406 cur_ops -> name , (long )gp_seq , flags ,
33973407 rcutorture_seq_diff (gp_seq , start_gp_seq ));
@@ -3762,8 +3772,8 @@ rcu_torture_init(void)
37623772 nrealreaders = 1 ;
37633773 }
37643774 rcu_torture_print_module_parms (cur_ops , "Start of test" );
3765- rcutorture_get_gp_data (cur_ops -> ttype , & flags , & gp_seq );
3766- srcutorture_get_gp_data ( cur_ops -> ttype , srcu_ctlp , & flags , & gp_seq );
3775+ if (cur_ops -> get_gp_data )
3776+ cur_ops -> get_gp_data ( & flags , & gp_seq );
37673777 start_gp_seq = gp_seq ;
37683778 pr_alert ("%s: Start-test grace-period state: g%ld f%#x\n" ,
37693779 cur_ops -> name , (long )gp_seq , flags );
0 commit comments