[ovs-dev] [PATCH] netdev-dpdk: Fix crash when there is no pci numa info.

Justin Pettit jpettit at nicira.com
Thu Sep 25 21:07:21 UTC 2014


Don't forget to add Daniel to AUTHORS.

--Justin


On September 25, 2014 at 1:27:30 PM, Alex Wang (alexw at nicira.com) wrote:
> 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 
> Signed-off-by: Alex Wang 
> ---
> lib/netdev-dpdk.c | 7 ++++++-
> 1 file changed, 6 insertions(+), 1 deletion(-)
> 
> diff --git a/lib/netdev-dpdk.c b/lib/netdev-dpdk.c
> index 50ea965..9c93768 100644
> --- a/lib/netdev-dpdk.c
> +++ b/lib/netdev-dpdk.c
> @@ -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;
> --
> 1.7.9.5
> 
> _______________________________________________
> dev mailing list
> dev at openvswitch.org
> http://openvswitch.org/mailman/listinfo/dev
> 




More information about the dev mailing list