swr: Prune empty nodes in CalculateProcessorTopology.
authorBruce Cherniak <bruce.cherniak@intel.com>
Thu, 19 Jan 2017 21:44:52 +0000 (15:44 -0600)
committerTim Rowley <timothy.o.rowley@intel.com>
Mon, 23 Jan 2017 19:52:26 +0000 (13:52 -0600)
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
Reviewed-By: George Kyriazis <george.kyriazis@intel.com>
CC: <mesa-stable@lists.freedesktop.org>
src/gallium/drivers/swr/rasterizer/core/threads.cpp

index ee1261206979027db8fc1106606707dc634a7347..f1c3030b851f0d98b54148610427a22e2e3fa858 100644 (file)
@@ -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();