File lsslot-Fix-lsslot-c-mem-output-when-using-4GB-LMB-si.patch of Package powerpc-utils.33602

From b1b9e76de0f3ab1dfcd9426779fa20fd77cd5625 Mon Sep 17 00:00:00 2001
From: Luciano Chavez <lnx1138@linux.ibm.com>
Date: Wed, 24 Aug 2022 21:11:32 -0500
Subject: [PATCH] lsslot: Fix lsslot -c mem output when using 4GB LMB size

Upstream: Expected v1.3.11
Git-commit: b1b9e76de0f3ab1dfcd9426779fa20fd77cd5625

When using a LMB size of 4GB, the output of lsslot -c mem would get
reported incorrectly as:

Dynamic Reconfiguration Memory (LMB size 0x0)
:
    DRC Index: 80000001        Address: 100000000
    Removable: No              Associativity: (index: 1) 0 1 4 9
    Section(s):

This patch changes the declaration of the _node_u._smem._lmb_size from
a uint32_t to uint64_t to store the value properly. Any variables that
store the lmb_size are also declared as uint64_t. In addition, we
use the PRIx64 macro in printf statements to properly print the
lmb_size value.

The patch also includes a necessary change to declare the global
variable block_sz_bytes as a uint64_t to fix an infinite loop in
the function get_mem_scns() when the above changes were introduced.

Signed-off-by: Luciano Chavez <lnx1138@linux.ibm.com>
Signed-off-by: Tyrel Datwyler <tyreld@linux.ibm.com>
---
 src/drmgr/drmem.h           | 2 +-
 src/drmgr/drslot_chrp_mem.c | 4 ++--
 src/drmgr/lsslot.c          | 4 ++--
 src/drmgr/ofdt.h            | 2 +-
 4 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/src/drmgr/drmem.h b/src/drmgr/drmem.h
index db5a47f..48108c5 100644
--- a/src/drmgr/drmem.h
+++ b/src/drmgr/drmem.h
@@ -58,7 +58,7 @@ struct drconf_mem_v2 {
 #define LMB_REVERSE_SORT	1
 #define LMB_RANDOM_SORT		2
 
-extern int block_sz_bytes;
+extern uint64_t block_sz_bytes;
 
 struct lmb_list_head *get_lmbs(unsigned int);
 void free_lmbs(struct lmb_list_head *);
diff --git a/src/drmgr/drslot_chrp_mem.c b/src/drmgr/drslot_chrp_mem.c
index 3b78723..d37ee80 100644
--- a/src/drmgr/drslot_chrp_mem.c
+++ b/src/drmgr/drslot_chrp_mem.c
@@ -33,7 +33,7 @@
 #include "drmem.h"
 #include "common_numa.h"
 
-int block_sz_bytes = 0;
+uint64_t block_sz_bytes = 0;
 static char *state_strs[] = {"offline", "online"};
 
 static char *usagestr = "-c mem {-a | -r} {-q <quantity> -p {variable_weight | ent_capacity} | {-q <quantity> | -s [<drc_name> | <drc_index>]}}";
@@ -118,7 +118,7 @@ free_lmbs(struct lmb_list_head *lmb_list)
 static int
 get_mem_scns(struct dr_node *lmb)
 {
-	uint32_t lmb_sz = lmb->lmb_size;
+	uint64_t lmb_sz = lmb->lmb_size;
 	uint64_t phys_addr = lmb->lmb_address;
 	uint32_t mem_scn;
 	int rc = 0;
diff --git a/src/drmgr/lsslot.c b/src/drmgr/lsslot.c
index 87f876e..83e9e85 100644
--- a/src/drmgr/lsslot.c
+++ b/src/drmgr/lsslot.c
@@ -741,7 +741,7 @@ int print_drconf_mem(struct lmb_list_head *lmb_list)
 	if (usr_drc_name)
 		drc_index = strtol(usr_drc_name, NULL, 0);
 
-	printf("Dynamic Reconfiguration Memory (LMB size 0x%x)\n",
+	printf("Dynamic Reconfiguration Memory (LMB size 0x%"PRIx64")\n",
 	       lmb_list->lmbs->lmb_size);
 
 	for (lmb = lmb_list->lmbs; lmb; lmb = lmb->next) {
@@ -808,7 +808,7 @@ int lsslot_chrp_mem(void)
 	if (lmb_list->drconf_buf) {
 		print_drconf_mem(lmb_list);
 	} else {
-		printf("lmb size: 0x%x\n", lmb_list->lmbs->lmb_size);
+		printf("lmb size: 0x%"PRIx64"\n", lmb_list->lmbs->lmb_size);
 		printf("%-20s  %-5s  %c  %s\n", "Memory Node", "Name", 'R',
 		       "Sections");
 		printf("%-20s  %-5s  %c  %s\n", "-----------", "----", '-',
diff --git a/src/drmgr/ofdt.h b/src/drmgr/ofdt.h
index 26c943a..bd90810 100644
--- a/src/drmgr/ofdt.h
+++ b/src/drmgr/ofdt.h
@@ -94,7 +94,7 @@ struct dr_node {
 	union {
 		struct mem_info {
 			uint64_t	_address;
-			uint32_t	_lmb_size;
+			uint64_t	_lmb_size;
 			uint32_t	_lmb_aa_index;
 			struct mem_scn	*_mem_scns;
 			struct of_node	*_of_node;
-- 
2.37.3

openSUSE Build Service is sponsored by