[Skiboot] [PATCH 07/14] fsp-elog: add FWTS annotations for several errors

Stewart Smith stewart at linux.vnet.ibm.com
Mon Jun 27 15:32:05 AEST 2016


These errors are essentially assert()s - something has gone wrong and
it's likely because of a bug somewhere. Things we should *never* it
regards to inconsistency, so have FWTS throw warnings on them.

Signed-off-by: Stewart Smith <stewart at linux.vnet.ibm.com>
---
 hw/fsp/fsp-elog-read.c  | 23 +++++++++++++++++++++++
 hw/fsp/fsp-elog-write.c |  6 ++++++
 2 files changed, 29 insertions(+)

diff --git a/hw/fsp/fsp-elog-read.c b/hw/fsp/fsp-elog-read.c
index 16667aeecf11..a8e5c124980b 100644
--- a/hw/fsp/fsp-elog-read.c
+++ b/hw/fsp/fsp-elog-read.c
@@ -175,6 +175,12 @@ static void fsp_elog_fetch_failure(uint8_t fsp_status)
 	/* read top list and delete the node */
 	log_data = list_top(&elog_read_pending, struct fsp_log_entry, link);
 	if (!log_data) {
+		/**
+		 * @fwts-label ElogFetchFailureInconsistent
+		 * @fwts-advice Inconsistent state between OPAL and FSP
+		 * in code path for handling failure of fetching error log
+		 * from FSP. Likely a bug in interaction between FSP and OPAL.
+		 */
 		prlog(PR_ERR, "%s: Inconsistent internal list state !\n",
 		      __func__);
 	} else {
@@ -241,6 +247,12 @@ static void fsp_elog_queue_fetch(void)
 
 	entry = list_top(&elog_read_pending, struct fsp_log_entry, link);
 	if (!entry) {
+		/**
+		 * @fwts-label ElogQueueInconsistent
+		 * @fwts-advice Bug in interaction between FSP and OPAL. We
+		 * expected there to be a pending read from FSP but the list
+		 * was empty.
+		 */
 		prlog(PR_ERR, "%s: Inconsistent internal list state !\n",
 		      __func__);
 		fsp_elog_set_head_state(ELOG_STATE_NONE);
@@ -279,6 +291,12 @@ static int64_t fsp_opal_elog_info(uint64_t *opal_elog_id,
 	}
 	log_data = list_top(&elog_read_pending, struct fsp_log_entry, link);
 	if (!log_data) {
+		/**
+		 * @fwts-label ElogInfoInconsistentState
+		 * @fwts-advice We expected there to be an entry in the list
+		 * of error logs for the error log we're fetching information
+		 * for. There wasn't. This means there's a bug.
+		 */
 		prlog(PR_ERR, "%s: Inconsistent internal list state !\n",
 		      __func__);
 		unlock(&elog_read_lock);
@@ -313,6 +331,11 @@ static int64_t fsp_opal_elog_read(uint64_t *buffer, uint64_t opal_elog_size,
 
 	log_data = list_top(&elog_read_pending, struct fsp_log_entry, link);
 	if (!log_data) {
+		/**
+		 * @fwts-label ElogReadInconsistentState
+		 * @fwts-advice Inconsistent state while reading error log
+		 * from FSP. Bug in OPAL and FSP interaction.
+		 */
 		prlog(PR_ERR, "%s: Inconsistent internal list state !\n",
 		      __func__);
 		unlock(&elog_read_lock);
diff --git a/hw/fsp/fsp-elog-write.c b/hw/fsp/fsp-elog-write.c
index 2933b9780d2d..5358823b4075 100644
--- a/hw/fsp/fsp-elog-write.c
+++ b/hw/fsp/fsp-elog-write.c
@@ -136,6 +136,12 @@ bool opal_elog_info(uint64_t *opal_elog_id, uint64_t *opal_elog_size)
 		head = list_top(&elog_write_to_host_pending,
 					struct errorlog, link);
 		if (!head) {
+			/**
+			 * @fwts-label ElogListInconsistent
+			 * @fwts-advice Bug in interaction between FSP and
+			 * OPAL. The state maintained by OPAL didn't match
+			 * what the FSP sent.
+			 */
 			prlog(PR_ERR,
 			      "%s: Inconsistent internal list state !\n",
 			      __func__);
-- 
2.1.4



More information about the Skiboot mailing list