{"push_id":951637856,"size":2,"distinct_size":2,"ref":"refs/heads/master","head":"347ba9bb9b7a8e053ced54016f903e749ebecb7f","before":"02ab4b1a6a173979a51cabd7000a34546d517e60","commits":[{"sha":"ae7ad0a15ef5c9c045419e1dbcfb7b98b05c7b5a","author":{"email":"e6f59449982e74b9a8013e88011af79c397f66d7@samsung.com","name":"Ilya Maximets"},"message":"dpif-netdev: Rework of rx queue management.\n\nCurrent rx queue management model is buggy and will not work properly\nwithout additional barriers and other syncronization between PMD\nthreads and main thread.\n\nKnown BUGS of current model:\n\t* While reloading, two PMD threads, one already reloaded and\n\t  one not yet reloaded, can poll same queue of the same port.\n\t  This behavior may lead to dpdk driver failure, because they\n\t  are not thread-safe.\n\t* Same bug as fixed in commit e4e74c3a2b\n\t  (\"dpif-netdev: Purge all ukeys when reconfigure pmd.\") but\n\t  reproduced while only reconfiguring of pmd threads without\n\t  restarting, because addition may change the sequence of\n\t  other ports, which is important in time of reconfiguration.\n\nIntroducing the new model, where distribution of queues made by main\nthread with minimal synchronizations and without data races between\npmd threads. Also, this model should work faster, because only\nneeded threads will be interrupted for reconfiguraition and total\ncomputational complexity of reconfiguration is less.\n\nSigned-off-by: Ilya Maximets <i.maximets@samsung.com>\nSigned-off-by: Daniele Di Proietto <diproiettod@vmware.com>","distinct":true,"url":"https://api.github.com/repos/noironetworks/ovs/commits/ae7ad0a15ef5c9c045419e1dbcfb7b98b05c7b5a"},{"sha":"347ba9bb9b7a8e053ced54016f903e749ebecb7f","author":{"email":"e6f59449982e74b9a8013e88011af79c397f66d7@samsung.com","name":"Ilya Maximets"},"message":"dpif-netdev: Unique and sequential tx_qids.\n\nCurrently tx_qid is equal to pmd->core_id. This leads to unexpected\nbehavior if pmd-cpu-mask different from '/(0*)(1|3|7)?(f*)/',\ne.g. if core_ids are not sequential, or doesn't start from 0, or both.\n\nExample:\n\tstarting 2 pmd threads with 1 port, 2 rxqs per port,\n\tpmd-cpu-mask = 00000014 and let dev->real_n_txq = 2\n\n\tIt that case pmd_1->tx_qid = 2, pmd_2->tx_qid = 4 and\n\ttxq_needs_locking = true (if device hasn't ovs_numa_get_n_cores()+1\n\tqueues).\n\n\tIn that case, after truncating in netdev_dpdk_send__():\n\t\t'qid = qid % dev->real_n_txq;'\n\tpmd_1: qid = 2 % 2 = 0\n\tpmd_2: qid = 4 % 2 = 0\n\n\tSo, both threads will call dpdk_queue_pkts() with same qid = 0.\n\tThis is unexpected behavior if there is 2 tx queues in device.\n\tQueue #1 will not be used and both threads will lock queue #0\n\ton each send.\n\nFix that by using sequential tx_qids.\n\nSigned-off-by: Ilya Maximets <i.maximets@samsung.com>\nSigned-off-by: Daniele Di Proietto <diproiettod@vmware.com>","distinct":true,"url":"https://api.github.com/repos/noironetworks/ovs/commits/347ba9bb9b7a8e053ced54016f903e749ebecb7f"}]}