numam-dpdk/lib
Suanming Mou 80d1a9aff7 ethdev: make flow API thread safe
Currently, the rte_flow functions are not defined as thread safe.
DPDK applications either call the functions in single thread or
protect any concurrent calling for the rte_flow operations using
a lock.

For PMDs support the flow operations thread safe natively, the
redundant protection in application hurts the performance of the
rte_flow operation functions.

And the restriction of thread safe is not guaranteed for the
rte_flow functions also limits the applications' expectation.

This feature is going to change the rte_flow functions to be thread
safe. As different PMDs have different flow operations, some may
support thread safe already and others may not. For PMDs don't
support flow thread safe operation, a new lock is defined in ethdev
in order to protects thread unsafe PMDs from rte_flow level.

A new RTE_ETH_DEV_FLOW_OPS_THREAD_SAFE device flag is added to
determine whether the PMD supports thread safe flow operation or not.
For PMDs support thread safe flow operations, set the
RTE_ETH_DEV_FLOW_OPS_THREAD_SAFE flag, rte_flow level functions will
skip the thread safe helper lock for these PMDs. Again the rte_flow
level thread safe lock only works when PMD operation functions are
not thread safe.

For the PMDs which don't want the default mutex lock, just set the
flag in the PMD, and add the prefer type of lock in the PMD. Then
the default mutex lock is easily replaced by the PMD level lock.

The change has no effect on the current DPDK applications. No change
is required for the current DPDK applications. For the standard posix
pthread_mutex, if no lock contention with the added rte_flow level
mutex, the mutex only does the atomic increasing in
pthread_mutex_lock() and decreasing in
pthread_mutex_unlock(). No futex() syscall will be involved.

Signed-off-by: Suanming Mou <suanmingm@nvidia.com>
Acked-by: Ajit Khaparde <ajit.khaparde@broadcom.com>
Acked-by: Ori Kam <orika@nvidia.com>
Acked-by: Matan Azrad <matan@nvidia.com>
Acked-by: Thomas Monjalon <thomas@monjalon.net>
Acked-by: Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>
2020-10-16 00:44:58 +02:00
..
librte_acl acl: fix build with gcc 5.4.0 2020-10-15 14:31:46 +02:00
librte_bbdev bbdev: use C11 atomics for device processing counter 2020-09-25 15:37:55 +02:00
librte_bitratestats build: remove makefiles 2020-09-08 00:09:50 +02:00
librte_bpf bpf: promote library as stable 2020-09-16 18:52:55 +02:00
librte_cfgfile build: remove makefiles 2020-09-08 00:09:50 +02:00
librte_cmdline cmdline: support Windows 2020-10-15 00:39:10 +02:00
librte_compressdev build: remove makefiles 2020-09-08 00:09:50 +02:00
librte_cryptodev cryptodev: remove algo lists end 2020-10-14 22:22:06 +02:00
librte_distributor build: remove makefiles 2020-09-08 00:09:50 +02:00
librte_eal eal/windows: add pthread mutex 2020-10-16 00:44:58 +02:00
librte_efd build: remove deprecated cpuflag macros 2020-09-25 11:13:57 +02:00
librte_ethdev ethdev: make flow API thread safe 2020-10-16 00:44:58 +02:00
librte_eventdev build: remove makefiles 2020-09-08 00:09:50 +02:00
librte_fib build: remove makefiles 2020-09-08 00:09:50 +02:00
librte_flow_classify build: remove makefiles 2020-09-08 00:09:50 +02:00
librte_graph build: remove makefiles 2020-09-08 00:09:50 +02:00
librte_gro gro: support VXLAN UDP/IPv4 2020-10-06 21:51:03 +02:00
librte_gso gso: fix payload unit size for UDP 2020-09-18 18:55:12 +02:00
librte_hash build: remove deprecated cpuflag macros 2020-09-25 11:13:57 +02:00
librte_ip_frag build: remove makefiles 2020-09-08 00:09:50 +02:00
librte_ipsec cryptodev: change crypto symmetric vector structure 2020-10-14 22:22:06 +02:00
librte_jobstats build: remove makefiles 2020-09-08 00:09:50 +02:00
librte_kni mem: remove physical address aliases 2020-09-19 00:25:35 +02:00
librte_kvargs build: remove makefiles 2020-09-08 00:09:50 +02:00
librte_latencystats build: remove makefiles 2020-09-08 00:09:50 +02:00
librte_lpm config: remap flags used for Arm platforms 2020-10-13 16:35:48 +02:00
librte_mbuf mbuf: extend meaning of QinQ stripped bit 2020-10-15 23:04:55 +02:00
librte_member build: remove deprecated cpuflag macros 2020-09-25 11:13:57 +02:00
librte_mempool mempool: dump handler index and name 2020-10-06 23:44:15 +02:00
librte_meter meter: remove experimental alias 2020-10-05 11:11:59 +02:00
librte_metrics build: remove makefiles 2020-09-08 00:09:50 +02:00
librte_net net: add CRC AVX512 implementation 2020-10-13 19:26:15 +02:00
librte_node build: remove deprecated cpuflag macros 2020-09-25 11:13:57 +02:00
librte_pci net/qede: define PCI config space specific osals 2020-09-30 19:19:11 +02:00
librte_pdump build: remove makefiles 2020-09-08 00:09:50 +02:00
librte_pipeline pipeline: fix instruction config free 2020-10-08 15:09:28 +02:00
librte_port port: remove useless assignment 2020-10-06 23:39:34 +02:00
librte_power power: fix current frequency index 2020-10-07 14:51:52 +02:00
librte_rawdev telemetry: fix passing full params string to command 2020-10-06 22:54:58 +02:00
librte_rcu rcu: promote library as stable 2020-10-06 10:31:13 +02:00
librte_regexdev build: remove makefiles 2020-09-08 00:09:50 +02:00
librte_reorder build: remove makefiles 2020-09-08 00:09:50 +02:00
librte_rib build: remove makefiles 2020-09-08 00:09:50 +02:00
librte_ring config: remove default configs used with make 2020-09-08 00:11:30 +02:00
librte_sched sched: remove redundant subport parameters 2020-10-15 02:14:28 +02:00
librte_security security: modify PDCP xform to support SDAP 2020-10-14 22:24:41 +02:00
librte_stack stack: promote library as stable 2020-10-05 11:56:17 +02:00
librte_table table: fix hash for 32-bit 2020-10-14 14:42:29 +02:00
librte_telemetry telemetry: support array values in data object 2020-10-06 22:55:00 +02:00
librte_timer timer: add limitation note for sync stop and reset 2020-10-08 09:43:57 +02:00
librte_vhost vhost: remove dequeue zero-copy support 2020-09-30 23:16:56 +02:00
meson.build cmdline: support Windows 2020-10-15 00:39:10 +02:00