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 <nic@opencloud.tech>
Acked-by: Sergio Gonzalez Monroy <sergio.gonzalez.monroy@intel.com>
This commit is contained in:
Tonghao Zhang 2017-05-10 18:56:33 -07:00 committed by Thomas Monjalon
parent 077d248889
commit 8a04cb6125

View File

@ -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));