diff options
author | Ilya Maximets <i.maximets@samsung.com> | 2015-08-04 12:36:37 -0700 |
---|---|---|
committer | Ethan Jackson <ethan@nicira.com> | 2015-08-04 12:36:45 -0700 |
commit | 2aca813cf4dfd870232d708cda34017e3888333f (patch) | |
tree | 4fbcee18eaad35862a8da212fb8434e2cccfb228 /lib/netdev.c | |
parent | cfe17b43c10d9d14510e77d21cc463c34c6d7c34 (diff) | |
download | openvswitch-2aca813cf4dfd870232d708cda34017e3888333f.tar.gz |
dpif-netdev: fix race for queues between pmd threads.
Currently pmd threads select queues in pmd_load_queues() according to
get_n_pmd_threads_on_numa(). This behavior leads to race between pmds,
beacause dp_netdev_set_pmds_on_numa() starts them one by one and
current number of threads changes incrementally.
As a result we may have the following situation with 2 pmd threads:
* dp_netdev_set_pmds_on_numa()
* pmd12 thread started. Currently only 1 pmd thread exists.
dpif_netdev(pmd12)|INFO|Core 1 processing port 'port_1'
dpif_netdev(pmd12)|INFO|Core 1 processing port 'port_2'
* pmd14 thread started. 2 pmd threads exists.
dpif_netdev|INFO|Created 2 pmd threads on numa node 0
dpif_netdev(pmd14)|INFO|Core 2 processing port 'port_2'
We have:
core 1 --> port 1, port 2
core 2 --> port 2
Fix this by starting pmd threads only after all of them have
been configured.
Cc: Daniele Di Proietto <diproiettod at vmware.com>
Cc: Dyasly Sergey <s.dyasly at samsung.com>
Acked-by: Flavio Leitner <fbl@sysclose.org>
Acked-by: Daniele Di Proietto <diproiettod@vmware.com>
Signed-off-by: Ilya Maximets <i.maximets at samsung.com>
Signed-off-by: Ethan Jackson <ethan@nicira.com>
Diffstat (limited to 'lib/netdev.c')
0 files changed, 0 insertions, 0 deletions