NewMadeleine

Documentation

« back to PM2 home.
nm_ibverbs.h File Reference
#include <nm_minidriver.h>
#include <infiniband/verbs.h>
#include <nm_log.h>
#include <nm_private.h>
Include dependency graph for nm_ibverbs.h:

Go to the source code of this file.

Data Structures

struct  nm_ibverbs_segment_s
 an RDMA segment. More...
 
struct  nm_ibverbs_addr_s
 the addresse for a QP More...
 
struct  nm_ibverbs_cnx_addr_s
 the address for a connection (one per track+gate). More...
 
struct  nm_ibverbs_hca_s
 Global state of a HCA with its context. More...
 
struct  nm_ibverbs_ud_ep_s
 an endpoint for UD messaging More...
 
struct  nm_ibverbs_ud_recv_s
 
struct  nm_ibverbs_ud_recv_pool_s
 
struct  nm_ibverbs_ud_send_s
 
struct  nm_ibverbs_cnx_addr_msg_s
 an addresse entry used to exchange connection addresses More...
 
struct  nm_ibverbs_cnx_connect_packet_s
 a packet sent through UD for address exchange More...
 
struct  nm_ibverbs_context_s
 a context for a HCA in RC mode More...
 
struct  nm_ibverbs_context_s::nm_ibverbs_opts_s
 
struct  nm_ibverbs_cnx_s
 an IB connection for a given destination (QP) More...
 
struct  nm_ibverbs_iface_s
 common interface for ibverbs More...
 
struct  nm_ibverbs_regpool_entry_s
 
struct  nm_ibverbs_regpool_s
 a pool of pre-registered memory buffers More...
 

Macros

#define NM_IBVERBS_UD_DEPTH   8192
 size of QP for send/recv on UD QP for connection establishment
 
#define NM_IBVERBS_TX_DEPTH   256
 size of QP for sending
 
#define NM_IBVERBS_RX_DEPTH   1024
 size of QP for receiving
 
#define NM_IBVERBS_SRQ_DEPTH   16384
 size of the CQ used for SRQ
 
#define NM_IBVERBS_ATOMIC_DEPTH   4
 size of queue for atomic ops
 
#define NM_IBVERBS_MAX_SG_SQ   16
 max sge num for sending
 
#define NM_IBVERBS_MAX_SG_RQ   16
 max sge num for receiving
 
#define NM_IBVERBS_MAX_INLINE   256
 
#define NM_IBVERBS_DEFAULT_MTU   IBV_MTU_1024
 
#define NM_IBVERBS_TIMEOUT_CONNECT   (1000 * 1000) /* 1 s */
 timeout to receive peer connection address (in usec.)
 
#define NM_IBVERBS_TIMEOUT_WARN   (8 * 1000 * 1000) /* 8 s */
 granularity to display warnings about expired timeouts
 
#define NM_IBVERBS_TIMEOUT_READY   (16 * 1000 * 1000) /* 16 s */
 timeout to assume peer is ready even without ready notification
 
#define GRH_OFFSET   40 /* 40 */
 offset at the beginning of all messages to allow for GRH header to be inserted in UD mode
 
#define NM_IBVERBS_SEGMENT_NULL   ((struct nm_ibverbs_segment_s){ .raddr = 0, .rkey = 0 })
 

Enumerations

enum  nm_ibverbs_wrid_e {
  _NM_IBVERBS_WRID_NONE = 0 , NM_IBVERBS_WRID_ACK , NM_IBVERBS_WRID_RDMA , NM_IBVERBS_WRID_RDV ,
  NM_IBVERBS_WRID_DATA , NM_IBVERBS_WRID_HEADER , NM_IBVERBS_WRID_PACKET , NM_IBVERBS_WRID_SEG ,
  NM_IBVERBS_WRID_RTR , NM_IBVERBS_WRID_RECV , NM_IBVERBS_WRID_SEND , _NM_IBVERBS_WRID_MAX
}
 list of WRIDs used in the driver. More...
 
enum  nm_ibverbs_wrid_ud_e { NM_IBVERBS_WRID_UD_SEND = _NM_IBVERBS_WRID_MAX + 1 , NM_IBVERBS_WRID_UD_RECV , NM_IBVERBS_WRID_UD_RECV_POOL_FIRST = 32 , NM_IBVERBS_WRID_UD_RECV_POOL_LAST = 32 + 8192 }
 list of WRIDs used on UD More...
 

Functions

uint32_t nm_ibverbs_checksum (const char *data, nm_len_t len)
 
uint32_t nm_ibverbs_memcpy_and_checksum (void *_dest, const void *_src, nm_len_t len)
 
int nm_ibverbs_checksum_enabled (void)
 
uint32_t nm_ibverbs_copy_from_and_checksum (void *dest, nm_data_slicer_t *p_slicer, const void *src, nm_len_t offset, nm_len_t len)
 
uint32_t nm_ibverbs_copy_to_and_checksum (const void *src, nm_data_slicer_t *p_slicer, void *dest, nm_len_t offset, nm_len_t len)
 
static int nm_ibverbs_segment_isnull (const struct nm_ibverbs_segment_s *p_seg)
 
static int nm_ibverbs_qpn_eq (const uint32_t *p_int1, const uint32_t *p_int2)
 
