aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBruce Cherniak <[email protected]>2017-01-19 15:44:52 -0600
committerTim Rowley <[email protected]>2017-01-23 13:52:26 -0600
commitb829206b0739925501bcc68233437d6d03b79795 (patch)
treeb75f96c6ef0434ee4ddd170f06c219a7bc0b9cb0
parentd349449a16825abc8336495afabadb2540b5a688 (diff)
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 <[email protected]> CC: <[email protected]>
-rw-r--r--src/gallium/drivers/swr/rasterizer/core/threads.cpp9
1 files changed, 9 insertions, 0 deletions
diff --git a/src/gallium/drivers/swr/rasterizer/core/threads.cpp b/src/gallium/drivers/swr/rasterizer/core/threads.cpp
index ee126120697..f1c3030b851 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();