If total memory is already bigger than max memory, an underflow
will occur on subtraction. Fix it by simply stopping whenever
we already have amount of memory that is bigger than maximum.

Fixes: 66cc45e293ed ("mem: replace memseg with memseg lists")
Cc: anatoly.bura...@intel.com

Signed-off-by: Anatoly Burakov <anatoly.bura...@intel.com>
---
 lib/librte_eal/common/eal_common_memory.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/lib/librte_eal/common/eal_common_memory.c 
b/lib/librte_eal/common/eal_common_memory.c
index 4c943b0..a1e07d8 100644
--- a/lib/librte_eal/common/eal_common_memory.c
+++ b/lib/librte_eal/common/eal_common_memory.c
@@ -429,6 +429,9 @@ memseg_primary_init(void)
                                break;
 #endif
 
+                       if (total_mem >= max_mem)
+                               break;
+
                        max_type_mem = RTE_MIN(max_mem - total_mem,
                                (uint64_t)RTE_MAX_MEM_MB_PER_TYPE << 20);
                        max_segs = RTE_MAX_MEMSEG_PER_TYPE;
-- 
2.7.4

Reply via email to