Go to the source code of this file.
|
svm_queue_t * | svm_queue_init (void *base, int nels, int elsize) |
|
svm_queue_t * | svm_queue_alloc_and_init (int nels, int elsize, int consumer_pid) |
| Allocate and initialize svm queue. More...
|
|
void | svm_queue_free (svm_queue_t *q) |
|
void | svm_queue_lock (svm_queue_t *q) |
|
void | svm_queue_unlock (svm_queue_t *q) |
|
int | svm_queue_is_full (svm_queue_t *q) |
|
static void | svm_queue_send_signal (svm_queue_t *q, u8 is_prod) |
|
static void | svm_queue_wait_inline (svm_queue_t *q) |
|
void | svm_queue_wait (svm_queue_t *q) |
| Wait for queue event. More...
|
|
static int | svm_queue_timedwait_inline (svm_queue_t *q, double timeout) |
|
int | svm_queue_timedwait (svm_queue_t *q, double timeout) |
| Timed wait for queue event. More...
|
|
int | svm_queue_add_nolock (svm_queue_t *q, u8 *elem) |
|
void | svm_queue_add_raw (svm_queue_t *q, u8 *elem) |
| Add element to queue with mutex held. More...
|
|
int | svm_queue_add (svm_queue_t *q, u8 *elem, int nowait) |
|
int | svm_queue_add2 (svm_queue_t *q, u8 *elem, u8 *elem2, int nowait) |
|
int | svm_queue_sub (svm_queue_t *q, u8 *elem, svm_q_conditional_wait_t cond, u32 time) |
|
int | svm_queue_sub2 (svm_queue_t *q, u8 *elem) |
|
int | svm_queue_sub_raw (svm_queue_t *q, u8 *elem) |
|
void | svm_queue_set_producer_event_fd (svm_queue_t *q, int fd) |
| Set producer's event fd. More...
|
|
void | svm_queue_set_consumer_event_fd (svm_queue_t *q, int fd) |
| Set consumer's event fd. More...
|
|
Add element to queue with mutex held.
- Parameters
-
q | queue |
elem | pointer element data to add |
Definition at line 220 of file queue.c.
svm_queue_t* svm_queue_alloc_and_init |
( |
int |
nels, |
|
|
int |
elsize, |
|
|
int |
consumer_pid |
|
) |
| |
Allocate and initialize svm queue.
- Parameters
-
nels | number of elements on the queue |
elsize | element size, presumably 4 and cacheline-size will be popular choices. |
pid | consumer pid |
- Returns
- a newly initialized svm queue
The idea is to call this function in the queue consumer, and e-mail the queue pointer to the producer(s).
The vpp process / main thread allocates one of these at startup; its main input queue. The vpp main input queue has a pointer to it in the shared memory segment header.
You probably want to be on an svm data heap before calling this function.
Definition at line 72 of file queue.c.
svm_queue_t* svm_queue_init |
( |
void * |
base, |
|
|
int |
nels, |
|
|
int |
elsize |
|
) |
| |
static void svm_queue_send_signal |
( |
svm_queue_t * |
q, |
|
|
u8 |
is_prod |
|
) |
| |
|
inlinestatic |
void svm_queue_set_consumer_event_fd |
( |
svm_queue_t * |
q, |
|
|
int |
fd |
|
) |
| |
Set consumer's event fd.
When the consumer must generate an event it writes 1 to the provided fd. Although in practice the two fds point to the same underlying file description, because the producer and consumer are different processes the descriptors will be different. It's the caller's responsibility to ensure the file descriptors are properly exchanged between the two peers.
Definition at line 469 of file queue.c.
void svm_queue_set_producer_event_fd |
( |
svm_queue_t * |
q, |
|
|
int |
fd |
|
) |
| |
Set producer's event fd.
When the producer must generate an event it writes 1 to the provided fd. Once this is set, condvars are not used anymore for signaling.
Definition at line 463 of file queue.c.
int svm_queue_timedwait |
( |
svm_queue_t * |
q, |
|
|
double |
timeout |
|
) |
| |
Timed wait for queue event.
Must be called with mutex held.
- Parameters
-
q | svm queue |
timeout | time in seconds |
- Returns
- 0 on success, ETIMEDOUT on timeout or an error
Definition at line 183 of file queue.c.
static int svm_queue_timedwait_inline |
( |
svm_queue_t * |
q, |
|
|
double |
timeout |
|
) |
| |
|
inlinestatic |
Wait for queue event.
Must be called with mutex held.
Definition at line 151 of file queue.c.