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

Alex Wang alexw at nicira.com
Thu Sep 25 21:18:26 UTC 2014


Thx, pushed both patches two master,

On Thu, Sep 25, 2014 at 2:08 PM, Alex Wang <alexw at nicira.com> wrote:

> Thx, Daniele also reminded me of that, will fold that in with the patch.
>
> On Thu, Sep 25, 2014 at 2:07 PM, Justin Pettit <jpettit at nicira.com> wrote:
>
>> 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