From: Bruce Cherniak Date: Thu, 19 Jan 2017 21:44:52 +0000 (-0600) Subject: swr: Prune empty nodes in CalculateProcessorTopology. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=b829206b0739925501bcc68233437d6d03b79795;p=mesa.git 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 CC: --- 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();