summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPatrick Rudolph <patrick.rudolph@9elements.com>2024-02-14 10:44:11 +0100
committerLean Sheng Tan <sheng.tan@9elements.com>2024-02-18 07:51:51 +0000
commit8bbc07ef232c329d811ae920953a9858c5b1821e (patch)
tree1599969180aa5add3c3b14645c6487b0c344e074
parenteba383c20ce8f6f98981afbc40137571519a8571 (diff)
downloadcoreboot-8bbc07ef232c329d811ae920953a9858c5b1821e.tar.gz
coreboot-8bbc07ef232c329d811ae920953a9858c5b1821e.tar.bz2
coreboot-8bbc07ef232c329d811ae920953a9858c5b1821e.zip
soc/intel/xeon_sp/spr: Don't leak memory
Only call fill_pds() once to prevent leaking memory. Previously it was called for every active stack on every socket. Only call dump_pds() once to prevent spamming the console with the same information. Drop the return value since it's always returning success. Change-Id: Ifa9609e9da086dc9731556014ea9b320b270d776 Signed-off-by: Patrick Rudolph <patrick.rudolph@9elements.com> Reviewed-on: https://review.coreboot.org/c/coreboot/+/80547 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Shuo Liu <shuo.liu@intel.com> Reviewed-by: Arthur Heymans <arthur@aheymans.xyz>
-rw-r--r--src/soc/intel/xeon_sp/include/soc/numa.h2
-rw-r--r--src/soc/intel/xeon_sp/spr/numa.c6
-rw-r--r--src/soc/intel/xeon_sp/uncore.c12
3 files changed, 10 insertions, 10 deletions
diff --git a/src/soc/intel/xeon_sp/include/soc/numa.h b/src/soc/intel/xeon_sp/include/soc/numa.h
index 6aaf1723a361..aba3f0926bc3 100644
--- a/src/soc/intel/xeon_sp/include/soc/numa.h
+++ b/src/soc/intel/xeon_sp/include/soc/numa.h
@@ -54,7 +54,7 @@ struct proximity_domains {
extern struct proximity_domains pds;
void dump_pds(void);
-enum cb_err fill_pds(void);
+void fill_pds(void);
/*
* Return the total size of memory regions in generic initiator affinity
diff --git a/src/soc/intel/xeon_sp/spr/numa.c b/src/soc/intel/xeon_sp/spr/numa.c
index 169f4f848b60..23f52c625f39 100644
--- a/src/soc/intel/xeon_sp/spr/numa.c
+++ b/src/soc/intel/xeon_sp/spr/numa.c
@@ -25,7 +25,7 @@ void dump_pds(void)
}
}
-enum cb_err fill_pds(void)
+void fill_pds(void)
{
uint8_t num_sockets = soc_get_num_cpus();
uint8_t num_cxlnodes = get_cxl_node_count();
@@ -72,7 +72,7 @@ enum cb_err fill_pds(void)
/* If there are no CXL nodes, we are done */
if (num_cxlnodes == 0)
- return CB_SUCCESS;
+ return;
/* There are CXL nodes, fill in generic initiator domain after the processors pds */
uint8_t skt_id, cxl_id;
@@ -98,8 +98,6 @@ enum cb_err fill_pds(void)
}
}
}
-
- return CB_SUCCESS;
}
/*
diff --git a/src/soc/intel/xeon_sp/uncore.c b/src/soc/intel/xeon_sp/uncore.c
index de2d17500e3d..96855edd5a42 100644
--- a/src/soc/intel/xeon_sp/uncore.c
+++ b/src/soc/intel/xeon_sp/uncore.c
@@ -329,11 +329,13 @@ static void mmapvtd_read_resources(struct device *dev)
int index = 0;
if (CONFIG(SOC_INTEL_HAS_CXL)) {
- /* Construct NUMA data structure. This is needed for CXL. */
- if (fill_pds() != CB_SUCCESS)
- pds.num_pds = 0;
-
- dump_pds();
+ static bool once;
+ if (!once) {
+ /* Construct NUMA data structure. This is needed for CXL. */
+ fill_pds();
+ dump_pds();
+ once = true;
+ }
}
/* Read standard PCI resources. */