783b6e5497
We need the synchronous way for multi-process communication, i.e., blockingly waiting for reply message when we send a request to the peer process. We add two APIs rte_eal_mp_request() and rte_eal_mp_reply() for such use case. By invoking rte_eal_mp_request(), a request message is sent out, and then it waits there for a reply message. The caller can specify the timeout. And the response messages will be collected and returned so that the caller can decide how to translate them. The API rte_eal_mp_reply() is always called by an mp action handler. Here we add another parameter for rte_eal_mp_t so that the action handler knows which peer address to reply. sender-process receiver-process ---------------------- ---------------- thread-n |_rte_eal_mp_request() ----------> mp-thread |_timedwait() |_process_msg() |_action() |_rte_eal_mp_reply() mp_thread <---------------------| |_process_msg() |_signal(send_thread) thread-m <----------| |_collect-reply * A secondary process is only allowed to talk to the primary process. * If there are multiple secondary processes for the primary process, it will send request to peer1, collect response from peer1; then send request to peer2, collect response from peer2, and so on. * When thread-n is sending request, thread-m of that process can send request at the same time. * For pair <action_name, peer>, we guarantee that only one such request is on the fly. Suggested-by: Anatoly Burakov <anatoly.burakov@intel.com> Suggested-by: Konstantin Ananyev <konstantin.ananyev@intel.com> Signed-off-by: Jianfeng Tan <jianfeng.tan@intel.com> Reviewed-by: Anatoly Burakov <anatoly.burakov@intel.com> Acked-by: Konstantin Ananyev <konstantin.ananyev@intel.com>
259 lines
4.6 KiB
Plaintext
259 lines
4.6 KiB
Plaintext
DPDK_2.0 {
|
|
global:
|
|
|
|
__rte_panic;
|
|
devargs_list;
|
|
eal_parse_sysfs_value;
|
|
eal_timer_source;
|
|
lcore_config;
|
|
per_lcore__lcore_id;
|
|
per_lcore__rte_errno;
|
|
rte_calloc;
|
|
rte_calloc_socket;
|
|
rte_cpu_check_supported;
|
|
rte_cpu_get_flag_enabled;
|
|
rte_cycles_vmware_tsc_map;
|
|
rte_delay_us;
|
|
rte_dump_physmem_layout;
|
|
rte_dump_registers;
|
|
rte_dump_stack;
|
|
rte_dump_tailq;
|
|
rte_eal_alarm_cancel;
|
|
rte_eal_alarm_set;
|
|
rte_eal_devargs_add;
|
|
rte_eal_devargs_dump;
|
|
rte_eal_devargs_type_count;
|
|
rte_eal_get_configuration;
|
|
rte_eal_get_lcore_state;
|
|
rte_eal_get_physmem_layout;
|
|
rte_eal_get_physmem_size;
|
|
rte_eal_has_hugepages;
|
|
rte_eal_hpet_init;
|
|
rte_eal_init;
|
|
rte_eal_iopl_init;
|
|
rte_eal_lcore_role;
|
|
rte_eal_mp_remote_launch;
|
|
rte_eal_mp_wait_lcore;
|
|
rte_eal_parse_devargs_str;
|
|
rte_eal_process_type;
|
|
rte_eal_remote_launch;
|
|
rte_eal_tailq_lookup;
|
|
rte_eal_tailq_register;
|
|
rte_eal_wait_lcore;
|
|
rte_exit;
|
|
rte_free;
|
|
rte_get_hpet_cycles;
|
|
rte_get_hpet_hz;
|
|
rte_get_tsc_hz;
|
|
rte_hexdump;
|
|
rte_intr_callback_register;
|
|
rte_intr_callback_unregister;
|
|
rte_intr_disable;
|
|
rte_intr_enable;
|
|
rte_log;
|
|
rte_log_cur_msg_loglevel;
|
|
rte_log_cur_msg_logtype;
|
|
rte_logs;
|
|
rte_malloc;
|
|
rte_malloc_dump_stats;
|
|
rte_malloc_get_socket_stats;
|
|
rte_malloc_set_limit;
|
|
rte_malloc_socket;
|
|
rte_malloc_validate;
|
|
rte_mem_lock_page;
|
|
rte_mem_virt2phy;
|
|
rte_memdump;
|
|
rte_memory_get_nchannel;
|
|
rte_memory_get_nrank;
|
|
rte_memzone_dump;
|
|
rte_memzone_lookup;
|
|
rte_memzone_reserve;
|
|
rte_memzone_reserve_aligned;
|
|
rte_memzone_reserve_bounded;
|
|
rte_memzone_walk;
|
|
rte_openlog_stream;
|
|
rte_realloc;
|
|
rte_set_application_usage_hook;
|
|
rte_socket_id;
|
|
rte_strerror;
|
|
rte_strsplit;
|
|
rte_sys_gettid;
|
|
rte_thread_get_affinity;
|
|
rte_thread_set_affinity;
|
|
rte_vlog;
|
|
rte_zmalloc;
|
|
rte_zmalloc_socket;
|
|
|
|
local: *;
|
|
};
|
|
|
|
DPDK_2.1 {
|
|
global:
|
|
|
|
rte_epoll_ctl;
|
|
rte_epoll_wait;
|
|
rte_intr_allow_others;
|
|
rte_intr_dp_is_en;
|
|
rte_intr_efd_disable;
|
|
rte_intr_efd_enable;
|
|
rte_intr_rx_ctl;
|
|
rte_intr_tls_epfd;
|
|
rte_memzone_free;
|
|
|
|
} DPDK_2.0;
|
|
|
|
DPDK_2.2 {
|
|
global:
|
|
|
|
rte_intr_cap_multiple;
|
|
rte_keepalive_create;
|
|
rte_keepalive_dispatch_pings;
|
|
rte_keepalive_mark_alive;
|
|
rte_keepalive_register_core;
|
|
|
|
} DPDK_2.1;
|
|
|
|
DPDK_16.04 {
|
|
global:
|
|
|
|
rte_cpu_get_flag_name;
|
|
rte_eal_primary_proc_alive;
|
|
|
|
} DPDK_2.2;
|
|
|
|
DPDK_16.07 {
|
|
global:
|
|
|
|
rte_keepalive_mark_sleep;
|
|
rte_keepalive_register_relay_callback;
|
|
rte_rtm_supported;
|
|
rte_thread_setname;
|
|
|
|
} DPDK_16.04;
|
|
|
|
DPDK_16.11 {
|
|
global:
|
|
|
|
rte_delay_us_block;
|
|
rte_delay_us_callback_register;
|
|
rte_eal_dev_attach;
|
|
rte_eal_dev_detach;
|
|
|
|
} DPDK_16.07;
|
|
|
|
DPDK_17.02 {
|
|
global:
|
|
|
|
rte_bus_dump;
|
|
rte_bus_probe;
|
|
rte_bus_register;
|
|
rte_bus_scan;
|
|
rte_bus_unregister;
|
|
|
|
} DPDK_16.11;
|
|
|
|
DPDK_17.05 {
|
|
global:
|
|
|
|
rte_cpu_is_supported;
|
|
rte_intr_free_epoll_fd;
|
|
rte_log_dump;
|
|
rte_log_get_global_level;
|
|
rte_log_register;
|
|
rte_log_set_global_level;
|
|
rte_log_set_level;
|
|
rte_log_set_level_regexp;
|
|
vfio_get_container_fd;
|
|
vfio_get_group_fd;
|
|
vfio_get_group_no;
|
|
|
|
} DPDK_17.02;
|
|
|
|
DPDK_17.08 {
|
|
global:
|
|
|
|
rte_bus_find;
|
|
rte_bus_find_by_device;
|
|
rte_bus_find_by_name;
|
|
rte_log_get_level;
|
|
|
|
} DPDK_17.05;
|
|
|
|
DPDK_17.11 {
|
|
global:
|
|
|
|
rte_eal_create_uio_dev;
|
|
rte_bus_get_iommu_class;
|
|
rte_eal_has_pci;
|
|
rte_eal_iova_mode;
|
|
rte_eal_mbuf_default_mempool_ops;
|
|
rte_eal_using_phys_addrs;
|
|
rte_eal_vfio_intr_mode;
|
|
rte_lcore_has_role;
|
|
rte_malloc_virt2iova;
|
|
rte_mem_virt2iova;
|
|
rte_vfio_enable;
|
|
rte_vfio_is_enabled;
|
|
rte_vfio_noiommu_is_enabled;
|
|
rte_vfio_release_device;
|
|
rte_vfio_setup_device;
|
|
|
|
} DPDK_17.08;
|
|
|
|
DPDK_18.02 {
|
|
global:
|
|
|
|
rte_hypervisor_get;
|
|
rte_hypervisor_get_name;
|
|
rte_vfio_clear_group;
|
|
rte_reciprocal_value;
|
|
rte_reciprocal_value_u64;
|
|
|
|
} DPDK_17.11;
|
|
|
|
EXPERIMENTAL {
|
|
global:
|
|
|
|
rte_eal_cleanup;
|
|
rte_eal_devargs_insert;
|
|
rte_eal_devargs_parse;
|
|
rte_eal_devargs_remove;
|
|
rte_eal_hotplug_add;
|
|
rte_eal_hotplug_remove;
|
|
rte_mp_action_register;
|
|
rte_mp_action_unregister;
|
|
rte_mp_sendmsg;
|
|
rte_mp_request;
|
|
rte_mp_reply;
|
|
rte_service_attr_get;
|
|
rte_service_attr_reset_all;
|
|
rte_service_component_register;
|
|
rte_service_component_unregister;
|
|
rte_service_component_runstate_set;
|
|
rte_service_dump;
|
|
rte_service_finalize;
|
|
rte_service_get_by_id;
|
|
rte_service_get_by_name;
|
|
rte_service_get_count;
|
|
rte_service_get_name;
|
|
rte_service_lcore_add;
|
|
rte_service_lcore_count;
|
|
rte_service_lcore_count_services;
|
|
rte_service_lcore_del;
|
|
rte_service_lcore_list;
|
|
rte_service_lcore_reset_all;
|
|
rte_service_lcore_start;
|
|
rte_service_lcore_stop;
|
|
rte_service_map_lcore_get;
|
|
rte_service_map_lcore_set;
|
|
rte_service_probe_capability;
|
|
rte_service_reset;
|
|
rte_service_run_iter_on_app_lcore;
|
|
rte_service_runstate_get;
|
|
rte_service_runstate_set;
|
|
rte_service_set_runstate_mapped_check;
|
|
rte_service_set_stats_enable;
|
|
rte_service_start_with_defaults;
|
|
|
|
} DPDK_18.02;
|