mirror of
https://github.com/freebsd/freebsd-src
synced 2024-10-15 04:43:53 +00:00
[PPC64] Fix NUMA on POWER8
On some POWER8 machines, 'ibm,associativity' property may have 6 cells, which would overflow the 5 cells buffer being used. There was also an issue with the "check if node is root" part, that have been fixed too. Reviewed by: jhibbits Differential Revision: https://reviews.freebsd.org/D23414
This commit is contained in:
parent
d8a85b4237
commit
a9d8f71f7b
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=357262
|
@ -517,17 +517,20 @@ powernv_node_numa_domain(platform_t platform, phandle_t node)
|
|||
cell_t associativity[5];
|
||||
int i, res;
|
||||
|
||||
res = OF_getproplen(node, "ibm,associativity");
|
||||
res = OF_getencprop(node, "ibm,associativity",
|
||||
associativity, sizeof(associativity));
|
||||
|
||||
/* If already at the root, use default domain. */
|
||||
if (res == 0)
|
||||
return (0);
|
||||
else if (res < 0)
|
||||
/* If this node doesn't have associativity, check its parent. */
|
||||
return (powernv_node_numa_domain(platform, OF_parent(node)));
|
||||
|
||||
OF_getencprop(node, "ibm,associativity",
|
||||
associativity, res);
|
||||
/*
|
||||
* If this node doesn't have associativity, or if there are not
|
||||
* enough elements in it, check its parent.
|
||||
*/
|
||||
if (res < (int)(sizeof(cell_t) * (platform_associativity + 1))) {
|
||||
node = OF_parent(node);
|
||||
/* If already at the root, use default domain. */
|
||||
if (node == 0)
|
||||
return (0);
|
||||
return (powernv_node_numa_domain(platform, node));
|
||||
}
|
||||
|
||||
for (i = 0; i < numa_max_domain; i++) {
|
||||
if (numa_domains[i] == associativity[platform_associativity])
|
||||
|
|
Loading…
Reference in a new issue