lkml.org 
[lkml]   [2021]   [Mar]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.11 422/775] powerpc/pseries/dlpar: handle ibm, configure-connector delay status
    Date
    From: Nathan Lynch <nathanl@linux.ibm.com>

    [ Upstream commit 768d70e19ba525debd571b36e6d0ab19956c63d7 ]

    dlpar_configure_connector() has two problems in its handling of
    ibm,configure-connector's return status:

    1. When the status is -2 (busy, call again), we call
    ibm,configure-connector again immediately without checking whether
    to schedule, which can result in monopolizing the CPU.
    2. Extended delay status (9900..9905) goes completely unhandled,
    causing the configuration to unnecessarily terminate.

    Fix both of these issues by using rtas_busy_delay().

    Fixes: ab519a011caa ("powerpc/pseries: Kernel DLPAR Infrastructure")
    Signed-off-by: Nathan Lynch <nathanl@linux.ibm.com>
    Reviewed-by: Tyrel Datwyler <tyreld@linux.ibm.com>
    Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
    Link: https://lore.kernel.org/r/20210107025900.410369-1-nathanl@linux.ibm.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    arch/powerpc/platforms/pseries/dlpar.c | 7 +++----
    1 file changed, 3 insertions(+), 4 deletions(-)

    diff --git a/arch/powerpc/platforms/pseries/dlpar.c b/arch/powerpc/platforms/pseries/dlpar.c
    index 16e86ba8aa209..f6b7749d6ada7 100644
    --- a/arch/powerpc/platforms/pseries/dlpar.c
    +++ b/arch/powerpc/platforms/pseries/dlpar.c
    @@ -127,7 +127,6 @@ void dlpar_free_cc_nodes(struct device_node *dn)
    #define NEXT_PROPERTY 3
    #define PREV_PARENT 4
    #define MORE_MEMORY 5
    -#define CALL_AGAIN -2
    #define ERR_CFG_USE -9003

    struct device_node *dlpar_configure_connector(__be32 drc_index,
    @@ -168,6 +167,9 @@ struct device_node *dlpar_configure_connector(__be32 drc_index,

    spin_unlock(&rtas_data_buf_lock);

    + if (rtas_busy_delay(rc))
    + continue;
    +
    switch (rc) {
    case COMPLETE:
    break;
    @@ -216,9 +218,6 @@ struct device_node *dlpar_configure_connector(__be32 drc_index,
    last_dn = last_dn->parent;
    break;

    - case CALL_AGAIN:
    - break;
    -
    case MORE_MEMORY:
    case ERR_CFG_USE:
    default:
    --
    2.27.0


    \
     
     \ /
      Last update: 2021-03-02 05:10    [W:4.038 / U:0.200 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site