numam-dpdk/lib
Dmitry Kozlyuk b77d3318d6 ethdev: prohibit polling stopped queue
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: 0748be2cf9 ("ethdev: queue start and stop")
Cc: stable@dpdk.org

Signed-off-by: Dmitry Kozlyuk <dkozlyuk@nvidia.com>
Acked-by: Tyler Retzlaff <roretzla@linux.microsoft.com>
2022-05-25 12:50:53 +02:00
..
acl acl: fix rules with 8-byte field size 2022-05-30 23:30:33 +02:00
bbdev lib: remove unneeded header includes 2022-02-22 13:10:39 +01:00
bitratestats bitrate: promote free function to stable 2021-10-01 15:31:47 +02:00
bpf bpf: fix build with some libpcap version on FreeBSD 2022-03-14 11:41:52 +01:00
cfgfile version: 21.11-rc0 2021-08-17 08:37:52 +02:00
cmdline lib: remove unneeded header includes 2022-02-22 13:10:39 +01:00
compressdev compressdev: fix missing space in log macro 2022-03-15 02:13:57 +01:00
cryptodev cryptodev: add RSA padding salt length and label 2022-06-02 12:04:11 +02:00
distributor distributor: fix potential overflow 2022-02-27 19:06:59 +01:00
dmadev dmadev: add missing header include 2022-02-22 14:47:41 +01:00
eal eal/ppc: undefine AltiVec keyword vector 2022-06-01 16:51:53 +02:00
efd efd: fix uninitialized structure 2022-02-27 18:58:47 +01:00
ethdev ethdev: prohibit polling stopped queue 2022-05-25 12:50:53 +02:00
eventdev eventdev: use new API to get event crypto metadata 2022-06-01 16:26:34 +02:00
fib lib: remove unneeded header includes 2022-02-22 13:10:39 +01:00
flow_classify lib: remove unneeded header includes 2022-02-22 13:10:39 +01:00
gpudev gpudev: fix page alignment in communication list 2022-03-09 00:14:55 +01:00
graph graph: remove useless duplicate name check 2022-03-07 20:31:14 +01:00
gro lib: remove unneeded header includes 2022-02-22 13:10:39 +01:00
gso mbuf: add namespace to offload flags 2021-10-24 13:37:43 +02:00
hash hash: unify CRC32 selection for x86 and Arm 2022-05-19 10:00:51 -04:00
ip_frag ip_frag: add IPv4 options fragment 2022-06-01 08:58:27 +02:00
ipsec lib: remove unneeded header includes 2022-02-22 13:10:39 +01:00
jobstats lib: remove unneeded header includes 2022-02-22 13:10:39 +01:00
kni kni: add missing C++ guards 2022-02-22 14:47:49 +01:00
kvargs lib: remove unneeded header includes 2022-02-22 13:10:39 +01:00
latencystats lib: remove unneeded header includes 2022-02-22 13:10:39 +01:00
lpm lpm: add scalar version of lookupx4 2022-06-03 11:22:31 +02:00
mbuf mbuf: dump outer VLAN 2022-06-01 11:15:37 +02:00
member lib: remove unneeded header includes 2022-02-22 13:10:39 +01:00
mempool lib: remove unneeded header includes 2022-02-22 13:10:39 +01:00
meter version: 21.11-rc0 2021-08-17 08:37:52 +02:00
metrics metrics: add missing C++ guards 2022-02-22 14:47:49 +01:00
net ip_frag: add IPv4 options fragment 2022-06-01 08:58:27 +02:00
node lib: remove unneeded header includes 2022-02-22 13:10:39 +01:00
pcapng pcapng: fix timestamp wrapping in output files 2022-06-01 16:39:25 +02:00
pci lib: remove unneeded header includes 2022-02-22 13:10:39 +01:00
pdump lib: remove unneeded header includes 2022-02-22 13:10:39 +01:00
pipeline pipeline: support hash functions 2022-06-01 16:01:37 +02:00
port port: support packet mirroring 2022-06-01 15:04:34 +02:00
power power: add get/set min/max scaling frequencies API 2022-06-04 22:39:49 +02:00
rawdev lib: remove unneeded header includes 2022-02-22 13:10:39 +01:00
rcu lib: remove unneeded header includes 2022-02-22 13:10:39 +01:00
regexdev build: hide local symbols in shared libraries 2022-03-08 15:22:33 +01:00
reorder lib: remove unneeded header includes 2022-02-22 13:10:39 +01:00
rib rib: mark error checks with unlikely 2022-06-01 10:58:12 +02:00
ring lib: remove unneeded header includes 2022-02-22 13:10:39 +01:00
sched sched: enable traffic class oversubscription conditionally 2022-06-01 08:58:27 +02:00
security security: fix SA lifetime comments 2022-04-28 09:26:48 +02:00
stack lib: remove unneeded header includes 2022-02-22 13:10:39 +01:00
table table: improve learner table timers 2022-06-01 15:04:46 +02:00
telemetry telemetry: add missing C++ guards 2022-02-22 14:47:49 +01:00
timer lib: remove unneeded header includes 2022-02-22 13:10:39 +01:00
vhost vhost: fix missing virtqueue lock protection 2022-05-09 21:39:58 +02:00
meson.build buildtools/chkincs: check SDK headers for C++ compatibility 2022-02-22 14:47:49 +01:00