[Mesa-dev] [PATCH] swr: Prune empty nodes in CalculateProcessorTopology.

Bruce Cherniak bruce.cherniak at intel.com
Thu Jan 19 21:44:52 UTC 2017


CalculateProcessorTopology tries to figure out system topology by
parsing /proc/cpuinfo to determine the number of threads, cores, and
NUMA nodes.  There are some architectures where the "physical id" begins
with 1 rather than 0, which was creating and empty "0" node and causing a
crash in CreateThreadPool.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=97102
---
 src/gallium/drivers/swr/rasterizer/core/threads.cpp | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/src/gallium/drivers/swr/rasterizer/core/threads.cpp b/src/gallium/drivers/swr/rasterizer/core/threads.cpp
index ee12612..f1c3030 100644
--- a/src/gallium/drivers/swr/rasterizer/core/threads.cpp
+++ b/src/gallium/drivers/swr/rasterizer/core/threads.cpp
@@ -217,6 +217,15 @@ void CalculateProcessorTopology(CPUNumaNodes& out_nodes, uint32_t& out_numThread
         out_numThreadsPerProcGroup++;
     }
 
+    /* Prune empty numa nodes */
+    for (auto it = out_nodes.begin(); it != out_nodes.end(); ) {
+       if ((*it).cores.size() == 0)
+          it = out_nodes.erase(it);
+       else
+          ++it;
+    }
+
+    /* Prune empty core nodes */
     for (uint32_t node = 0; node < out_nodes.size(); node++) {
         auto& numaNode = out_nodes[node];
         auto it = numaNode.cores.begin();
-- 
2.7.4



More information about the mesa-dev mailing list