From bbe9dd41d809fa8c9c02b318ca4b0f315c4680ac Mon Sep 17 00:00:00 2001 From: Dan Crowell Date: Tue, 13 Feb 2018 11:24:43 -0600 Subject: Fix FFDC for FW Request Errors Fixed wrong trace buffer string Added FFDC to recovered logs as well Change-Id: I40161dab8714ee399e14da00ebcb3e1cdb88c471 CQ: SW417265 Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/53972 Tested-by: Jenkins Server Tested-by: Jenkins OP Build CI Tested-by: Jenkins OP HW Tested-by: FSP CI Jenkins Reviewed-by: Martin Gloff Reviewed-by: Roland Veloz Reviewed-by: Daniel M. Crowell --- src/usr/util/runtime/rt_fwreq_helper.C | 71 ++++++++++++++++++++++++---------- 1 file changed, 51 insertions(+), 20 deletions(-) (limited to 'src/usr/util') diff --git a/src/usr/util/runtime/rt_fwreq_helper.C b/src/usr/util/runtime/rt_fwreq_helper.C index 29e12e6e0..30c0cb757 100644 --- a/src/usr/util/runtime/rt_fwreq_helper.C +++ b/src/usr/util/runtime/rt_fwreq_helper.C @@ -37,6 +37,36 @@ trace_desc_t *g_trac_runtime = nullptr; TRAC_INIT(&g_trac_runtime, RUNTIME_COMP_NAME, KILOBYTE); +/** + * @brief Add some FFDC to the error log + * + * @param i_request Pointer to request buffer + * @param i_reqLen Size of request buffer in bytes + * @param i_response Pointer to response buffer + * @param i_respLen Size of response buffer in bytes + */ +void add_ffdc( errlHndl_t i_err, + void* i_request, + size_t i_reqLen, + void* i_response, + size_t i_respLen ) +{ + i_err->addFFDC(RUNTIME_COMP_ID, + i_request, + i_reqLen, + 0, 0, false ); + + if (i_respLen > 0) + { + i_err->addFFDC(RUNTIME_COMP_ID, + i_response, + i_respLen, + 0, 0, false ); + } + + i_err->collectTrace( RUNTIME_COMP_NAME, 256); +} + /*****************************************************************************/ // firmware_request_helper /*****************************************************************************/ @@ -85,8 +115,12 @@ errlHndl_t firmware_request_helper(uint64_t i_reqLen, void *i_req, // Commit any previous errors if (l_err) { - // Commit any previous error log - errlCommit(l_err, RUNTIME_COMP_ID); + add_ffdc( l_err, + l_req_fw_msg, i_reqLen, + l_resp_fw_msg, *o_respLen ); + + // Commit any previous error log + errlCommit(l_err, RUNTIME_COMP_ID); } // Print trace info based on request message and populate error @@ -255,8 +289,12 @@ errlHndl_t firmware_request_helper(uint64_t i_reqLen, void *i_req, { if (l_err) { - // Commit any previous reset/reload error log - errlCommit(l_err, RUNTIME_COMP_ID); + add_ffdc( l_err, + l_req_fw_msg, i_reqLen, + l_resp_fw_msg, *o_respLen ); + + // Commit any previous reset/reload error log + errlCommit(l_err, RUNTIME_COMP_ID); } // This NOT a reset/reload error @@ -455,8 +493,12 @@ errlHndl_t firmware_request_helper(uint64_t i_reqLen, void *i_req, { if (l_err) { - // Commit any previous reset/reload error log - errlCommit(l_err, RUNTIME_COMP_ID); + add_ffdc( l_err, + l_req_fw_msg, i_reqLen, + l_resp_fw_msg, *o_respLen ); + + // Commit any previous reset/reload error log + errlCommit(l_err, RUNTIME_COMP_ID); } // This NOT a reset/reload error @@ -526,20 +568,9 @@ errlHndl_t firmware_request_helper(uint64_t i_reqLen, void *i_req, l_err->setSev(ERRL_SEV_PREDICTIVE); } - l_err->addFFDC(RUNTIME_COMP_ID, - l_req_fw_msg, - i_reqLen, - 0, 0, false ); - - if (*o_respLen > 0) - { - l_err->addFFDC(RUNTIME_COMP_ID, - l_resp_fw_msg, - *o_respLen, - 0, 0, false ); - } - - l_err->collectTrace( "FW_REQ", 256); + add_ffdc( l_err, + l_req_fw_msg, i_reqLen, + l_resp_fw_msg, *o_respLen ); } // END if (l_err) return l_err; -- cgit v1.2.1