static uint32_t nm_ibverbs_qpn_hash (const uint32_t *p_int)
 
static int nm_ibverbs_addr_eq (const struct nm_ibverbs_addr_s *p_addr1, const struct nm_ibverbs_addr_s *p_addr2)
 
static uint32_t nm_ibverbs_addr_hash (const struct nm_ibverbs_addr_s *p_addr)
 
 PUK_LIST_TYPE (nm_ibverbs_cnx_addr_entry, struct nm_ibverbs_cnx_addr_msg_s msg;enum nm_ibverbs_cnx_addr_state_e local_state;int local_timeout;uint64_t local_oob;struct nm_ibverbs_cnx_s *p_cnx;double t_timeout;)
 an address entry used to store connection addresses
 
static void nm_ibverbs_cnx_addr_entry_destructor (struct nm_ibverbs_addr_s *p_addr, struct nm_ibverbs_cnx_addr_entry_s *p_entry)
 
 PUK_HASHTABLE_TYPE (nm_ibverbs_cnx_addr_entry, struct nm_ibverbs_addr_s *, struct nm_ibverbs_cnx_addr_entry_s *, &nm_ibverbs_addr_hash, &nm_ibverbs_addr_eq, &nm_ibverbs_cnx_addr_entry_destructor)
 
 PUK_HASHTABLE_TYPE (nm_ibverbs_cnx_qpn, const uint32_t *, struct nm_ibverbs_cnx_s *, &nm_ibverbs_qpn_hash, &nm_ibverbs_qpn_eq, NULL)
 
 PUK_IFACE_TYPE (NewMad_ibverbs, struct nm_ibverbs_iface_s)
 
void nm_ibverbs_hca_open (struct nm_ibverbs_hca_s *p_hca, const char *device, int port, int gidx)
 
void nm_ibverbs_hca_close (struct nm_ibverbs_hca_s *p_hca)
 
struct nm_ibverbs_cnx_snm_ibverbs_cnx_create (struct nm_ibverbs_context_s *p_ibverbs_context, int cnx_id)
 
void nm_ibverbs_cnx_close (struct nm_ibverbs_cnx_s *p_ibverbs_cnx)
 
void nm_ibverbs_cnx_connect_async (struct nm_ibverbs_cnx_s *p_ibverbs_cnx, const void *p_url, size_t urlsize)
 
void nm_ibverbs_cnx_connect_wait (struct nm_ibverbs_cnx_s *p_ibverbs_cnx)
 
struct nm_ibverbs_cnx_snm_ibverbs_cnx_vector_connect (struct nm_ibverbs_context_s *p_ibverbs_context, const void *p_remote_url, size_t url_size)
 return an already connected cnx, when vector connection is available
 
int nm_ibverbs_cnx_vector_enabled (void)
 checks whether vector connect attribute is set
 
int nm_ibverbs_cnx_lazy_enabled (void)
 checks whether lazy connect attribute is set
 
void nm_ibverbs_cnx_lazy_create (struct nm_ibverbs_context_s *p_ibverbs_context, struct nm_ibverbs_cnx_s **pp_ibverbs_cnx, const void *p_remote_url, size_t url_size, int cnx_id)
 dynamically create a lazy connection
 
static int nm_ibverbs_cnx_lazy_ready (struct nm_ibverbs_cnx_s *p_ibverbs_cnx)
 returns whether the given lazy connection is ready for communication
 
void nm_ibverbs_cnx_lazy_send_oob (struct nm_ibverbs_cnx_s *p_ibverbs_cnx, uint64_t oob)
 send oob data to remote node
 
static uint64_t nm_ibverbs_cnx_lazy_get_oob (struct nm_ibverbs_cnx_s *p_ibverbs_cnx)
 get latest oob data received
 
void nm_ibverbs_cnx_lazy_progress (struct nm_ibverbs_context_s *p_ibverbs_context)
 make progress on lazy connections
 
static struct nm_ibverbs_cnx_snm_ibverbs_cnx_lazy_by_qpn (struct nm_ibverbs_context_s *p_ibverbs_context, uint32_t qpn)
 
struct nm_ibverbs_context_snm_ibverbs_context_resolve_opts (puk_context_t p_context, const struct nm_ibverbs_opts_s *p_opts)
 
static void nm_ibverbs_context_default_opts (struct nm_ibverbs_opts_s *p_opts)
 
static struct nm_ibverbs_context_snm_ibverbs_context_resolve (puk_context_t p_context)
 resolve context with default opts
 
int nm_ibverbs_context_wait_event (struct nm_ibverbs_context_s *p_ibverbs_context)
 
void nm_ibverbs_context_cancel_wait (struct nm_ibverbs_context_s *p_ibverbs_context)
 
void nm_ibverbs_context_get_profile (struct nm_ibverbs_context_s *p_ibverbs_context, struct nm_drv_profile_s *p_profile)
 
void nm_ibverbs_context_get_url (struct nm_ibverbs_context_s *p_ibverbs_context, const void **pp_url, size_t *p_urlsize)
 get the address for this context
 
void nm_ibverbs_context_get_wide_url (struct nm_ibverbs_context_s *p_ibverbs_context, int session_size, int rank, const void **pp_url, size_t *p_urlsize)
 get wide address for vector connect
 
void nm_ibverbs_context_delete (struct nm_ibverbs_context_s *p_ibverbs_context)
 
