lkml.org 
[lkml]   [2022]   [Aug]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.15 282/779] rcutorture: Warn on individual rcu_torture_init() error conditions
    Date
    From: Paul E. McKenney <paulmck@kernel.org>

    [ Upstream commit efeff6b39b9de4480572c7b0c5eb77204795cb57 ]

    When running rcutorture as a module, any rcu_torture_init() issues will be
    reflected in the error code from modprobe or insmod, as the case may be.
    However, these error codes are not available when running rcutorture
    built-in, for example, when using the kvm.sh script. This commit
    therefore adds WARN_ON_ONCE() to allow distinguishing rcu_torture_init()
    errors when running rcutorture built-in.

    Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    include/linux/torture.h | 8 ++++++++
    kernel/rcu/rcutorture.c | 30 +++++++++++++++---------------
    2 files changed, 23 insertions(+), 15 deletions(-)

    diff --git a/include/linux/torture.h b/include/linux/torture.h
    index 0910c5803f35..24f58e50a94b 100644
    --- a/include/linux/torture.h
    +++ b/include/linux/torture.h
    @@ -47,6 +47,14 @@ do { \
    } while (0)
    void verbose_torout_sleep(void);

    +#define torture_init_error(firsterr) \
    +({ \
    + int ___firsterr = (firsterr); \
    + \
    + WARN_ONCE(!IS_MODULE(CONFIG_RCU_TORTURE_TEST) && ___firsterr < 0, "Torture-test initialization failed with error code %d\n", ___firsterr); \
    + ___firsterr < 0; \
    +})
    +
    /* Definitions for online/offline exerciser. */
    #ifdef CONFIG_HOTPLUG_CPU
    int torture_num_online_cpus(void);
    diff --git a/kernel/rcu/rcutorture.c b/kernel/rcu/rcutorture.c
    index f922937eb39a..c1b36c52e896 100644
    --- a/kernel/rcu/rcutorture.c
    +++ b/kernel/rcu/rcutorture.c
    @@ -3066,7 +3066,7 @@ rcu_torture_init(void)
    rcu_torture_write_types();
    firsterr = torture_create_kthread(rcu_torture_writer, NULL,
    writer_task);
    - if (firsterr)
    + if (torture_init_error(firsterr))
    goto unwind;
    if (nfakewriters > 0) {
    fakewriter_tasks = kcalloc(nfakewriters,
    @@ -3081,7 +3081,7 @@ rcu_torture_init(void)
    for (i = 0; i < nfakewriters; i++) {
    firsterr = torture_create_kthread(rcu_torture_fakewriter,
    NULL, fakewriter_tasks[i]);
    - if (firsterr)
    + if (torture_init_error(firsterr))
    goto unwind;
    }
    reader_tasks = kcalloc(nrealreaders, sizeof(reader_tasks[0]),
    @@ -3097,7 +3097,7 @@ rcu_torture_init(void)
    rcu_torture_reader_mbchk[i].rtc_chkrdr = -1;
    firsterr = torture_create_kthread(rcu_torture_reader, (void *)i,
    reader_tasks[i]);
    - if (firsterr)
    + if (torture_init_error(firsterr))
    goto unwind;
    }
    nrealnocbers = nocbs_nthreads;
    @@ -3117,18 +3117,18 @@ rcu_torture_init(void)
    }
    for (i = 0; i < nrealnocbers; i++) {
    firsterr = torture_create_kthread(rcu_nocb_toggle, NULL, nocb_tasks[i]);
    - if (firsterr)
    + if (torture_init_error(firsterr))
    goto unwind;
    }
    if (stat_interval > 0) {
    firsterr = torture_create_kthread(rcu_torture_stats, NULL,
    stats_task);
    - if (firsterr)
    + if (torture_init_error(firsterr))
    goto unwind;
    }
    if (test_no_idle_hz && shuffle_interval > 0) {
    firsterr = torture_shuffle_init(shuffle_interval * HZ);
    - if (firsterr)
    + if (torture_init_error(firsterr))
    goto unwind;
    }
    if (stutter < 0)
    @@ -3138,7 +3138,7 @@ rcu_torture_init(void)

    t = cur_ops->stall_dur ? cur_ops->stall_dur() : stutter * HZ;
    firsterr = torture_stutter_init(stutter * HZ, t);
    - if (firsterr)
    + if (torture_init_error(firsterr))
    goto unwind;
    }
    if (fqs_duration < 0)
    @@ -3147,7 +3147,7 @@ rcu_torture_init(void)
    /* Create the fqs thread */
    firsterr = torture_create_kthread(rcu_torture_fqs, NULL,
    fqs_task);
    - if (firsterr)
    + if (torture_init_error(firsterr))
    goto unwind;
    }
    if (test_boost_interval < 1)
    @@ -3161,7 +3161,7 @@ rcu_torture_init(void)
    firsterr = cpuhp_setup_state(CPUHP_AP_ONLINE_DYN, "RCU_TORTURE",
    rcutorture_booster_init,
    rcutorture_booster_cleanup);
    - if (firsterr < 0)
    + if (torture_init_error(firsterr))
    goto unwind;
    rcutor_hp = firsterr;

    @@ -3182,23 +3182,23 @@ rcu_torture_init(void)
    }
    shutdown_jiffies = jiffies + shutdown_secs * HZ;
    firsterr = torture_shutdown_init(shutdown_secs, rcu_torture_cleanup);
    - if (firsterr)
    + if (torture_init_error(firsterr))
    goto unwind;
    firsterr = torture_onoff_init(onoff_holdoff * HZ, onoff_interval,
    rcutorture_sync);
    - if (firsterr)
    + if (torture_init_error(firsterr))
    goto unwind;
    firsterr = rcu_torture_stall_init();
    - if (firsterr)
    + if (torture_init_error(firsterr))
    goto unwind;
    firsterr = rcu_torture_fwd_prog_init();
    - if (firsterr)
    + if (torture_init_error(firsterr))
    goto unwind;
    firsterr = rcu_torture_barrier_init();
    - if (firsterr)
    + if (torture_init_error(firsterr))
    goto unwind;
    firsterr = rcu_torture_read_exit_init();
    - if (firsterr)
    + if (torture_init_error(firsterr))
    goto unwind;
    if (object_debug)
    rcu_test_debug_objects();
    --
    2.35.1


    \
     
     \ /
      Last update: 2022-08-15 20:53    [W:2.239 / U:0.172 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site