numam-dpdk/lib
Erik Gabriel Carrillo c0749f7096 timer: allow management in shared memory
Currently, the timer library uses a per-process table of structures to
manage skiplists of timers presumably because timers contain arbitrary
function pointers whose value may not resolve properly in other
processes.

However, if the same callback is used handle all timers, and that
callback is only invoked in one process, then it woud be safe to allow
the data structures to be allocated in shared memory, and to allow
secondary processes to modify the timer lists.  This would let timers be
used in more multi-process scenarios.

The library's global variables are wrapped with a struct, and an array
of these structures is created in shared memory.  The original APIs
are updated to reference the zeroth entry in the array. This maintains
the original behavior for both primary and secondary processes since
the set intersection of their coremasks should be empty [1].  New APIs
are introduced to enable the allocation/deallocation of other entries
in the array.

New variants of the APIs used to start and stop timers are introduced;
they allow a caller to specify which array entry should be used to
locate the timer list to insert into or delete from.

Finally, a new variant of rte_timer_manage() is introduced, which
allows a caller to specify which array entry should be used to locate
the timer lists to process; it can also process multiple timer lists per
invocation.

[1] https://doc.dpdk.org/guides/prog_guide/multi_proc_support.html#multi-process-limitations

Signed-off-by: Erik Gabriel Carrillo <erik.g.carrillo@intel.com>
2019-04-17 20:05:20 +02:00
..
librte_acl replace snprintf with strlcpy 2019-04-04 22:46:05 +02:00
librte_bbdev replace snprintf with strlcpy 2019-04-04 22:46:05 +02:00
librte_bitratestats bitrate: add sanity check on parameters 2018-07-26 20:07:57 +02:00
librte_bpf build: improve dependency handling 2019-02-27 12:13:54 +01:00
librte_cfgfile cfgfile: replace strcat with strlcat 2019-04-05 14:48:15 +02:00
librte_cmdline replace snprintf with strlcpy without adding extra include 2019-04-04 22:45:54 +02:00
librte_compressdev replace snprintf with strlcpy 2019-04-04 22:46:05 +02:00
librte_cryptodev replace snprintf with strlcpy 2019-04-04 22:46:05 +02:00
librte_distributor replace snprintf with strlcpy without adding extra include 2019-04-04 22:45:54 +02:00
librte_eal devargs: promote experimental API as stable 2019-04-17 18:30:04 +02:00
librte_efd replace snprintf with strlcpy 2019-04-04 22:46:05 +02:00
librte_ethdev meter: replace color definitions 2019-04-11 14:27:32 +02:00
librte_eventdev build: increase readability via shortcut variables 2019-04-17 18:09:52 +02:00
librte_flow_classify replace snprintf with strlcpy 2019-04-04 22:46:05 +02:00
librte_gro gro: check invalid TCP header length 2019-01-17 22:38:54 +01:00
librte_gso gso: fix VxLAN/GRE tunnel checks 2019-01-22 17:08:21 +01:00
librte_hash replace snprintf with strlcpy without adding extra include 2019-04-04 22:45:54 +02:00
librte_ip_frag ip_frag: fix IPv6 when MTU sizes not aligned to 8 bytes 2018-12-19 22:40:08 +01:00
librte_ipsec ipsec: de-duplicate crypto op prepare 2019-04-02 16:50:24 +02:00
librte_jobstats replace snprintf with strlcpy 2019-04-04 22:46:05 +02:00
librte_kni build: increase readability via shortcut variables 2019-04-17 18:09:52 +02:00
librte_kvargs build: add module definition files for Windows 2019-04-03 01:21:31 +02:00
librte_latencystats replace snprintf with strlcpy 2019-04-04 22:46:05 +02:00
librte_lpm replace snprintf with strlcpy without adding extra include 2019-04-04 22:45:54 +02:00
librte_mbuf mbuf: add function to generate raw Tx offload value 2019-04-02 16:50:24 +02:00
librte_member replace snprintf with strlcpy 2019-04-04 22:46:05 +02:00
librte_mempool replace snprintf with strlcpy 2019-04-04 22:46:05 +02:00
librte_meter meter: replace color definitions 2019-04-11 14:27:32 +02:00
librte_metrics metrics: disallow null as metric name 2018-07-26 20:30:18 +02:00
librte_net net: fix Tx VLAN flag for offload emulation 2019-04-05 17:45:22 +02:00
librte_pci pci: fix parsing of address without function number 2018-11-13 17:59:42 +01:00
librte_pdump replace snprintf with strlcpy without adding extra include 2019-04-04 22:45:54 +02:00
librte_pipeline meter: replace color definitions 2019-04-11 14:27:32 +02:00
librte_port port: add symmetric crypto 2018-10-12 19:33:02 +02:00
librte_power build: increase readability via shortcut variables 2019-04-17 18:09:52 +02:00
librte_rawdev replace snprintf with strlcpy 2019-04-04 22:46:05 +02:00
librte_reorder replace snprintf with strlcpy 2019-04-04 22:46:05 +02:00
librte_ring replace snprintf with strlcpy without adding extra include 2019-04-04 22:45:54 +02:00
librte_sched meter: replace color definitions 2019-04-11 14:27:32 +02:00
librte_security security: add opaque userdata pointer into security session 2019-01-10 16:57:22 +01:00
librte_stack replace snprintf with strlcpy 2019-04-04 22:46:05 +02:00
librte_table table: fix arm64 hash function selection 2019-04-10 22:04:37 +02:00
librte_telemetry telemetry: fix mapping of statistics 2019-04-02 02:30:53 +02:00
librte_timer timer: allow management in shared memory 2019-04-17 20:05:20 +02:00
librte_vhost build: increase readability via shortcut variables 2019-04-17 18:09:52 +02:00
Makefile stack: introduce stack library 2019-04-04 22:06:16 +02:00
meson.build build: increase readability via shortcut variables 2019-04-17 18:09:52 +02:00