void nm_ibverbs_context_set_srq_limit (struct nm_ibverbs_context_s *p_ibverbs_context, int srq_limit)
 
struct ibv_mr * nm_ibverbs_reg_mr (struct nm_ibverbs_context_s *p_ibverbs_context, void *buf, size_t size, struct nm_ibverbs_segment_s *p_segment)
 
int nm_ibverbs_dereg_mr (struct nm_ibverbs_context_s *p_ibverbs_context, struct ibv_mr *p_mr)
 
int nm_ibverbs_do_rdma (struct nm_ibverbs_cnx_s *__restrict__ p_ibverbs_cnx, const void *__restrict__ buf, int size, uint64_t raddr, int opcode, int flags, uint32_t lkey, uint32_t rkey, uint64_t wrid) __attribute__((warn_unused_result))
 
int nm_ibverbs_rdma_send (struct nm_ibverbs_cnx_s *p_ibverbs_cnx, int size, const void *__restrict__ ptr, const void *__restrict__ _raddr, const void *__restrict__ _lbase, const struct nm_ibverbs_segment_s *p_seg, const struct ibv_mr *__restrict__ mr, int wrid) __attribute__((warn_unused_result))
 
int nm_ibverbs_rdma_poll_inout (struct nm_ibverbs_cnx_s *__restrict__ p_ibverbs_cnx, int inout) __attribute__((warn_unused_result))
 
static int nm_ibverbs_rdma_poll_send (struct nm_ibverbs_cnx_s *__restrict__ p_ibverbs_cnx) __attribute__((warn_unused_result))
 
static int nm_ibverbs_rdma_poll_recv (struct nm_ibverbs_cnx_s *__restrict__ p_ibverbs_cnx) __attribute__((warn_unused_result))
 
static int nm_ibverbs_recv_poll (struct nm_ibverbs_cnx_s *__restrict__ p_ibverbs_cnx, uint64_t wrid) __attribute__((warn_unused_result))
 
static int nm_ibverbs_send_poll (struct nm_ibverbs_cnx_s *__restrict__ p_ibverbs_cnx, uint64_t wrid) __attribute__((warn_unused_result))
 
static int nm_ibverbs_send_flush (struct nm_ibverbs_cnx_s *__restrict__ p_ibverbs_cnx, uint64_t wrid) __attribute__((warn_unused_result))
 
static int nm_ibverbs_send_flushn_total (struct nm_ibverbs_cnx_s *__restrict__ p_ibverbs_cnx, int n) __attribute__((warn_unused_result))
 
static int nm_ibverbs_send_flushn (struct nm_ibverbs_cnx_s *__restrict__ p_ibverbs_cnx, int wrid, int n) __attribute__((warn_unused_result))
 
void nm_ibverbs_ud_ep_open (struct nm_ibverbs_ud_ep_s *p_ud_ep, struct nm_ibverbs_hca_s *p_hca)
 
void nm_ibverbs_ud_ep_close (struct nm_ibverbs_ud_ep_s *p_ud_ep)
 
void nm_ibverbs_ud_send_post (struct nm_ibverbs_ud_send_s *p_send, struct nm_ibverbs_ud_ep_s *p_ud_ep, void *buf, size_t size, const struct nm_ibverbs_addr_s *p_remote_addr)
 
int nm_ibverbs_ud_send_poll (struct nm_ibverbs_ud_send_s *p_send)
 
void nm_ibverbs_ud_send (struct nm_ibverbs_ud_ep_s *p_ud_ep, void *buf, size_t size, const struct nm_ibverbs_addr_s *p_remote_addr)
 
void nm_ibverbs_ud_recv_post (struct nm_ibverbs_ud_recv_s *p_recv, struct nm_ibverbs_ud_ep_s *p_ud_ep, void *buf, size_t size)
 
int nm_ibverbs_ud_recv_poll (struct nm_ibverbs_ud_recv_s *p_recv)
 
void nm_ibverbs_ud_recv (struct nm_ibverbs_ud_ep_s *p_ud_ep, void *buf, size_t size)
 
void nm_ibverbs_ud_recv_pool_post (struct nm_ibverbs_ud_recv_pool_s *p_recv, struct nm_ibverbs_ud_ep_s *p_ud_ep, void *buf, size_t size, int depth)
 
int nm_ibverbs_ud_recv_pool_poll (struct nm_ibverbs_ud_recv_pool_s *p_recv)
 
void nm_ibverbs_ud_recv_pool_reload (struct nm_ibverbs_ud_recv_pool_s *p_recv, int i)
 
void nm_ibverbs_ud_recv_pool_delete (struct nm_ibverbs_ud_recv_pool_s *p_recv)
 
static void nm_ibverbs_regpool_entry_segment (const struct nm_ibverbs_regpool_entry_s *p_entry, struct nm_ibverbs_segment_s *p_seg)
 fill segment from regpool entry
 
 PUK_LFSTACK_TYPE (nm_ibverbs_regpool_block, struct nm_ibverbs_regpool_entry_s entry;)
 
 PUK_LFSTACK_TYPE (nm_ibverbs_regpool_slice, void *p_ptr;struct ibv_mr *p_mr;struct nm_ibverbs_regpool_block_lfstack_cell_s *p_cells;)
 
