numam-dpdk/lib/librte_eal/rte_eal_version.map

286 lines
5.3 KiB
Plaintext
Raw Normal View History

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_eal_mbuf_user_pool_ops;
eal: add shared indexed file-backed array rte_fbarray is a simple indexed array stored in shared memory via mapping files into memory. Rationale for its existence is the following: since we are going to map memory page-by-page, there could be quite a lot of memory segments to keep track of (for smaller page sizes, page count can easily reach thousands). We can't really make page lists truly dynamic and infinitely expandable, because that involves reallocating memory (which is a big no-no in multiprocess). What we can do instead is have a maximum capacity as something really, really large, and decide at allocation time how big the array is going to be. We map the entire file into memory, which makes it possible to use fbarray as shared memory, provided the structure itself is allocated in shared memory. Per-fbarray locking is also used to avoid index data races (but not contents data races - that is up to user application to synchronize). In addition, in understanding that we will frequently need to scan this array for free space and iterating over array linearly can become slow, rte_fbarray provides facilities to index array's usage. The following use cases are covered: - find next free/used slot (useful either for adding new elements to fbarray, or walking the list) - find starting index for next N free/used slots (useful for when we want to allocate chunk of VA-contiguous memory composed of several pages) - find how many contiguous free/used slots there are, starting from specified index (useful for when we want to figure out how many pages we have until next hole in allocated memory, to speed up some bulk operations where we would otherwise have to walk the array and add pages one by one) This is accomplished by storing a usage mask in-memory, right after the data section of the array, and using some bit-level magic to figure out the info we need. Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com> Tested-by: Santosh Shukla <santosh.shukla@caviumnetworks.com> Tested-by: Hemant Agrawal <hemant.agrawal@nxp.com> Tested-by: Gowrishankar Muthukrishnan <gowrishankar.m@linux.vnet.ibm.com>
2018-04-11 12:30:23 +00:00
rte_fbarray_attach;
rte_fbarray_destroy;
rte_fbarray_detach;
rte_fbarray_dump_metadata;
rte_fbarray_find_idx;
rte_fbarray_find_next_free;
rte_fbarray_find_next_used;
rte_fbarray_find_next_n_free;
rte_fbarray_find_next_n_used;
rte_fbarray_find_contig_free;
rte_fbarray_find_contig_used;
rte_fbarray_get;
rte_fbarray_init;
rte_fbarray_is_used;
rte_fbarray_set_free;
rte_fbarray_set_used;
rte_log_register_type_and_pick_level;
rte_malloc_dump_heaps;
rte_mem_iova2virt;
rte_mem_virt2memseg;
rte_memseg_contig_walk;
rte_memseg_walk;
eal: add channel for multi-process communication Previouly, there are three channels for multi-process (i.e., primary/secondary) communication. 1. Config-file based channel, in which, the primary process writes info into a pre-defined config file, and the secondary process reads the info out. 2. vfio submodule has its own channel based on unix socket for the secondary process to get container fd and group fd from the primary process. 3. pdump submodule also has its own channel based on unix socket for packet dump. It'd be good to have a generic communication channel for multi-process communication to accommodate the requirements including: a. Secondary wants to send info to primary, for example, secondary would like to send request (about some specific vdev to primary). b. Sending info at any time, instead of just initialization time. c. Share FDs with the other side, for vdev like vhost, related FDs (memory region, kick) should be shared. d. A send message request needs the other side to response immediately. This patch proposes to create a communication channel, based on datagram unix socket, for above requirements. Each process will block on a unix socket waiting for messages from the peers. Three new APIs are added: 1. rte_eal_mp_action_register() is used to register an action, indexed by a string, when a component at receiver side would like to response the messages from the peer processe. 2. rte_eal_mp_action_unregister() is used to unregister the action if the calling component does not want to response the messages. 3. rte_eal_mp_sendmsg() is used to send a message, and returns immediately. If there are n secondary processes, the primary process will send n messages. 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>
2018-01-30 06:58:08 +00:00
rte_mp_action_register;
rte_mp_action_unregister;
eal: add synchronous multi-process communication 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>
2018-01-30 06:58:09 +00:00
rte_mp_reply;
rte_mp_request_sync;
rte_mp_request_async;
rte_mp_sendmsg;
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_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;
rte_socket_count;
rte_socket_id_by_idx;
rte_vfio_dma_map;
rte_vfio_dma_unmap;
} DPDK_18.02;