lkml.org 
[lkml]   [2019]   [Nov]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.19 261/422] selftests/powerpc: Do not fail with reschedule
    Date
    From: Breno Leitao <leitao@debian.org>

    [ Upstream commit 44d947eff19d64384efc06069509db7a0a1103b0 ]

    There are cases where the test is not expecting to have the transaction
    aborted, but, the test process might have been rescheduled, either in the
    OS level or by KVM (if it is running on a KVM guest machine). The process
    reschedule will cause a treclaim/recheckpoint which will cause the
    transaction to doom, aborting the transaction as soon as the process is
    rescheduled back to the CPU. This might cause the test to fail, but this is
    not a failure in essence.

    If that is the case, TEXASR[FC] is indicated with either
    TM_CAUSE_RESCHEDULE or TM_CAUSE_KVM_RESCHEDULE for KVM interruptions.

    In this scenario, ignore these two failures and avoid the whole test to
    return failure.

    Signed-off-by: Breno Leitao <leitao@debian.org>
    Reviewed-by: Gustavo Romero <gromero@linux.ibm.com>
    Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    tools/testing/selftests/powerpc/tm/tm-unavailable.c | 9 ++++++---
    tools/testing/selftests/powerpc/tm/tm.h | 9 +++++++++
    2 files changed, 15 insertions(+), 3 deletions(-)

    diff --git a/tools/testing/selftests/powerpc/tm/tm-unavailable.c b/tools/testing/selftests/powerpc/tm/tm-unavailable.c
    index 156c8e750259b..09894f4ff62e6 100644
    --- a/tools/testing/selftests/powerpc/tm/tm-unavailable.c
    +++ b/tools/testing/selftests/powerpc/tm/tm-unavailable.c
    @@ -236,7 +236,8 @@ void *tm_una_ping(void *input)
    }

    /* Check if we were not expecting a failure and a it occurred. */
    - if (!expecting_failure() && is_failure(cr_)) {
    + if (!expecting_failure() && is_failure(cr_) &&
    + !failure_is_reschedule()) {
    printf("\n\tUnexpected transaction failure 0x%02lx\n\t",
    failure_code());
    return (void *) -1;
    @@ -244,9 +245,11 @@ void *tm_una_ping(void *input)

    /*
    * Check if TM failed due to the cause we were expecting. 0xda is a
    - * TM_CAUSE_FAC_UNAV cause, otherwise it's an unexpected cause.
    + * TM_CAUSE_FAC_UNAV cause, otherwise it's an unexpected cause, unless
    + * it was caused by a reschedule.
    */
    - if (is_failure(cr_) && !failure_is_unavailable()) {
    + if (is_failure(cr_) && !failure_is_unavailable() &&
    + !failure_is_reschedule()) {
    printf("\n\tUnexpected failure cause 0x%02lx\n\t",
    failure_code());
    return (void *) -1;
    diff --git a/tools/testing/selftests/powerpc/tm/tm.h b/tools/testing/selftests/powerpc/tm/tm.h
    index df4204247d45c..5518b1d4ef8b2 100644
    --- a/tools/testing/selftests/powerpc/tm/tm.h
    +++ b/tools/testing/selftests/powerpc/tm/tm.h
    @@ -52,6 +52,15 @@ static inline bool failure_is_unavailable(void)
    return (failure_code() & TM_CAUSE_FAC_UNAV) == TM_CAUSE_FAC_UNAV;
    }

    +static inline bool failure_is_reschedule(void)
    +{
    + if ((failure_code() & TM_CAUSE_RESCHED) == TM_CAUSE_RESCHED ||
    + (failure_code() & TM_CAUSE_KVM_RESCHED) == TM_CAUSE_KVM_RESCHED)
    + return true;
    +
    + return false;
    +}
    +
    static inline bool failure_is_nesting(void)
    {
    return (__builtin_get_texasru() & 0x400000);
    --
    2.20.1


    \
     
     \ /
      Last update: 2019-11-19 06:35    [W:4.144 / U:0.048 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site