void nm_ibverbs_regpool_init (struct nm_ibverbs_regpool_s *p_regpool, struct nm_ibverbs_context_s *p_ibverbs_context, nm_len_t entry_size, nm_len_t slice_size)
 
void nm_ibverbs_regpool_destroy (struct nm_ibverbs_regpool_s *p_regpool)
 
const struct nm_ibverbs_regpool_entry_snm_ibverbs_regpool_alloc_entry (struct nm_ibverbs_regpool_s *p_regpool)
 
void nm_ibverbs_regpool_free_entry (struct nm_ibverbs_regpool_s *p_regpool, const struct nm_ibverbs_regpool_entry_s *p_entry)
 

Variables

int nm_ibverbs_alignment
 
int nm_ibverbs_memalign
 
static const char *const nm_ibverbs_status_strings []
 messages for Work Completion status

 
static const int nm_ibverbs_mtu_values []
 

Macro Definition Documentation

◆ GRH_OFFSET

#define GRH_OFFSET   40 /* 40 */

offset at the beginning of all messages to allow for GRH header to be inserted in UD mode

Definition at line 49 of file nm_ibverbs.h.

◆ NM_IBVERBS_ATOMIC_DEPTH

#define NM_IBVERBS_ATOMIC_DEPTH   4

size of queue for atomic ops

Definition at line 33 of file nm_ibverbs.h.

◆ NM_IBVERBS_DEFAULT_MTU

#define NM_IBVERBS_DEFAULT_MTU   IBV_MTU_1024

Definition at line 37 of file nm_ibverbs.h.

◆ NM_IBVERBS_MAX_INLINE

#define NM_IBVERBS_MAX_INLINE   256

Definition at line 36 of file nm_ibverbs.h.

◆ NM_IBVERBS_MAX_SG_RQ

#define NM_IBVERBS_MAX_SG_RQ   16

max sge num for receiving

Definition at line 35 of file nm_ibverbs.h.

◆ NM_IBVERBS_MAX_SG_SQ

#define NM_IBVERBS_MAX_SG_SQ   16

max sge num for sending

Definition at line 34 of file nm_ibverbs.h.

◆ NM_IBVERBS_RX_DEPTH

#define NM_IBVERBS_RX_DEPTH   1024

size of QP for receiving

Definition at line 31 of file nm_ibverbs.h.

◆ NM_IBVERBS_SEGMENT_NULL

#define NM_IBVERBS_SEGMENT_NULL   ((struct nm_ibverbs_segment_s){ .raddr = 0, .rkey = 0 })

Definition at line 93 of file nm_ibverbs.h.

◆ NM_IBVERBS_SRQ_DEPTH

#define NM_IBVERBS_SRQ_DEPTH   16384

size of the CQ used for SRQ

Definition at line 32 of file nm_ibverbs.h.

◆ NM_IBVERBS_TIMEOUT_CONNECT

#define NM_IBVERBS_TIMEOUT_CONNECT   (1000 * 1000) /* 1 s */

timeout to receive peer connection address (in usec.)

Definition at line 40 of file nm_ibverbs.h.

◆ NM_IBVERBS_TIMEOUT_READY

#define NM_IBVERBS_TIMEOUT_READY   (16 * 1000 * 1000) /* 16 s */

timeout to assume peer is ready even without ready notification

Definition at line 46 of file nm_ibverbs.h.

◆ NM_IBVERBS_TIMEOUT_WARN

#define NM_IBVERBS_TIMEOUT_WARN   (8 * 1000 * 1000) /* 8 s */

granularity to display warnings about expired timeouts

Definition at line 43 of file nm_ibverbs.h.

◆ NM_IBVERBS_TX_DEPTH

#define NM_IBVERBS_TX_DEPTH   256

size of QP for sending

Definition at line 30 of file nm_ibverbs.h.

◆ NM_IBVERBS_UD_DEPTH

#define NM_IBVERBS_UD_DEPTH   8192

size of QP for send/recv on UD QP for connection establishment

Definition at line 29 of file nm_ibverbs.h.

Enumeration Type Documentation

◆ nm_ibverbs_wrid_e

list of WRIDs used in the driver.

Enumerator
_NM_IBVERBS_WRID_NONE 
NM_IBVERBS_WRID_ACK 

ACK for bycopy.

NM_IBVERBS_WRID_RDMA 

data for bycopy

NM_IBVERBS_WRID_RDV 

rdv for rcache

NM_IBVERBS_WRID_DATA 

data for rcache

NM_IBVERBS_WRID_HEADER 

headers for rcache

NM_IBVERBS_WRID_PACKET 

packet for lr2

NM_IBVERBS_WRID_SEG 

segment for lr2

NM_IBVERBS_WRID_RTR 
NM_IBVERBS_WRID_RECV 
NM_IBVERBS_WRID_SEND 
_NM_IBVERBS_WRID_MAX 

Definition at line 61 of file nm_ibverbs.h.

◆ nm_ibverbs_wrid_ud_e

list of WRIDs used on UD

Enumerator
NM_IBVERBS_WRID_UD_SEND 
NM_IBVERBS_WRID_UD_RECV 
NM_IBVERBS_WRID_UD_RECV_POOL_FIRST 
NM_IBVERBS_WRID_UD_RECV_POOL_LAST 

size of QP for send/recv on UD QP for connection establishment

