Skip to content

Commit

Permalink
ethdev: prohibit polling stopped queue
Browse files Browse the repository at this point in the history
[ upstream commit b77d3318d6a3ca266751031ff04520b7ad485529 ]

Whether it is allowed to call Rx/Tx functions for a stopped queue
was undocumented. Some PMDs make this behavior a no-op
either by explicitly checking the queue state
or by the way how their routines are implemented or HW works.

No-op behavior may be convenient for application developers.
But it also means that pollers of stopped queues
would go all the way down to PMD Rx/Tx routines, wasting cycles.
Some PMDs would do a check for the queue state on data path,
even though it may never be needed for a particular application.
Also, use cases for stopping queues or starting them deferred
do not logically require polling stopped queues.

Use case 1: a secondary that was polling the queue has crashed,
the primary is doing a recovery to free all mbufs.
By definition the queue to be restarted is not polled.

Use case 2: deferred queue start or queue reconfiguration.
The polling thread must be synchronized anyway,
because queue start and stop are non-atomic.

Prohibit calling Rx/Tx functions on stopped queues.

Fixes: 0748be2 ("ethdev: queue start and stop")

Signed-off-by: Dmitry Kozlyuk <dkozlyuk@nvidia.com>
Acked-by: Tyler Retzlaff <roretzla@linux.microsoft.com>
  • Loading branch information
dkozlyuk authored and cpaelzer committed Jul 7, 2022
1 parent ae3d483 commit 1e64fc6
Showing 1 changed file with 1 addition and 1 deletion.
2 changes: 1 addition & 1 deletion lib/librte_ethdev/rte_ethdev.h
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@
* rte_eth_rx_queue_setup()), it must call rte_eth_dev_stop() first to stop the
* device and then do the reconfiguration before calling rte_eth_dev_start()
* again. The transmit and receive functions should not be invoked when the
* device is stopped.
* device or the queue is stopped.
*
* Please note that some configuration is not stored between calls to
* rte_eth_dev_stop()/rte_eth_dev_start(). The following configuration will
Expand Down

0 comments on commit 1e64fc6

Please sign in to comment.