[Skiboot] [PATCH 4/7] prd: Validate _opal_queue_msg() return value

Vasant Hegde hegdevasant at linux.vnet.ibm.com
Thu Mar 28 22:18:18 AEDT 2019


On safer side, validate _opal_queue_msg() return value.

Signed-off-by: Vasant Hegde <hegdevasant at linux.vnet.ibm.com>
---
 hw/prd.c | 20 +++++++++++++-------
 1 file changed, 13 insertions(+), 7 deletions(-)

diff --git a/hw/prd.c b/hw/prd.c
index c5220196b..8827e3d9d 100644
--- a/hw/prd.c
+++ b/hw/prd.c
@@ -1,4 +1,4 @@
-/* Copyright 2014-2015 IBM Corp.
+/* Copyright 2014-2019 IBM Corp.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -162,6 +162,7 @@ static void send_next_pending_event(void)
 {
 	struct proc_chip *chip;
 	uint32_t proc;
+	int rc;
 	uint8_t event;
 
 	assert(!prd_msg_inuse);
@@ -182,7 +183,6 @@ static void send_next_pending_event(void)
 	if (!event)
 		return;
 
-	prd_msg_inuse = true;
 	prd_msg->token = 0;
 	prd_msg->hdr.size = sizeof(*prd_msg);
 
@@ -211,9 +211,12 @@ static void send_next_pending_event(void)
 	 * We always need to handle PSI interrupts, but if the is PRD is
 	 * disabled then we shouldn't propagate PRD events to the host.
 	 */
-	if (prd_enabled)
-		_opal_queue_msg(OPAL_MSG_PRD, prd_msg, prd_msg_consumed, 4,
-				(uint64_t *)prd_msg);
+	if (prd_enabled) {
+		rc = _opal_queue_msg(OPAL_MSG_PRD, prd_msg, prd_msg_consumed, 4,
+				     (uint64_t *)prd_msg);
+		if (!rc)
+			prd_msg_inuse = true;
+	}
 }
 
 static void __prd_event(uint32_t proc, uint8_t event)
@@ -420,11 +423,14 @@ static int prd_msg_handle_firmware_req(struct opal_prd_msg *msg)
 		rc = -ENOSYS;
 	}
 
-	if (!rc)
+	if (!rc) {
 		rc = _opal_queue_msg(OPAL_MSG_PRD, prd_msg, prd_msg_consumed, 4,
 				(uint64_t *) prd_msg);
-	else
+		if (rc)
+			prd_msg_inuse = false;
+	} else {
 		prd_msg_inuse = false;
+	}
 
 	unlock(&events_lock);
 
-- 
2.14.3



More information about the Skiboot mailing list