Definition at line 77 of file nm_ibverbs.h.

Function Documentation

◆ nm_ibverbs_addr_eq()

static int nm_ibverbs_addr_eq ( const struct nm_ibverbs_addr_s p_addr1,
const struct nm_ibverbs_addr_s p_addr2 
)
inlinestatic

◆ nm_ibverbs_addr_hash()

static uint32_t nm_ibverbs_addr_hash ( const struct nm_ibverbs_addr_s p_addr)
inlinestatic

Definition at line 130 of file nm_ibverbs.h.

◆ nm_ibverbs_checksum()

uint32_t nm_ibverbs_checksum ( const char *  data,
nm_len_t  len 
)

◆ nm_ibverbs_checksum_enabled()

int nm_ibverbs_checksum_enabled ( void  )

◆ nm_ibverbs_cnx_addr_entry_destructor()

static void nm_ibverbs_cnx_addr_entry_destructor ( struct nm_ibverbs_addr_s p_addr,
struct nm_ibverbs_cnx_addr_entry_s *  p_entry 
)
static

Definition at line 250 of file nm_ibverbs.h.

◆ nm_ibverbs_cnx_close()

void nm_ibverbs_cnx_close ( struct nm_ibverbs_cnx_s p_ibverbs_cnx)

◆ nm_ibverbs_cnx_connect_async()

void nm_ibverbs_cnx_connect_async ( struct nm_ibverbs_cnx_s p_ibverbs_cnx,
const void *  p_url,
size_t  urlsize 
)

◆ nm_ibverbs_cnx_connect_wait()

void nm_ibverbs_cnx_connect_wait ( struct nm_ibverbs_cnx_s p_ibverbs_cnx)

◆ nm_ibverbs_cnx_create()

struct nm_ibverbs_cnx_s * nm_ibverbs_cnx_create ( struct nm_ibverbs_context_s p_ibverbs_context,
int  cnx_id 
)

◆ nm_ibverbs_cnx_lazy_by_qpn()

static struct nm_ibverbs_cnx_s * nm_ibverbs_cnx_lazy_by_qpn ( struct nm_ibverbs_context_s p_ibverbs_context,
uint32_t  qpn 
)
inlinestatic

◆ nm_ibverbs_cnx_lazy_create()

void nm_ibverbs_cnx_lazy_create ( struct nm_ibverbs_context_s p_ibverbs_context,
struct nm_ibverbs_cnx_s **  pp_ibverbs_cnx,
const void *  p_remote_url,
size_t  url_size,
int  cnx_id 
)

dynamically create a lazy connection

◆ nm_ibverbs_cnx_lazy_enabled()

int nm_ibverbs_cnx_lazy_enabled ( void  )

checks whether lazy connect attribute is set

◆ nm_ibverbs_cnx_lazy_get_oob()

static uint64_t nm_ibverbs_cnx_lazy_get_oob ( struct nm_ibverbs_cnx_s p_ibverbs_cnx)
inlinestatic

get latest oob data received

Definition at line 380 of file nm_ibverbs.h.

References assert(), nm_ibverbs_cnx_lazy_ready(), and nm_ibverbs_cnx_s::p_addr_entry.

Here is the call graph for this function:

◆ nm_ibverbs_cnx_lazy_progress()

void nm_ibverbs_cnx_lazy_progress ( struct nm_ibverbs_context_s p_ibverbs_context)

make progress on lazy connections

◆ nm_ibverbs_cnx_lazy_ready()

static int nm_ibverbs_cnx_lazy_ready ( struct nm_ibverbs_cnx_s p_ibverbs_cnx)
inlinestatic

returns whether the given lazy connection is ready for communication

Definition at line 368 of file nm_ibverbs.h.

References nm_ibverbs_cnx_s::p_addr_entry.

Referenced by nm_ibverbs_cnx_lazy_get_oob().

◆ nm_ibverbs_cnx_lazy_send_oob()

void nm_ibverbs_cnx_lazy_send_oob ( struct nm_ibverbs_cnx_s p_ibverbs_cnx,
uint64_t  oob 
)

send oob data to remote node

◆ nm_ibverbs_cnx_vector_connect()

struct nm_ibverbs_cnx_s * nm_ibverbs_cnx_vector_connect ( struct nm_ibverbs_context_s p_ibverbs_context,
const void *  p_remote_url,
size_t  url_size 
)

return an already connected cnx, when vector connection is available

◆ nm_ibverbs_cnx_vector_enabled()

int nm_ibverbs_cnx_vector_enabled ( void  )

checks whether vector connect attribute is set

◆ nm_ibverbs_context_cancel_wait()

void nm_ibverbs_context_cancel_wait ( struct nm_ibverbs_context_s p_ibverbs_context)

◆ nm_ibverbs_context_default_opts()

static void nm_ibverbs_context_default_opts ( struct nm_ibverbs_opts_s *  p_opts)
inlinestatic

Definition at line 400 of file nm_ibverbs.h.

Referenced by nm_ibverbs_context_resolve().

◆ nm_ibverbs_context_delete()

void nm_ibverbs_context_delete ( struct nm_ibverbs_context_s p_ibverbs_context)

◆ nm_ibverbs_context_get_profile()

void nm_ibverbs_context_get_profile ( struct nm_ibverbs_context_s p_ibverbs_context,
struct nm_drv_profile_s p_profile 
)

