swr: Prune empty nodes in CalculateProcessorTopology.

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>
(cherry picked from commit b829206b07)
This commit is contained in:
Bruce Cherniak 2017-01-19 15:44:52 -06:00 committed by Emil Velikov
parent e4cf4690d1
commit 34f902e17e

View 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();