Spdk/lib/thread/spdk_thread.map
Mike Gerdts cd2bcf1061 thread: SPDK spinlocks
This introduces an enhanced spinlock that adds safeguards compared to
the default pthread_spinlock_t. In particular:

- A pthread_spinlock_t is still used, but additional error checking is
  performed to ensure there is no undefined behavior on relock,
  unlocking when not the owner, or destoying a locked lock.
- The SPDK concurrency model allows an SPDK thread to be migrated
  between pthreads. Releasing a pthread spinlock on a different thread
  from where it is taken is undefined behavior. If an SPDK spinlock is
  held at a time that a time when a poller or message returns control to
  thread_poll(), the program will abort.
- SPDK spinlocks can only be obtained from an SPDK thread.

Signed-off-by: Mike Gerdts <mgerdts@nvidia.com>
Change-Id: I6dd6493ab5f5532ae69e20654546405a507eb594
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/15277
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: Aleksey Marchuk <alexeymar@nvidia.com>
Reviewed-by: Shuhei Matsumoto <smatsumoto@nvidia.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Community-CI: Mellanox Build Bot
2022-12-06 21:20:17 +00:00

86 lines
2.1 KiB
Plaintext

{
global:
# public functions in spdk/thread.h
spdk_thread_lib_init;
spdk_thread_lib_init_ext;
spdk_thread_lib_fini;
spdk_thread_create;
spdk_thread_get_app_thread;
spdk_set_thread;
spdk_thread_exit;
spdk_thread_is_running;
spdk_thread_is_exited;
spdk_thread_destroy;
spdk_thread_get_ctx;
spdk_thread_get_cpumask;
spdk_thread_set_cpumask;
spdk_thread_get_from_ctx;
spdk_thread_poll;
spdk_thread_next_poller_expiration;
spdk_thread_has_active_pollers;
spdk_thread_has_pollers;
spdk_thread_is_idle;
spdk_thread_get_count;
spdk_get_thread;
spdk_thread_get_name;
spdk_thread_get_id;
spdk_thread_get_by_id;
spdk_thread_get_stats;
spdk_thread_get_last_tsc;
spdk_thread_send_msg;
spdk_thread_send_critical_msg;
spdk_for_each_thread;
spdk_thread_set_interrupt_mode;
spdk_poller_register;
spdk_poller_register_named;
spdk_poller_unregister;
spdk_poller_pause;
spdk_poller_resume;
spdk_poller_register_interrupt;
spdk_io_device_register;
spdk_io_device_unregister;
spdk_get_io_channel;
spdk_put_io_channel;
spdk_io_channel_get_ctx;
spdk_io_channel_from_ctx;
spdk_io_channel_get_thread;
spdk_io_channel_get_io_device;
spdk_for_each_channel;
spdk_io_channel_iter_get_io_device;
spdk_io_channel_iter_get_channel;
spdk_io_channel_iter_get_ctx;
spdk_for_each_channel_continue;
spdk_interrupt_register;
spdk_interrupt_unregister;
spdk_interrupt_set_event_types;
spdk_thread_get_interrupt_fd;
spdk_interrupt_mode_enable;
spdk_interrupt_mode_is_enabled;
spdk_spin_init;
spdk_spin_destroy;
spdk_spin_lock;
spdk_spin_unlock;
spdk_spin_held;
# internal functions in spdk_internal/thread.h
spdk_poller_get_name;
spdk_poller_get_id;
spdk_poller_get_state_str;
spdk_poller_get_period_ticks;
spdk_poller_get_stats;
spdk_io_channel_get_io_device_name;
spdk_io_channel_get_ref_count;
spdk_io_device_get_name;
spdk_thread_get_first_active_poller;
spdk_thread_get_next_active_poller;
spdk_thread_get_first_timed_poller;
spdk_thread_get_next_timed_poller;
spdk_thread_get_first_paused_poller;
spdk_thread_get_next_paused_poller;
spdk_thread_get_first_io_channel;
spdk_thread_get_next_io_channel;
local: *;
};