diff mbox

[v2] hdata: Ignore unnamed memory reservations.

Message ID 20170526070001.25510-1-oohall@gmail.com
State Accepted
Headers show

Commit Message

Oliver O'Halloran May 26, 2017, 7 a.m. UTC
Hostboot should name any and all memory reservations that it provides.
Currently some hostboots export a broken reservation covering the first
256MB of memory and this causes the system to crash at boot due to an
invalid free because this overlaps with the static "ibm,os-reserve"
region (which covers the first 768MB of memory).

According to the hostboot team unnamed reservations are invalid and can
be ignored.

Signed-off-by: Oliver O'Halloran <oohall@gmail.com>
---
 hdata/memory.c | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

Comments

Stewart Smith May 26, 2017, 7:36 a.m. UTC | #1
Oliver O'Halloran <oohall@gmail.com> writes:
> Hostboot should name any and all memory reservations that it provides.
> Currently some hostboots export a broken reservation covering the first
> 256MB of memory and this causes the system to crash at boot due to an
> invalid free because this overlaps with the static "ibm,os-reserve"
> region (which covers the first 768MB of memory).
>
> According to the hostboot team unnamed reservations are invalid and can
> be ignored.
>
> Signed-off-by: Oliver O'Halloran <oohall@gmail.com>

Merged as of 1d4a0a4374f69c890b64f5463930775d94139ded
diff mbox

Patch

diff --git a/hdata/memory.c b/hdata/memory.c
index 0c6c0811f61a..4ff3854f0fd6 100644
--- a/hdata/memory.c
+++ b/hdata/memory.c
@@ -409,7 +409,7 @@  static void get_hb_reserved_mem(struct HDIF_common_hdr *ms_vpd)
 {
 	const struct msvpd_hb_reserved_mem *hb_resv_mem;
 	u64 start_addr, end_addr, label_size;
-	int unnamed = 0, count, i;
+	int count, i;
 	char *label;
 
 	/*
@@ -463,9 +463,11 @@  static void get_hb_reserved_mem(struct HDIF_common_hdr *ms_vpd)
 		memcpy(label, hb_resv_mem->label, label_size);
 		label[label_size] = '\0';
 
-		if (strlen(label) == 0)
-			snprintf(label, 64, "hostboot-reserve-%d", unnamed++);
-
+		/* Unnamed reservations are always broken. Ignore them. */
+		if (strlen(label) == 0) {
+			free(label);
+			continue;
+		}
 
 		prlog(PR_DEBUG, "MEM: Reserve '%s' %#" PRIx64 "-%#" PRIx64 " (type/inst=0x%08x)\n",
 		      label, start_addr, end_addr, be32_to_cpu(hb_resv_mem->type_instance));