◆ nm_ibverbs_context_get_url()

void nm_ibverbs_context_get_url ( struct nm_ibverbs_context_s p_ibverbs_context,
const void **  pp_url,
size_t *  p_urlsize 
)

get the address for this context

◆ nm_ibverbs_context_get_wide_url()

void nm_ibverbs_context_get_wide_url ( struct nm_ibverbs_context_s p_ibverbs_context,
int  session_size,
int  rank,
const void **  pp_url,
size_t *  p_urlsize 
)

get wide address for vector connect

◆ nm_ibverbs_context_resolve()

static struct nm_ibverbs_context_s * nm_ibverbs_context_resolve ( puk_context_t  p_context)
inlinestatic

resolve context with default opts

Definition at line 409 of file nm_ibverbs.h.

References nm_ibverbs_context_default_opts(), and nm_ibverbs_context_resolve_opts().

Here is the call graph for this function:

◆ nm_ibverbs_context_resolve_opts()

struct nm_ibverbs_context_s * nm_ibverbs_context_resolve_opts ( puk_context_t  p_context,
const struct nm_ibverbs_opts_s *  p_opts 
)

◆ nm_ibverbs_context_set_srq_limit()

void nm_ibverbs_context_set_srq_limit ( struct nm_ibverbs_context_s p_ibverbs_context,
int  srq_limit 
)

◆ nm_ibverbs_context_wait_event()

int nm_ibverbs_context_wait_event ( struct nm_ibverbs_context_s p_ibverbs_context)

◆ nm_ibverbs_copy_from_and_checksum()

uint32_t nm_ibverbs_copy_from_and_checksum ( void *  dest,
nm_data_slicer_t p_slicer,
const void *  src,
nm_len_t  offset,
nm_len_t  len 
)

◆ nm_ibverbs_copy_to_and_checksum()

uint32_t nm_ibverbs_copy_to_and_checksum ( const void *  src,
nm_data_slicer_t p_slicer,
void *  dest,
nm_len_t  offset,
nm_len_t  len 
)

◆ nm_ibverbs_dereg_mr()

int nm_ibverbs_dereg_mr ( struct nm_ibverbs_context_s p_ibverbs_context,
struct ibv_mr *  p_mr 
)

◆ nm_ibverbs_do_rdma()

int nm_ibverbs_do_rdma ( struct nm_ibverbs_cnx_s *__restrict__  p_ibverbs_cnx,
const void *__restrict__  buf,
int  size,
uint64_t  raddr,
int  opcode,
int  flags,
uint32_t  lkey,
uint32_t  rkey,
uint64_t  wrid 
)

◆ nm_ibverbs_hca_close()

void nm_ibverbs_hca_close ( struct nm_ibverbs_hca_s p_hca)

◆ nm_ibverbs_hca_open()

void nm_ibverbs_hca_open ( struct nm_ibverbs_hca_s p_hca,
const char *  device,
int  port,
int  gidx 
)

◆ nm_ibverbs_memcpy_and_checksum()

uint32_t nm_ibverbs_memcpy_and_checksum ( void *  _dest,
const void *  _src,
nm_len_t  len 
)

◆ nm_ibverbs_qpn_eq()

static int nm_ibverbs_qpn_eq ( const uint32_t *  p_int1,
const uint32_t *  p_int2 
)
inlinestatic

Definition at line 111 of file nm_ibverbs.h.

◆ nm_ibverbs_qpn_hash()

static uint32_t nm_ibverbs_qpn_hash ( const uint32_t *  p_int)
inlinestatic

Definition at line 115 of file nm_ibverbs.h.

◆ nm_ibverbs_rdma_poll_inout()

int nm_ibverbs_rdma_poll_inout ( struct nm_ibverbs_cnx_s *__restrict__  p_ibverbs_cnx,
int  inout 
)

◆ nm_ibverbs_rdma_poll_recv()

static int nm_ibverbs_rdma_poll_recv ( struct nm_ibverbs_cnx_s *__restrict__  p_ibverbs_cnx)
inlinestatic

Definition at line 504 of file nm_ibverbs.h.

References nm_ibverbs_rdma_poll_inout().

Referenced by nm_ibverbs_recv_poll().

Here is the call graph for this function:

◆ nm_ibverbs_rdma_poll_send()

static int nm_ibverbs_rdma_poll_send ( struct nm_ibverbs_cnx_s *__restrict__  p_ibverbs_cnx)
inlinestatic

Definition at line 497 of file nm_ibverbs.h.

References nm_ibverbs_rdma_poll_inout().

Referenced by nm_ibverbs_send_flush(), nm_ibverbs_send_flushn(), nm_ibverbs_send_flushn_total(), and nm_ibverbs_send_poll().

Here is the call graph for this function:

◆ nm_ibverbs_rdma_send()

int nm_ibverbs_rdma_send ( struct nm_ibverbs_cnx_s p_ibverbs_cnx,
int  size,
const void *__restrict__  ptr,
const void *__restrict__  _raddr,
const void *__restrict__  _lbase,
const struct nm_ibverbs_segment_s p_seg,
const struct ibv_mr *__restrict__  mr,
int  wrid 
)

◆ nm_ibverbs_recv_poll()

