|
#define | SPDK_CACHE_LINE_SIZE 64 |
|
#define | spdk_min(a, b) (((a)<(b))?(a):(b)) |
|
#define | spdk_max(a, b) (((a)>(b))?(a):(b)) |
|
#define | SPDK_COUNTOF(arr) (sizeof(arr) / sizeof((arr)[0])) |
|
#define | SPDK_CONTAINEROF(ptr, type, member) ((type *)((uintptr_t)ptr - offsetof(type, member))) |
|
#define | SPDK_SIZEOF_MEMBER(type, member) (sizeof(((type *)0)->member)) |
| Get the size of a member of a struct.
|
|
#define | SPDK_SEC_TO_USEC 1000000ULL |
|
#define | SPDK_SEC_TO_NSEC 1000000000ULL |
|
#define | SPDK_CEIL_DIV(x, y) (((x)+(y)-1)/(y)) |
|
#define | SPDK_ALIGN_FLOOR(val, align) (__typeof__(val))((val) & (~((__typeof__(val))((align) - 1)))) |
| Macro to align a value to a given power-of-two. More...
|
|
#define | SPDK_ALIGN_CEIL(val, align) SPDK_ALIGN_FLOOR(((val) + ((__typeof__(val)) (align) - 1)), align) |
| Macro to align a value to a given power-of-two. More...
|
|
#define | SPDK_CLANG_ANALYZER_PREINIT_PTR_ARRAY(arr, arr_size, buf_size) |
| Scan build is really pessimistic and assumes that mempool functions can dequeue NULL buffers even if they return success. More...
|
|
#define | SPDK_SN32_CMPMAX (1U << (32 - 1)) |
|
|
uint32_t | spdk_u32log2 (uint32_t x) |
|
static uint32_t | spdk_align32pow2 (uint32_t x) |
|
uint64_t | spdk_u64log2 (uint64_t x) |
|
static uint64_t | spdk_align64pow2 (uint64_t x) |
|
static bool | spdk_u32_is_pow2 (uint32_t x) |
| Check if a uint32_t is a power of 2.
|
|
static bool | spdk_u64_is_pow2 (uint64_t x) |
| Check if a uint64_t is a power of 2.
|
|
static uint64_t | spdk_divide_round_up (uint64_t num, uint64_t divisor) |
|
size_t | spdk_iovcpy (struct iovec *siov, size_t siovcnt, struct iovec *diov, size_t diovcnt) |
| Copy the data described by the source iovec to the destination iovec. More...
|
|
size_t | spdk_ioviter_first (struct spdk_ioviter *iter, struct iovec *siov, size_t siovcnt, struct iovec *diov, size_t diovcnt, void **src, void **dst) |
| Initialize and move to the first common segment of the two given iovecs. More...
|
|
size_t | spdk_ioviter_next (struct spdk_ioviter *iter, void **src, void **dst) |
| Move to the next segment in the iterator. More...
|
|
void | spdk_copy_iovs_to_buf (void *buf, size_t buf_len, struct iovec *iovs, int iovcnt) |
| Copy iovs contents to buf through memcpy.
|
|
void | spdk_copy_buf_to_iovs (struct iovec *iovs, int iovcnt, void *buf, size_t buf_len) |
| Copy buf contents to iovs through memcpy.
|
|
static uint32_t | spdk_sn32_add (uint32_t s1, uint32_t s2) |
| Add two sequence numbers s1 and s2. More...
|
|
static bool | spdk_sn32_lt (uint32_t s1, uint32_t s2) |
| Compare if sequence number s1 is less than s2. More...
|
|
static bool | spdk_sn32_gt (uint32_t s1, uint32_t s2) |
| Compare if sequence number s1 is greater than s2. More...
|
|
General utility functions.
size_t spdk_ioviter_next |
( |
struct spdk_ioviter * |
iter, |
|
|
void ** |
src, |
|
|
void ** |
dst |
|
) |
| |
Move to the next segment in the iterator.
This will iterate through the segments of the source and destination and return the individual segments, one by one. For example, if the source consists of one element of length 4k and the destination consists of 4 elements each of length 1k, this function will return 4 1k src+dst pairs of buffers, and then return 0 bytes to indicate the iteration is complete on the fifth call.