Andrew, Ferruh, Thomas, which behavior does ethdev assume (see below)?

> This patch was created with the assumption
> that stopped queues may not be used for Rx/Tx.
> No-op behavior of rte_eth_rx/tx_burst()
> for a stopped queue is not documented.
> Yes, at least some PMDs implement it this way.
> But is this behavior intended?
> 
> It is the application that stops the queue or starts it deferred.
> Stopping is non-atomic, so polling the queue is not allowed during it.
> Hence, if the application intends to stop queues, it must either:
> 
> a) Know the queue is not polled before stopping it.
>    Use case: a secondary that was polling the queue has crashed,
>    the primary is doing a recovery to free all mbufs.
>    There is no issue since there is no poller to touch the queue.
> 
> b) Tell the poller to skip the queue for the time of stopping it.
>    Use case: deferred queue start or queue reconfiguration.
>    But if the poller is cooperating anyway,
>    what prevents it from not touching the queue for longer?
> 
> The same considerations apply to starting a queue.
> 
> No-op behavior is convenient from the application point of view.
> But it also means that pollers of stopped queues
> will go all the way down to PMD Rx/Tx routines, wasting cycles,
> and some PMDs will do a check for the queue state,
> even though it may never be needed for a particular application.

Reply via email to