static int nm_ibverbs_recv_poll ( struct nm_ibverbs_cnx_s *__restrict__  p_ibverbs_cnx,
uint64_t  wrid 
)
inlinestatic

Definition at line 512 of file nm_ibverbs.h.

References NM_EAGAIN, NM_ESUCCESS, and nm_ibverbs_rdma_poll_recv().

Here is the call graph for this function:

◆ nm_ibverbs_reg_mr()

struct ibv_mr * nm_ibverbs_reg_mr ( struct nm_ibverbs_context_s p_ibverbs_context,
void *  buf,
size_t  size,
struct nm_ibverbs_segment_s p_segment 
)

◆ nm_ibverbs_regpool_alloc_entry()

const struct nm_ibverbs_regpool_entry_s * nm_ibverbs_regpool_alloc_entry ( struct nm_ibverbs_regpool_s p_regpool)

◆ nm_ibverbs_regpool_destroy()

void nm_ibverbs_regpool_destroy ( struct nm_ibverbs_regpool_s p_regpool)

◆ nm_ibverbs_regpool_entry_segment()

static void nm_ibverbs_regpool_entry_segment ( const struct nm_ibverbs_regpool_entry_s p_entry,
struct nm_ibverbs_segment_s p_seg 
)
inlinestatic

◆ nm_ibverbs_regpool_free_entry()

void nm_ibverbs_regpool_free_entry ( struct nm_ibverbs_regpool_s p_regpool,
const struct nm_ibverbs_regpool_entry_s p_entry 
)

◆ nm_ibverbs_regpool_init()

void nm_ibverbs_regpool_init ( struct nm_ibverbs_regpool_s p_regpool,
struct nm_ibverbs_context_s p_ibverbs_context,
nm_len_t  entry_size,
nm_len_t  slice_size 
)

◆ nm_ibverbs_segment_isnull()

static int nm_ibverbs_segment_isnull ( const struct nm_ibverbs_segment_s p_seg)
inlinestatic

Definition at line 94 of file nm_ibverbs.h.

References nm_ibverbs_segment_s::raddr.

◆ nm_ibverbs_send_flush()

static int nm_ibverbs_send_flush ( struct nm_ibverbs_cnx_s *__restrict__  p_ibverbs_cnx,
uint64_t  wrid 
)
inlinestatic

Definition at line 536 of file nm_ibverbs.h.

References NM_ESUCCESS, and nm_ibverbs_rdma_poll_send().

Here is the call graph for this function:

◆ nm_ibverbs_send_flushn()

static int nm_ibverbs_send_flushn ( struct nm_ibverbs_cnx_s *__restrict__  p_ibverbs_cnx,
int  wrid,
int  n 
)
inlinestatic

Definition at line 562 of file nm_ibverbs.h.

References NM_ESUCCESS, and nm_ibverbs_rdma_poll_send().

Here is the call graph for this function:

◆ nm_ibverbs_send_flushn_total()

static int nm_ibverbs_send_flushn_total ( struct nm_ibverbs_cnx_s *__restrict__  p_ibverbs_cnx,
int  n 
)
inlinestatic

Definition at line 549 of file nm_ibverbs.h.

References NM_ESUCCESS, and nm_ibverbs_rdma_poll_send().

Here is the call graph for this function:

◆ nm_ibverbs_send_poll()

static int nm_ibverbs_send_poll ( struct nm_ibverbs_cnx_s *__restrict__  p_ibverbs_cnx,
uint64_t  wrid 
)
inlinestatic

Definition at line 524 of file nm_ibverbs.h.

References NM_EAGAIN, NM_ESUCCESS, and nm_ibverbs_rdma_poll_send().

Here is the call graph for this function:

◆ nm_ibverbs_ud_ep_close()

void nm_ibverbs_ud_ep_close ( struct nm_ibverbs_ud_ep_s p_ud_ep)

◆ nm_ibverbs_ud_ep_open()

void nm_ibverbs_ud_ep_open ( struct nm_ibverbs_ud_ep_s p_ud_ep,
struct nm_ibverbs_hca_s p_hca 
)

◆ nm_ibverbs_ud_recv()

void nm_ibverbs_ud_recv ( struct nm_ibverbs_ud_ep_s p_ud_ep,
void *  buf,
size_t  size 
)

◆ nm_ibverbs_ud_recv_poll()

int nm_ibverbs_ud_recv_poll ( struct nm_ibverbs_ud_recv_s p_recv)

◆ nm_ibverbs_ud_recv_pool_delete()

void nm_ibverbs_ud_recv_pool_delete ( struct nm_ibverbs_ud_recv_pool_s p_recv)

◆ nm_ibverbs_ud_recv_pool_poll()

int nm_ibverbs_ud_recv_pool_poll ( struct nm_ibverbs_ud_recv_pool_s p_recv)

◆ nm_ibverbs_ud_recv_pool_post()

void nm_ibverbs_ud_recv_pool_post ( struct nm_ibverbs_ud_recv_pool_s p_recv,
struct nm_ibverbs_ud_ep_s p_ud_ep,
void *  buf,
size_t  size,
int  depth 
)

◆ nm_ibverbs_ud_recv_pool_reload()

void nm_ibverbs_ud_recv_pool_reload ( struct nm_ibverbs_ud_recv_pool_s p_recv,
int  i 
)

◆ nm_ibverbs_ud_recv_post()

