From 8a04cb6125896e9ea25a4d15a316f0d873822c7b Mon Sep 17 00:00:00 2001 From: Tonghao Zhang Date: Wed, 10 May 2017 18:56:33 -0700 Subject: [PATCH] pci: set default numa node for broken systems The NUMA node information for PCI devices provided through sysfs is invalid for AMD Opteron(TM) Processor 62xx and 63xx on Red Hat Enterprise Linux 6, and VMs on some hypervisors. It is good to see more checking for valid values. Typical wrong numa node in some VMs: $ cat /sys/devices/pci0000:00/0000:00:18.6/numa_node -1 Signed-off-by: Tonghao Zhang Acked-by: Sergio Gonzalez Monroy --- lib/librte_eal/linuxapp/eal/eal_pci.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/lib/librte_eal/linuxapp/eal/eal_pci.c b/lib/librte_eal/linuxapp/eal/eal_pci.c index 595622b212..c817b4c395 100644 --- a/lib/librte_eal/linuxapp/eal/eal_pci.c +++ b/lib/librte_eal/linuxapp/eal/eal_pci.c @@ -310,18 +310,18 @@ pci_scan_one(const char *dirname, const struct rte_pci_addr *addr) dev->max_vfs = (uint16_t)tmp; } - /* get numa node */ + /* get numa node, default to 0 if not present */ snprintf(filename, sizeof(filename), "%s/numa_node", dirname); - if (access(filename, R_OK) != 0) { - /* if no NUMA support, set default to 0 */ - dev->device.numa_node = 0; - } else { - if (eal_parse_sysfs_value(filename, &tmp) < 0) { - free(dev); - return -1; - } + + if (eal_parse_sysfs_value(filename, &tmp) == 0 && + tmp < RTE_MAX_NUMA_NODES) dev->device.numa_node = tmp; + else { + RTE_LOG(WARNING, EAL, + "numa_node is invalid or not present. " + "Set it 0 as default\n"); + dev->device.numa_node = 0; } rte_pci_device_name(addr, dev->name, sizeof(dev->name)); -- 2.20.1