bus/pci: fix numa node return value

Message ID 20210922211906.2135-1-pallavi.kadam@intel.com (mailing list archive)
State Accepted, archived
Headers
Series bus/pci: fix numa node return value |

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/Intel-compilation success Compilation OK
ci/intel-Testing success Testing PASS
ci/iol-aarch64-compile-testing success Testing PASS
ci/iol-mellanox-Performance success Performance Testing PASS
ci/iol-intel-Performance success Performance Testing PASS
ci/iol-intel-Functional success Functional Testing PASS
ci/iol-x86_64-compile-testing success Testing PASS

Commit Message

Kadam, Pallavi Sept. 22, 2021, 9:19 p.m. UTC
  On older CPUs, currently numa_node returns value only for socket 0.
Instead, application should be able to make correct decision and
also to keep consistent with the Linux code,
replace the return value to -1.

Fixes: ac7c98d04f2c ("bus/pci: ignore missing NUMA node on Windows")
Cc: talshn@nvidia.com
Cc: stable@dpdk.org

Reported-by: Vipin Varghese <Vipin.Varghese@intel.com>
Signed-off-by: Pallavi Kadam <pallavi.kadam@intel.com>
---
 drivers/bus/pci/windows/pci.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
  

Comments

Tal Shnaiderman Sept. 23, 2021, 3:44 p.m. UTC | #1
> Subject: [PATCH] bus/pci: fix numa node return value
> 
> External email: Use caution opening links or attachments
> 
> 
> On older CPUs, currently numa_node returns value only for socket 0.
> Instead, application should be able to make correct decision and also to keep
> consistent with the Linux code, replace the return value to -1.
> 
> Fixes: ac7c98d04f2c ("bus/pci: ignore missing NUMA node on Windows")
> Cc: talshn@nvidia.com
> Cc: stable@dpdk.org
> 
> Reported-by: Vipin Varghese <Vipin.Varghese@intel.com>
> Signed-off-by: Pallavi Kadam <pallavi.kadam@intel.com>
> ---
>  drivers/bus/pci/windows/pci.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/bus/pci/windows/pci.c b/drivers/bus/pci/windows/pci.c
> index d39a7748b8..343ef6f33b 100644
> --- a/drivers/bus/pci/windows/pci.c
> +++ b/drivers/bus/pci/windows/pci.c
> @@ -5,6 +5,7 @@
>  #include <rte_errno.h>
>  #include <rte_log.h>
>  #include <rte_eal.h>
> +#include <rte_memory.h>
> 
>  #include "private.h"
>  #include "pci_netuio.h"
> @@ -243,7 +244,7 @@ get_device_resource_info(HDEVINFO dev_info,
>                 DWORD error = GetLastError();
>                 if (error == ERROR_NOT_FOUND) {
>                         /* On older CPUs, NUMA is not bound to PCIe locality. */
> -                       dev->device.numa_node = 0;
> +                       dev->device.numa_node = SOCKET_ID_ANY;
>                         return ERROR_SUCCESS;
>                 }
>                 RTE_LOG_WIN32_ERR("SetupDiGetDevicePropertyW"
> --
> 2.31.1.windows.1

You should add "on Windows" to the end of the patch name to clarity it's a Windows issue.

Aside from that LGTM.

Acked-by: Tal Shnaiderman <talshn@nvidia.com>
  
Thomas Monjalon Sept. 23, 2021, 5:09 p.m. UTC | #2
23/09/2021 17:44, Tal Shnaiderman:
> > Subject: [PATCH] bus/pci: fix numa node return value
> > 
> > On older CPUs, currently numa_node returns value only for socket 0.
> > Instead, application should be able to make correct decision and also to keep
> > consistent with the Linux code, replace the return value to -1.
> > 
> > Fixes: ac7c98d04f2c ("bus/pci: ignore missing NUMA node on Windows")
> > Cc: talshn@nvidia.com
> > Cc: stable@dpdk.org
> > 
> > Reported-by: Vipin Varghese <Vipin.Varghese@intel.com>
> > Signed-off-by: Pallavi Kadam <pallavi.kadam@intel.com>
> 
> Acked-by: Tal Shnaiderman <talshn@nvidia.com>

Applied, thanks
  
Varghese, Vipin Sept. 24, 2021, 9:13 a.m. UTC | #3
Hi Pallavi,

Assuming the intention is set SOCKET_ID_ANY for faulty cases, couple of observation. In Linux

```
        if (access(filename, F_OK) != -1) {
                if (eal_parse_sysfs_value(filename, &tmp) == 0)
                        dev->device.numa_node = tmp;
                else
                        dev->device.numa_node = -1;
        } else {
                dev->device.numa_node = 0;
        }
```

[snipped]
 
> @@ -243,7 +244,7 @@ get_device_resource_info(HDEVINFO dev_info,
>  		DWORD error = GetLastError();

Set the default value as ` dev->device.numa_node = SOCKET_ID_ANY;`

>  		if (error == ERROR_NOT_FOUND) {
>  			/* On older CPUs, NUMA is not bound to PCIe
> locality. */
> -			dev->device.numa_node = 0;
> +			dev->device.numa_node = SOCKET_ID_ANY;

If the API is unsuccessful for ` ERROR_NOT_FOUND ` then you can set it to  `0` (as recommened in documentation)

>  			return ERROR_SUCCESS;
>  		}
>  		RTE_LOG_WIN32_ERR("SetupDiGetDevicePropertyW"

Else if if it other errors it will ` SOCKET_ID_ANY`.
> --
> 2.31.1.windows.1
  

Patch

diff --git a/drivers/bus/pci/windows/pci.c b/drivers/bus/pci/windows/pci.c
index d39a7748b8..343ef6f33b 100644
--- a/drivers/bus/pci/windows/pci.c
+++ b/drivers/bus/pci/windows/pci.c
@@ -5,6 +5,7 @@ 
 #include <rte_errno.h>
 #include <rte_log.h>
 #include <rte_eal.h>
+#include <rte_memory.h>
 
 #include "private.h"
 #include "pci_netuio.h"
@@ -243,7 +244,7 @@  get_device_resource_info(HDEVINFO dev_info,
 		DWORD error = GetLastError();
 		if (error == ERROR_NOT_FOUND) {
 			/* On older CPUs, NUMA is not bound to PCIe locality. */
-			dev->device.numa_node = 0;
+			dev->device.numa_node = SOCKET_ID_ANY;
 			return ERROR_SUCCESS;
 		}
 		RTE_LOG_WIN32_ERR("SetupDiGetDevicePropertyW"