[Skiboot] [PATCH v3 5/6] hdata/hdata_to_dt: Add -s option

Vasant Hegde hegdevasant at linux.vnet.ibm.com
Thu Mar 10 01:27:47 AEDT 2016


hdata_to_dt handles legacy SPIRA data only. This patch adds
new option (-s) to handle new SPIRAH/S data.

Signed-off-by: Vasant Hegde <hegdevasant at linux.vnet.ibm.com>
---
 hdata/test/hdata_to_dt.c | 80 +++++++++++++++++++++++++++++++-----------------
 1 file changed, 52 insertions(+), 28 deletions(-)

diff --git a/hdata/test/hdata_to_dt.c b/hdata/test/hdata_to_dt.c
index 38bf825..c68e5bb 100644
--- a/hdata/test/hdata_to_dt.c
+++ b/hdata/test/hdata_to_dt.c
@@ -125,43 +125,64 @@ static void undefined_bytes(void *p, size_t len)
 
 int main(int argc, char *argv[])
 {
-	int fd, r;
-	bool verbose = false, quiet = false, tree_only = false;
+	int fd, r, i = 0, opt_count = 0;
+	bool verbose = false, quiet = false, tree_only = false, new_spira = false;
 
-	while (argv[1]) {
-		if (strcmp(argv[1], "-v") == 0) {
+	while (argv[++i]) {
+		if (strcmp(argv[i], "-v") == 0) {
 			verbose = true;
-			argv++;
-			argc--;
-		} else if (strcmp(argv[1], "-q") == 0) {
+			opt_count++;
+		} else if (strcmp(argv[i], "-q") == 0) {
 			quiet = true;
-			argv++;
-			argc--;
-		} else if (strcmp(argv[1], "-t") == 0) {
+			opt_count++;
+		} else if (strcmp(argv[i], "-t") == 0) {
 			tree_only = true;
-			argv++;
-			argc--;
-		} else
-			break;
+			opt_count++;
+		} else if (strcmp(argv[i], "-s") == 0) {
+			new_spira = true;
+			opt_count++;
+		}
 	}
 
-	if (argc != 3)
-		errx(1, "Usage: hdata [-v|-q|-t] <spira-dump> <heap-dump>");
+	argc -= opt_count;
+	argv += opt_count;
+	if (argc != 3) {
+		errx(1, "Usage:\n"
+		        "       hdata [-v|-q|-t] <spira-dump> <heap-dump>\n"
+		        "       hdata -s [-v|-q|-t] <spirah-dump> <spiras-dump>\n");
+	}
 
 	/* Copy in spira dump (assumes little has changed!). */
-	fd = open(argv[1], O_RDONLY);
-	if (fd < 0)
-		err(1, "opening %s", argv[1]);
-	r = read(fd, &spira, sizeof(spira));
-	if (r < sizeof(spira.hdr))
-		err(1, "reading %s gave %i", argv[1], r);
-	if (verbose)
-		printf("verbose: read spira %u bytes\n", r);
-	close(fd);
-
-	undefined_bytes((void *)&spira + r, sizeof(spira) - r);
+	if (new_spira) {
+		fd = open(argv[1], O_RDONLY);
+		if (fd < 0)
+			err(1, "opening %s", argv[1]);
+		r = read(fd, &spirah, sizeof(spirah));
+		if (r < sizeof(spirah.hdr))
+			err(1, "reading %s gave %i", argv[1], r);
+		if (verbose)
+			printf("verbose: read spirah %u bytes\n", r);
+		close(fd);
+
+		undefined_bytes((void *)&spirah + r, sizeof(spirah) - r);
+
+		base_addr = be64_to_cpu(spirah.ntuples.hs_data_area.addr);
+	} else {
+		fd = open(argv[1], O_RDONLY);
+		if (fd < 0)
+			err(1, "opening %s", argv[1]);
+		r = read(fd, &spira, sizeof(spira));
+		if (r < sizeof(spira.hdr))
+			err(1, "reading %s gave %i", argv[1], r);
+		if (verbose)
+			printf("verbose: read spira %u bytes\n", r);
+		close(fd);
+
+		undefined_bytes((void *)&spira + r, sizeof(spira) - r);
+
+		base_addr = be64_to_cpu(spira.ntuples.heap.addr);
+	}
 
-	base_addr = be64_to_cpu(spira.ntuples.heap.addr);
 	if (!base_addr)
 		errx(1, "Invalid base addr");
 	if (verbose)
@@ -181,6 +202,9 @@ int main(int argc, char *argv[])
 		       spira_heap_size, spira_heap);
 	close(fd);
 
+	if (new_spira)
+		spiras = (struct spiras *)spira_heap;
+
 	if (quiet) {
 		fclose(stdout);
 		fclose(stderr);
-- 
2.5.0



More information about the Skiboot mailing list