Commit 99759869faf1 "acpi: Add acpi_map_pxm_to_online_node()" added
support for mapping a given proximity to its nearest, by SLIT distance,
online node. However, it sometimes returns unexpected results due to the
fact that it switches from comparing the PXM node to the last node that
was closer than the current max.
for_each_online_node(n) {
dist = node_distance(node, n);
if (dist < min_dist) {
min_dist = dist;
node = n; <---- from this point we're using the
wrong node for node_distance()
Fixes: 99759869faf1 ("acpi: Add acpi_map_pxm_to_online_node()")
Cc: <[email protected]>
Cc: Toshi Kani <[email protected]>
Cc: Rafael J. Wysocki <[email protected]>>
Signed-off-by: Dan Williams <[email protected]>
---
Rafael, I can take this through the nvdimm tree with your ack. I have a
few other nvdimm fixes pending for 4.16.
drivers/acpi/numa.c | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/drivers/acpi/numa.c b/drivers/acpi/numa.c
index 8ccaae3550d2..85167603b9c9 100644
--- a/drivers/acpi/numa.c
+++ b/drivers/acpi/numa.c
@@ -103,25 +103,27 @@ int acpi_map_pxm_to_node(int pxm)
*/
int acpi_map_pxm_to_online_node(int pxm)
{
- int node, n, dist, min_dist;
+ int node, min_node;
node = acpi_map_pxm_to_node(pxm);
if (node == NUMA_NO_NODE)
node = 0;
+ min_node = node;
if (!node_online(node)) {
- min_dist = INT_MAX;
+ int min_dist = INT_MAX, dist, n;
+
for_each_online_node(n) {
dist = node_distance(node, n);
if (dist < min_dist) {
min_dist = dist;
- node = n;
+ min_node = n;
}
}
}
- return node;
+ return min_node;
}
EXPORT_SYMBOL(acpi_map_pxm_to_online_node);
[ adding Toshi's correct address ]
On Thu, Mar 15, 2018 at 8:08 PM, Dan Williams <[email protected]> wrote:
> Commit 99759869faf1 "acpi: Add acpi_map_pxm_to_online_node()" added
> support for mapping a given proximity to its nearest, by SLIT distance,
> online node. However, it sometimes returns unexpected results due to the
> fact that it switches from comparing the PXM node to the last node that
> was closer than the current max.
>
> for_each_online_node(n) {
> dist = node_distance(node, n);
> if (dist < min_dist) {
> min_dist = dist;
> node = n; <---- from this point we're using the
> wrong node for node_distance()
>
>
> Fixes: 99759869faf1 ("acpi: Add acpi_map_pxm_to_online_node()")
> Cc: <[email protected]>
> Cc: Toshi Kani <[email protected]>
> Cc: Rafael J. Wysocki <[email protected]>>
> Signed-off-by: Dan Williams <[email protected]>
> ---
> Rafael, I can take this through the nvdimm tree with your ack. I have a
> few other nvdimm fixes pending for 4.16.
>
> drivers/acpi/numa.c | 10 ++++++----
> 1 file changed, 6 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/acpi/numa.c b/drivers/acpi/numa.c
> index 8ccaae3550d2..85167603b9c9 100644
> --- a/drivers/acpi/numa.c
> +++ b/drivers/acpi/numa.c
> @@ -103,25 +103,27 @@ int acpi_map_pxm_to_node(int pxm)
> */
> int acpi_map_pxm_to_online_node(int pxm)
> {
> - int node, n, dist, min_dist;
> + int node, min_node;
>
> node = acpi_map_pxm_to_node(pxm);
>
> if (node == NUMA_NO_NODE)
> node = 0;
>
> + min_node = node;
> if (!node_online(node)) {
> - min_dist = INT_MAX;
> + int min_dist = INT_MAX, dist, n;
> +
> for_each_online_node(n) {
> dist = node_distance(node, n);
> if (dist < min_dist) {
> min_dist = dist;
> - node = n;
> + min_node = n;
> }
> }
> }
>
> - return node;
> + return min_node;
> }
> EXPORT_SYMBOL(acpi_map_pxm_to_online_node);
>
>
On Fri, Mar 16, 2018 at 4:08 AM, Dan Williams <[email protected]> wrote:
> Commit 99759869faf1 "acpi: Add acpi_map_pxm_to_online_node()" added
> support for mapping a given proximity to its nearest, by SLIT distance,
> online node. However, it sometimes returns unexpected results due to the
> fact that it switches from comparing the PXM node to the last node that
> was closer than the current max.
>
> for_each_online_node(n) {
> dist = node_distance(node, n);
> if (dist < min_dist) {
> min_dist = dist;
> node = n; <---- from this point we're using the
> wrong node for node_distance()
>
>
> Fixes: 99759869faf1 ("acpi: Add acpi_map_pxm_to_online_node()")
> Cc: <[email protected]>
> Cc: Toshi Kani <[email protected]>
> Cc: Rafael J. Wysocki <[email protected]>>
> Signed-off-by: Dan Williams <[email protected]>
> ---
> Rafael, I can take this through the nvdimm tree with your ack. I have a
> few other nvdimm fixes pending for 4.16.
OK
Acked-by: Rafael J. Wysocki <[email protected]>
>
> drivers/acpi/numa.c | 10 ++++++----
> 1 file changed, 6 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/acpi/numa.c b/drivers/acpi/numa.c
> index 8ccaae3550d2..85167603b9c9 100644
> --- a/drivers/acpi/numa.c
> +++ b/drivers/acpi/numa.c
> @@ -103,25 +103,27 @@ int acpi_map_pxm_to_node(int pxm)
> */
> int acpi_map_pxm_to_online_node(int pxm)
> {
> - int node, n, dist, min_dist;
> + int node, min_node;
>
> node = acpi_map_pxm_to_node(pxm);
>
> if (node == NUMA_NO_NODE)
> node = 0;
>
> + min_node = node;
> if (!node_online(node)) {
> - min_dist = INT_MAX;
> + int min_dist = INT_MAX, dist, n;
> +
> for_each_online_node(n) {
> dist = node_distance(node, n);
> if (dist < min_dist) {
> min_dist = dist;
> - node = n;
> + min_node = n;
> }
> }
> }
>
> - return node;
> + return min_node;
> }
> EXPORT_SYMBOL(acpi_map_pxm_to_online_node);
>
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-acpi" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html
On Thu, 2018-03-15 at 20:08 -0700, Dan Williams wrote:
> Commit 99759869faf1 "acpi: Add acpi_map_pxm_to_online_node()" added
> support for mapping a given proximity to its nearest, by SLIT distance,
> online node. However, it sometimes returns unexpected results due to the
> fact that it switches from comparing the PXM node to the last node that
> was closer than the current max.
>
> for_each_online_node(n) {
> dist = node_distance(node, n);
> if (dist < min_dist) {
> min_dist = dist;
> node = n; <---- from this point we're using the
> wrong node for node_distance()
ouch...
>
>
> Fixes: 99759869faf1 ("acpi: Add acpi_map_pxm_to_online_node()")
> Cc: <[email protected]>
> Cc: Toshi Kani <[email protected]>
> Cc: Rafael J. Wysocki <[email protected]>>
> Signed-off-by: Dan Williams <[email protected]>
Thanks Dan for the fix!
Reviewed-by: Toshi Kani <[email protected]>
-Toshi