Hi, 在 2023/6/16 15:20, Chaoyong He 写道:
From: Zerun Fu <[email protected]>After the mainline Linux kernel commit "fe205d984e7730f4d21f6f8ebc60f0698404ac31" (ACPI: Remove side effect of partly creating a node in acpi_map_pxm_to_online_node) by Jonathan Cameron. When the system does not support NUMA architecture, the "socket_id" is expected to be -1. The valid "socket_id" in BOND PMD is greater than or equal to zero. So it will cause an error when DPDK checks the validity of the "socket_id" when starting the bond. This commit can fix this bug. Fixes: f294e04851fd ("net/bonding: fix socket ID check") Cc: [email protected] Signed-off-by: Zerun Fu <[email protected]> Reviewed-by: Peng Zhang <[email protected]> Reviewed-by: Chaoyong He <[email protected]> Reviewed-by: Long Wu <[email protected]>
No need add your colleagues unless they "reviwed-by" through email-list.
--- v2: * Fix the print format string. v3: * Add the version number of patch. --- drivers/net/bonding/rte_eth_bond_args.c | 6 ++++++ drivers/net/bonding/rte_eth_bond_pmd.c | 6 +++--- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/drivers/net/bonding/rte_eth_bond_args.c b/drivers/net/bonding/rte_eth_bond_args.c index 6553166f5c..c137efd55f 100644 --- a/drivers/net/bonding/rte_eth_bond_args.c +++ b/drivers/net/bonding/rte_eth_bond_args.c @@ -212,6 +212,12 @@ bond_ethdev_parse_socket_id_kvarg(const char *key __rte_unused, if (*endptr != 0 || errno != 0) return -1;+ /* SOCKET_ID_ANY also consider a valid socket id */+ if ((int8_t)socket_id == SOCKET_ID_ANY) { + *(int *)extra_args = SOCKET_ID_ANY; + return 0; + } + /* validate socket id value */ if (socket_id >= 0 && socket_id < RTE_MAX_NUMA_NODES) { *(int *)extra_args = (int)socket_id; diff --git a/drivers/net/bonding/rte_eth_bond_pmd.c b/drivers/net/bonding/rte_eth_bond_pmd.c index f0c4f7d26b..73205f78f4 100644 --- a/drivers/net/bonding/rte_eth_bond_pmd.c +++ b/drivers/net/bonding/rte_eth_bond_pmd.c @@ -3604,7 +3604,7 @@ static int bond_alloc(struct rte_vdev_device *dev, uint8_t mode) { const char *name = rte_vdev_device_name(dev); - uint8_t socket_id = dev->device.numa_node; + int socket_id = dev->device.numa_node; struct bond_dev_private *internals = NULL; struct rte_eth_dev *eth_dev = NULL; uint32_t vlan_filter_bmp_size; @@ -3806,7 +3806,7 @@ bond_probe(struct rte_vdev_device *dev) port_id = bond_alloc(dev, bonding_mode); if (port_id < 0) { RTE_BOND_LOG(ERR, "Failed to create socket %s in mode %u on " - "socket %u.", name, bonding_mode, socket_id); + "socket %d.", name, bonding_mode, socket_id); goto parse_error; } internals = rte_eth_devices[port_id].data->dev_private; @@ -3831,7 +3831,7 @@ bond_probe(struct rte_vdev_device *dev)rte_eth_dev_probing_finish(&rte_eth_devices[port_id]);RTE_BOND_LOG(INFO, "Create bonded device %s on port %d in mode %u on " - "socket %u.", name, port_id, bonding_mode, socket_id); + "socket %d.", name, port_id, bonding_mode, socket_id); return 0;parse_error:

