Subject: Re: [PATCH] powerpc/pseries/dlpar: handle ibm, configure-connector delay status

From: Nathan Lynch <[email-masked]>
Date: Fri, 05 Feb 2021 07:15:16 -0600

Nathan Lynch <[email-masked]> writes:
> 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 <[email-masked]>

Just following up and adding some people to cc in hopes of getting some
review for this.

> ---
>  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 16e86ba8aa20..f6b7749d6ada 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.29.2