[Skiboot] [PATCH 7/7] opal-prd: Fix prd message size issue

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


If prd messages size is insufficient then read_prd_msg() call fails with
below error. And caller is not reallocating sufficient buffer. Also its
hard to guess the size.

sample log:
-----------
Mar 28 03:31:43 zz24p1 opal-prd: FW: error reading from firmware: alloc 32 rc -1: Invalid argument
Mar 28 03:31:43 zz24p1 opal-prd: FW: error reading from firmware: alloc 32 rc -1: Invalid argument
Mar 28 03:31:43 zz24p1 opal-prd: FW: error reading from firmware: alloc 32 rc -1: Invalid argument
....

Lets use `opal-msg-size` device tree property to allocate memory
for prd message.

Signed-off-by: Vasant Hegde <hegdevasant at linux.vnet.ibm.com>
---
 external/opal-prd/opal-prd.c | 25 ++++++++++++++++++++++---
 1 file changed, 22 insertions(+), 3 deletions(-)

diff --git a/external/opal-prd/opal-prd.c b/external/opal-prd/opal-prd.c
index 1452a17fa..2d7479ea4 100644
--- a/external/opal-prd/opal-prd.c
+++ b/external/opal-prd/opal-prd.c
@@ -2111,7 +2111,9 @@ static int init_control_socket(struct opal_prd_ctx *ctx)
 
 static int run_prd_daemon(struct opal_prd_ctx *ctx)
 {
-	int rc;
+	char *opal_msg_path;
+	void *buf;
+	int rc, len;
 
 	/* log to syslog */
 	pr_log_daemon_init();
@@ -2121,8 +2123,25 @@ static int run_prd_daemon(struct opal_prd_ctx *ctx)
 	ctx->fd = -1;
 	ctx->socket = -1;
 
-	/* set up our message buffer */
-	ctx->msg_alloc_len = sizeof(*ctx->msg);
+	/*
+	 * Set up our message buffer. Use opal-msg-size device tree
+	 * property to get message buffer size.
+	 */
+	rc = asprintf(&opal_msg_path,
+		       "%s/ibm,opal/opal-msg-size", devicetree_base);
+	if (rc > 0) {
+		rc = open_and_read(opal_msg_path, &buf, &len);
+		if (rc == 0) {
+			ctx->msg_alloc_len = be32toh(*(__be32 *)buf);
+			free(buf);
+		}
+
+		free(opal_msg_path);
+	}
+
+	if (ctx->msg_alloc_len == 0)
+		ctx->msg_alloc_len = sizeof(*ctx->msg);
+
 	ctx->msg = malloc(ctx->msg_alloc_len);
 	if (!ctx->msg) {
 		pr_log(LOG_ERR, "FW: Can't allocate PRD message buffer: %m");
-- 
2.14.3



More information about the Skiboot mailing list