lkml.org 
[lkml]   [2018]   [Sep]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.18 204/235] rcutorture: Use monotonic timestamp for stall detection
    Date
    4.18-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Arnd Bergmann <arnd@arndb.de>

    [ Upstream commit 622be33fcbc93e9b672b99ed338369eb5e843ac3 ]

    The get_seconds() call is deprecated because it overflows on 32-bit
    architectures. The algorithm in rcu_torture_stall() can deal with
    the overflow, but another problem here is that using a CLOCK_REALTIME
    stamp can lead to a false-positive stall warning when a settimeofday()
    happens concurrently.

    Using ktime_get_seconds() instead avoids those issues and will never
    overflow. The added cast to 'unsigned long' however is necessary to
    make ULONG_CMP_LT() work correctly.

    Signed-off-by: Arnd Bergmann <arnd@arndb.de>
    Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
    Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    kernel/rcu/rcutorture.c | 5 +++--
    1 file changed, 3 insertions(+), 2 deletions(-)

    --- a/kernel/rcu/rcutorture.c
    +++ b/kernel/rcu/rcutorture.c
    @@ -1446,7 +1446,7 @@ static int rcu_torture_stall(void *args)
    VERBOSE_TOROUT_STRING("rcu_torture_stall end holdoff");
    }
    if (!kthread_should_stop()) {
    - stop_at = get_seconds() + stall_cpu;
    + stop_at = ktime_get_seconds() + stall_cpu;
    /* RCU CPU stall is expected behavior in following code. */
    rcu_read_lock();
    if (stall_cpu_irqsoff)
    @@ -1455,7 +1455,8 @@ static int rcu_torture_stall(void *args)
    preempt_disable();
    pr_alert("rcu_torture_stall start on CPU %d.\n",
    smp_processor_id());
    - while (ULONG_CMP_LT(get_seconds(), stop_at))
    + while (ULONG_CMP_LT((unsigned long)ktime_get_seconds(),
    + stop_at))
    continue; /* Induce RCU CPU stall warning. */
    if (stall_cpu_irqsoff)
    local_irq_enable();

    \
     
     \ /
      Last update: 2018-09-24 14:48    [W:4.598 / U:0.352 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site