void nm_ibverbs_ud_recv_post ( struct nm_ibverbs_ud_recv_s p_recv,
struct nm_ibverbs_ud_ep_s p_ud_ep,
void *  buf,
size_t  size 
)

◆ nm_ibverbs_ud_send()

void nm_ibverbs_ud_send ( struct nm_ibverbs_ud_ep_s p_ud_ep,
void *  buf,
size_t  size,
const struct nm_ibverbs_addr_s p_remote_addr 
)

◆ nm_ibverbs_ud_send_poll()

int nm_ibverbs_ud_send_poll ( struct nm_ibverbs_ud_send_s p_send)

◆ nm_ibverbs_ud_send_post()

void nm_ibverbs_ud_send_post ( struct nm_ibverbs_ud_send_s p_send,
struct nm_ibverbs_ud_ep_s p_ud_ep,
void *  buf,
size_t  size,
const struct nm_ibverbs_addr_s p_remote_addr 
)

◆ PUK_HASHTABLE_TYPE() [1/2]

PUK_HASHTABLE_TYPE ( nm_ibverbs_cnx_addr_entry  ,
struct nm_ibverbs_addr_s ,
struct nm_ibverbs_cnx_addr_entry_s *  ,
nm_ibverbs_addr_hash,
nm_ibverbs_addr_eq,
nm_ibverbs_cnx_addr_entry_destructor 
)

◆ PUK_HASHTABLE_TYPE() [2/2]

PUK_HASHTABLE_TYPE ( nm_ibverbs_cnx_qpn  ,
const uint32_t *  ,
struct nm_ibverbs_cnx_s ,
nm_ibverbs_qpn_hash,
nm_ibverbs_qpn_eq,
NULL   
)

◆ PUK_IFACE_TYPE()

PUK_IFACE_TYPE ( NewMad_ibverbs  ,
struct nm_ibverbs_iface_s   
)

◆ PUK_LFSTACK_TYPE() [1/2]

PUK_LFSTACK_TYPE ( nm_ibverbs_regpool_block  ,
struct nm_ibverbs_regpool_entry_s entry;   
)

◆ PUK_LFSTACK_TYPE() [2/2]

PUK_LFSTACK_TYPE ( nm_ibverbs_regpool_slice  ,
void *p_ptr;struct ibv_mr *p_mr;struct nm_ibverbs_regpool_block_lfstack_cell_s *p_cells;   
)

◆ PUK_LIST_TYPE()

PUK_LIST_TYPE ( nm_ibverbs_cnx_addr_entry  ,
struct nm_ibverbs_cnx_addr_msg_s msg;enum nm_ibverbs_cnx_addr_state_e local_state;int local_timeout;uint64_t local_oob;struct nm_ibverbs_cnx_s *p_cnx;double t_timeout;   
)

an address entry used to store connection addresses

Variable Documentation

◆ nm_ibverbs_alignment

int nm_ibverbs_alignment
extern

◆ nm_ibverbs_memalign

int nm_ibverbs_memalign
extern

◆ nm_ibverbs_mtu_values

const int nm_ibverbs_mtu_values[]
static
Initial value:
=
{
[ IBV_MTU_256 ] = 256,
[ IBV_MTU_512 ] = 512,
[ IBV_MTU_1024 ] = 1024,
[ IBV_MTU_2048 ] = 2048,
[ IBV_MTU_4096 ] = 4096
}

Definition at line 468 of file nm_ibverbs.h.

◆ nm_ibverbs_status_strings

const char* const nm_ibverbs_status_strings[]
static
Initial value:
=
{
[IBV_WC_SUCCESS] = "success",
[IBV_WC_LOC_LEN_ERR] = "local length error",
[IBV_WC_LOC_QP_OP_ERR] = "local QP op error",
[IBV_WC_LOC_EEC_OP_ERR] = "local EEC op error",
[IBV_WC_LOC_PROT_ERR] = "local protection error",
[IBV_WC_WR_FLUSH_ERR] = "write flush error",
[IBV_WC_MW_BIND_ERR] = "MW bind error",
[IBV_WC_BAD_RESP_ERR] = "bad response error",
[IBV_WC_LOC_ACCESS_ERR] = "local access error",
[IBV_WC_REM_INV_REQ_ERR] = "remote invalid request error",
[IBV_WC_REM_ACCESS_ERR] = "remote access error",
[IBV_WC_REM_OP_ERR] = "remote op error",
[IBV_WC_RETRY_EXC_ERR] = "retry exceded error",
[IBV_WC_RNR_RETRY_EXC_ERR] = "RNR retry exceded error",
[IBV_WC_LOC_RDD_VIOL_ERR] = "local RDD violation error",
[IBV_WC_REM_INV_RD_REQ_ERR] = "remote invalid read request error",
[IBV_WC_REM_ABORT_ERR] = "remote abort error",
[IBV_WC_INV_EECN_ERR] = "invalid EECN error",
[IBV_WC_INV_EEC_STATE_ERR] = "invalid EEC state error",
[IBV_WC_FATAL_ERR] = "fatal error",
[IBV_WC_RESP_TIMEOUT_ERR] = "response timeout error",
[IBV_WC_GENERAL_ERR] = "general error"
}

messages for Work Completion status

Definition at line 442 of file nm_ibverbs.h.