lkml.org 
[lkml]   [2017]   [May]   [25]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH tip/core/rcu 11/88] rcuperf: Defer expedited/normal check to end of test
    Date
    Current rcuperf startup checks to see if the user asked to measure
    only expedited grace periods, yet constrained all grace periods to be
    normal, or if the user asked to measure only normal grace periods, yet
    constrained all grace periods to be expedited. Useless tests of this
    sort are aborted.

    Unfortunately, making RCU work through the mid-boot dead zone [1] puts
    RCU into expedited-only mode during that zone. Which happens to also
    be the exact time that rcuperf carries out the aforementioned check.
    So if the user asks rcuperf to measure only normal grace periods (the
    default), rcuperf will now always complain and terminate the test.

    This commit therefore moves the checks to rcu_perf_cleanup(). This has
    the disadvantage of failing to abort useless tests, but avoids the need to
    create yet another kthread and the need to do fiddly checks involving the
    holdoff time. (Yes, another approach is to do the checks in a late-stage
    init function, but that would require some way to communicate badness
    to rcuperf's kthreads, and seems not worth the bother.)

    [1] https://lwn.net/Articles/716148/

    Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
    ---
    kernel/rcu/rcuperf.c | 19 +++++++++----------
    1 file changed, 9 insertions(+), 10 deletions(-)

    diff --git a/kernel/rcu/rcuperf.c b/kernel/rcu/rcuperf.c
    index a4a86fb47e4a..ef5b1faac495 100644
    --- a/kernel/rcu/rcuperf.c
    +++ b/kernel/rcu/rcuperf.c
    @@ -452,6 +452,15 @@ rcu_perf_cleanup(void)
    u64 *wdp;
    u64 *wdpp;

    + /*
    + * Would like warning at start, but everything is expedited
    + * during the mid-boot phase, so have to wait till the end.
    + */
    + if (rcu_gp_is_expedited() && !rcu_gp_is_normal() && !gp_exp)
    + VERBOSE_PERFOUT_ERRSTRING("All grace periods expedited, no normal ones to measure!");
    + if (rcu_gp_is_normal() && gp_exp)
    + VERBOSE_PERFOUT_ERRSTRING("All grace periods normal, no expedited ones to measure!");
    +
    if (torture_cleanup_begin())
    return;

    @@ -624,16 +633,6 @@ rcu_perf_init(void)
    firsterr = -ENOMEM;
    goto unwind;
    }
    - if (rcu_gp_is_expedited() && !rcu_gp_is_normal() && !gp_exp) {
    - VERBOSE_PERFOUT_ERRSTRING("All grace periods expedited, no normal ones to measure!");
    - firsterr = -EINVAL;
    - goto unwind;
    - }
    - if (rcu_gp_is_normal() && gp_exp) {
    - VERBOSE_PERFOUT_ERRSTRING("All grace periods normal, no expedited ones to measure!");
    - firsterr = -EINVAL;
    - goto unwind;
    - }
    for (i = 0; i < nrealwriters; i++) {
    writer_durations[i] =
    kcalloc(MAX_MEAS, sizeof(*writer_durations[i]),
    --
    2.5.2
    \
     
     \ /
      Last update: 2017-05-26 00:20    [W:2.528 / U:0.028 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site