[Skiboot] [PATCH v12 05/23] core/fdt: Introduce __create_dtb()

Gavin Shan gwshan at linux.vnet.ibm.com
Fri Jun 10 15:03:34 AEST 2016


There is shared logic to flatten the whole device tree (used when
loading kernel) or device sub-tree (used by PCI hot add). This
introduces helper function __create_dtb() for the shared logic.
No functional changes introduced.

Signed-off-by: Gavin Shan <gwshan at linux.vnet.ibm.com>
Reviewed-by: Andrew Donnellan <andrew.donnellan at au1.ibm.com>
---
 core/fdt.c | 44 ++++++++++++++++++++++++--------------------
 1 file changed, 24 insertions(+), 20 deletions(-)

diff --git a/core/fdt.c b/core/fdt.c
index 6d8130d..fbfbac6 100644
--- a/core/fdt.c
+++ b/core/fdt.c
@@ -165,15 +165,31 @@ static void create_dtb_reservemap(void *fdt, const struct dt_node *root)
 	save_err(fdt_finish_reservemap(fdt));
 }
 
+static int __create_dtb(void *fdt, size_t len,
+			const struct dt_node *root)
+{
+	fdt_create(fdt, len);
+	create_dtb_reservemap(fdt, root);
+	flatten_dt_node(fdt, root);
+
+	save_err(fdt_finish(fdt));
+	if (fdt_error) {
+		prerror("dtb: error %s\n", fdt_strerror(fdt_error));
+		return fdt_error;
+	}
+
+	dump_fdt(fdt);
+	return 0;
+}
+
 void *create_dtb(const struct dt_node *root)
 {
 	void *fdt = NULL;
 	size_t len = DEVICE_TREE_MAX_SIZE;
 	uint32_t old_last_phandle = last_phandle;
+	int ret;
 
 	do {
-		if (fdt)
-			free(fdt);
 		last_phandle = old_last_phandle;
 		fdt_error = 0;
 		fdt = malloc(len);
@@ -182,26 +198,14 @@ void *create_dtb(const struct dt_node *root)
 			return NULL;
 		}
 
-		fdt_create(fdt, len);
-
-		create_dtb_reservemap(fdt, root);
-
-		/* Unflatten our live tree */
-		flatten_dt_node(fdt, root);
-
-		save_err(fdt_finish(fdt));
-
-		if (!fdt_error)
-			break;
+		ret = __create_dtb(fdt, len, root);
+		if (ret) {
+			free(fdt);
+			fdt = NULL;
+		}
 
 		len *= 2;
-	} while (fdt_error == -FDT_ERR_NOSPACE);
+	} while (ret == -FDT_ERR_NOSPACE);
 
-	dump_fdt(fdt);
-
-	if (fdt_error) {
-		prerror("dtb: error %s\n", fdt_strerror(fdt_error));
-		return NULL;
-	}
 	return fdt;
 }
-- 
2.1.0



More information about the Skiboot mailing list