[Skiboot] [PATCH] xscom: Don't log xscom errors caused bu OPAL calls

Gautham R Shenoy ego at linux.vnet.ibm.com
Fri Dec 6 02:32:44 AEDT 2019


Hello Oliver,


On Fri, Dec 06, 2019 at 12:14:34AM +1100, Oliver O'Halloran wrote:
> The XSCOM read/write OPAL calls are largely there to support running
> PRD in the OS. PRD itself handles submitting error logs (if needed)
> when a XSCOM operation fails so there's no need to send an error log
> from inside of OPAL.
> 
> Cc: Gautham R. Shenoy <ego at linux.vnet.ibm.com>
> Signed-off-by: Oliver O'Halloran <oohall at gmail.com>

This is much better, simpler version than what I posted.

Only one question.
> ---
>  core/opal.c |  3 +++
>  hw/xscom.c  | 15 +++++++++++----
>  2 files changed, 14 insertions(+), 4 deletions(-)
> 
> diff --git a/core/opal.c b/core/opal.c
> index da746e805a3f..922dc5abddca 100644
> --- a/core/opal.c
> +++ b/core/opal.c
> @@ -189,6 +189,9 @@ int64_t opal_exit_check(int64_t retval, struct stack_frame *eframe)
>  		      "Spent %llu msecs in OPAL call %llu!\n",
>  		      call_time, token);
>  	}
> +
> +	this_cpu->current_token = 0;
> +
>  	return retval;
>  }
> 
> diff --git a/hw/xscom.c b/hw/xscom.c
> index f3f4e1039ecf..381cf2c4aaa4 100644
> --- a/hw/xscom.c
> +++ b/hw/xscom.c
> @@ -272,10 +272,17 @@ static int64_t xscom_handle_error(uint64_t hmer, uint32_t gcid, uint32_t pcb_add
>  		break;
>  	}
> 
> -	/* XXX: Create error log entry ? */
> -	log_simple_error(&e_info(OPAL_RC_XSCOM_RW),
> -		"XSCOM: %s error gcid=0x%x pcb_addr=0x%x stat=0x%x\n",
> -		is_write ? "write" : "read", gcid, pcb_addr, stat);
> +	/*
> +	 * If we're in an XSCOM opal call then squash the error
> +	 * we assume that the caller (probably opal-prd) will
> +	 * handle logging it
> +	 */
> +	if (this_cpu()->current_token != OPAL_XSCOM_READ &&
> +	    this_cpu()->current_token != OPAL_XSCOM_WRITE) {


Shouldn't we restrict to not creating PELs only when the error is
OPAL_XSCOM_ADDR_ERROR, as this was the only observable error when the
XSCOM read/writes initiated by HBRT were failing ?

> +		log_simple_error(&e_info(OPAL_RC_XSCOM_RW),
> +			"XSCOM: %s error gcid=0x%x pcb_addr=0x%x stat=0x%x\n",
> +			is_write ? "write" : "read", gcid, pcb_addr, stat);
> +	}
> 
>  	/* We need to reset the XSCOM or we'll hang on the next access */
>  	xscom_reset(gcid, false);
> -- 
> 2.21.0
> 

--
Thanks and Regards
gautham.


More information about the Skiboot mailing list