mirror of
https://github.com/openvswitch/ovs
synced 2025-08-31 06:15:47 +00:00
netdev-dpdk: Fix crash when there is no pci numa info.
When kernel cannot obtain the pci numa info, the numa_node file in corresponding pci directory in sysfs will show -1. Then the rte_eth_dev_socket_id() function will return it to ovs. On current master, ovs assumes rte_eth_dev_socket_id() always returns non-negative value. So using this -1 in pmd thread creation will cause ovs crash. To fix the above issue, this commit makes ovs always check the return value of rte_eth_dev_socket_id() and use numa node 0 if the return value is negative. Reported-by: Daniel Badea <daniel.badea@windriver.com> Signed-off-by: Alex Wang <alexw@nicira.com> Acked-by: Daniele Di Proietto <ddiproietto@vmware.com>
This commit is contained in:
@@ -485,13 +485,18 @@ netdev_dpdk_init(struct netdev *netdev_, unsigned int port_no)
|
||||
OVS_REQUIRES(dpdk_mutex)
|
||||
{
|
||||
struct netdev_dpdk *netdev = netdev_dpdk_cast(netdev_);
|
||||
int sid;
|
||||
int err = 0;
|
||||
|
||||
ovs_mutex_init(&netdev->mutex);
|
||||
|
||||
ovs_mutex_lock(&netdev->mutex);
|
||||
|
||||
netdev->socket_id = rte_eth_dev_socket_id(port_no);
|
||||
/* If the 'sid' is negative, it means that the kernel fails
|
||||
* to obtain the pci numa info. In that situation, always
|
||||
* use 'SOCKET0'. */
|
||||
sid = rte_eth_dev_socket_id(port_no);
|
||||
netdev->socket_id = sid < 0 ? SOCKET0 : sid;
|
||||
netdev_dpdk_alloc_txq(netdev, NR_QUEUE);
|
||||
netdev->port_id = port_no;
|
||||
netdev->flags = 0;
|
||||
|
Reference in New Issue
Block a user