lkml.org 
[lkml]   [2018]   [Feb]   [26]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH tip/core/rcu 05/12] rcutorture: Record which grace-period primitives are tested
    Date
    The rcu_torture_writer() function adapts to requested testing from module
    parameters as well as the function pointers in the structure referenced
    by cur_ops. However, as long as the module parameters do not conflict
    with the function pointers, this adaptation is silent. This silence can
    result in confusion as to exactly what was tested, which could in turn
    result in untested RCU code making its way into mainline.

    This commit therefore makes rcu_torture_writer() announce exactly which
    portions of RCU's API it ends up testing.

    Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
    ---
    kernel/rcu/rcutorture.c | 24 ++++++++++++++++--------
    1 file changed, 16 insertions(+), 8 deletions(-)

    diff --git a/kernel/rcu/rcutorture.c b/kernel/rcu/rcutorture.c
    index 2964b9236ddc..680c96d8c00f 100644
    --- a/kernel/rcu/rcutorture.c
    +++ b/kernel/rcu/rcutorture.c
    @@ -917,22 +917,30 @@ rcu_torture_writer(void *arg)
    /* Initialize synctype[] array. If none set, take default. */
    if (!gp_cond1 && !gp_exp1 && !gp_normal1 && !gp_sync1)
    gp_cond1 = gp_exp1 = gp_normal1 = gp_sync1 = true;
    - if (gp_cond1 && cur_ops->get_state && cur_ops->cond_sync)
    + if (gp_cond1 && cur_ops->get_state && cur_ops->cond_sync) {
    synctype[nsynctypes++] = RTWS_COND_GET;
    - else if (gp_cond && (!cur_ops->get_state || !cur_ops->cond_sync))
    + pr_info("%s: Testing conditional GPs.\n", __func__);
    + } else if (gp_cond && (!cur_ops->get_state || !cur_ops->cond_sync)) {
    pr_alert("%s: gp_cond without primitives.\n", __func__);
    - if (gp_exp1 && cur_ops->exp_sync)
    + }
    + if (gp_exp1 && cur_ops->exp_sync) {
    synctype[nsynctypes++] = RTWS_EXP_SYNC;
    - else if (gp_exp && !cur_ops->exp_sync)
    + pr_info("%s: Testing expedited GPs.\n", __func__);
    + } else if (gp_exp && !cur_ops->exp_sync) {
    pr_alert("%s: gp_exp without primitives.\n", __func__);
    - if (gp_normal1 && cur_ops->deferred_free)
    + }
    + if (gp_normal1 && cur_ops->deferred_free) {
    synctype[nsynctypes++] = RTWS_DEF_FREE;
    - else if (gp_normal && !cur_ops->deferred_free)
    + pr_info("%s: Testing asynchronous GPs.\n", __func__);
    + } else if (gp_normal && !cur_ops->deferred_free) {
    pr_alert("%s: gp_normal without primitives.\n", __func__);
    - if (gp_sync1 && cur_ops->sync)
    + }
    + if (gp_sync1 && cur_ops->sync) {
    synctype[nsynctypes++] = RTWS_SYNC;
    - else if (gp_sync && !cur_ops->sync)
    + pr_info("%s: Testing normal GPs.\n", __func__);
    + } else if (gp_sync && !cur_ops->sync) {
    pr_alert("%s: gp_sync without primitives.\n", __func__);
    + }
    if (WARN_ONCE(nsynctypes == 0,
    "rcu_torture_writer: No update-side primitives.\n")) {
    /*
    --
    2.5.2
    \
     
     \ /
      Last update: 2018-02-26 23:05    [W:4.928 / U:0.012 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site