@@ -29,9 +29,9 @@
#define NUM_INTERNAL_QUEUES 64
#include <odp/api/plat/ticketlock_inlines.h>
-#define LOCK(a) _odp_ticketlock_lock(a)
-#define UNLOCK(a) _odp_ticketlock_unlock(a)
-#define LOCK_INIT(a) odp_ticketlock_init(a)
+#define LOCK(queue_ptr) _odp_ticketlock_lock(&((queue_ptr)->s.lock))
+#define UNLOCK(queue_ptr) _odp_ticketlock_unlock(&((queue_ptr)->s.lock))
+#define LOCK_INIT(queue_ptr) odp_ticketlock_init(&((queue_ptr)->s.lock))
#include <string.h>
#include <inttypes.h>
@@ -88,7 +88,7 @@ static int queue_init_global(void)
for (i = 0; i < ODP_CONFIG_QUEUES; i++) {
/* init locks */
queue_entry_t *queue = get_qentry(i);
- LOCK_INIT(&queue->s.lock);
+ LOCK_INIT(queue);
queue->s.index = i;
queue->s.handle = queue_from_index(i);
}
@@ -123,12 +123,12 @@ static int queue_term_global(void)
for (i = 0; i < ODP_CONFIG_QUEUES; i++) {
queue = &queue_tbl->queue[i];
- LOCK(&queue->s.lock);
+ LOCK(queue);
if (queue->s.status != QUEUE_STATUS_FREE) {
ODP_ERR("Not destroyed queue: %s\n", queue->s.name);
rc = -1;
}
- UNLOCK(&queue->s.lock);
+ UNLOCK(queue);
}
ret = odp_shm_free(odp_shm_lookup("odp_queues"));
@@ -210,10 +210,10 @@ static odp_queue_t queue_create(const char *name,
if (queue->s.status != QUEUE_STATUS_FREE)
continue;
- LOCK(&queue->s.lock);
+ LOCK(queue);
if (queue->s.status == QUEUE_STATUS_FREE) {
if (queue_init(queue, name, param)) {
- UNLOCK(&queue->s.lock);
+ UNLOCK(queue);
return handle;
}
@@ -225,10 +225,10 @@ static odp_queue_t queue_create(const char *name,
queue->s.status = QUEUE_STATUS_READY;
handle = queue->s.handle;
- UNLOCK(&queue->s.lock);
+ UNLOCK(queue);
break;
}
- UNLOCK(&queue->s.lock);
+ UNLOCK(queue);
}
if (handle != ODP_QUEUE_INVALID && type == ODP_QUEUE_TYPE_SCHED) {
@@ -247,13 +247,13 @@ void sched_cb_queue_destroy_finalize(uint32_t queue_index)
{
queue_entry_t *queue = get_qentry(queue_index);
- LOCK(&queue->s.lock);
+ LOCK(queue);
if (queue->s.status == QUEUE_STATUS_DESTROYED) {
queue->s.status = QUEUE_STATUS_FREE;
sched_fn->destroy_queue(queue_index);
}
- UNLOCK(&queue->s.lock);
+ UNLOCK(queue);
}
static int queue_destroy(odp_queue_t handle)
@@ -264,19 +264,19 @@ static int queue_destroy(odp_queue_t handle)
if (handle == ODP_QUEUE_INVALID)
return -1;
- LOCK(&queue->s.lock);
+ LOCK(queue);
if (queue->s.status == QUEUE_STATUS_FREE) {
- UNLOCK(&queue->s.lock);
+ UNLOCK(queue);
ODP_ERR("queue \"%s\" already free\n", queue->s.name);
return -1;
}
if (queue->s.status == QUEUE_STATUS_DESTROYED) {
- UNLOCK(&queue->s.lock);
+ UNLOCK(queue);
ODP_ERR("queue \"%s\" already destroyed\n", queue->s.name);
return -1;
}
if (ring_st_is_empty(&queue->s.ring_st) == 0) {
- UNLOCK(&queue->s.lock);
+ UNLOCK(queue);
ODP_ERR("queue \"%s\" not empty\n", queue->s.name);
return -1;
}
@@ -296,7 +296,7 @@ static int queue_destroy(odp_queue_t handle)
default:
ODP_ABORT("Unexpected queue status\n");
}
- UNLOCK(&queue->s.lock);
+ UNLOCK(queue);
return 0;
}
@@ -326,13 +326,13 @@ static odp_queue_t queue_lookup(const char *name)
queue->s.status == QUEUE_STATUS_DESTROYED)
continue;
- LOCK(&queue->s.lock);
+ LOCK(queue);
if (strcmp(name, queue->s.name) == 0) {
/* found it */
- UNLOCK(&queue->s.lock);
+ UNLOCK(queue);
return queue->s.handle;
}
- UNLOCK(&queue->s.lock);
+ UNLOCK(queue);
}
return ODP_QUEUE_INVALID;
@@ -376,10 +376,10 @@ static inline int enq_multi(queue_t q_int, odp_buffer_hdr_t *buf_hdr[],
buffer_index_from_buf(buf_idx, buf_hdr, num);
- LOCK(&queue->s.lock);
+ LOCK(queue);
if (odp_unlikely(queue->s.status < QUEUE_STATUS_READY)) {
- UNLOCK(&queue->s.lock);
+ UNLOCK(queue);
ODP_ERR("Bad queue status\n");
return -1;
}
@@ -387,7 +387,7 @@ static inline int enq_multi(queue_t q_int, odp_buffer_hdr_t *buf_hdr[],
num_enq = ring_st_enq_multi(ring_st, buf_idx, num);
if (odp_unlikely(num_enq == 0)) {
- UNLOCK(&queue->s.lock);
+ UNLOCK(queue);
return 0;
}
@@ -396,7 +396,7 @@ static inline int enq_multi(queue_t q_int, odp_buffer_hdr_t *buf_hdr[],
sched = 1;
}
- UNLOCK(&queue->s.lock);
+ UNLOCK(queue);
/* Add queue to scheduling */
if (sched && sched_fn->sched_queue(queue->s.index))
@@ -455,12 +455,12 @@ static inline int deq_multi(queue_entry_t *queue, odp_buffer_hdr_t *buf_hdr[],
ring_st = &queue->s.ring_st;
- LOCK(&queue->s.lock);
+ LOCK(queue);
if (odp_unlikely(queue->s.status < QUEUE_STATUS_READY)) {
/* Bad queue, or queue has been destroyed.
* Scheduler finalizes queue destroy after this. */
- UNLOCK(&queue->s.lock);
+ UNLOCK(queue);
return -1;
}
@@ -475,7 +475,7 @@ static inline int deq_multi(queue_entry_t *queue, odp_buffer_hdr_t *buf_hdr[],
sched_fn->unsched_queue(queue->s.index);
}
- UNLOCK(&queue->s.lock);
+ UNLOCK(queue);
return 0;
}
@@ -483,7 +483,7 @@ static inline int deq_multi(queue_entry_t *queue, odp_buffer_hdr_t *buf_hdr[],
if (status_sync && queue->s.type == ODP_QUEUE_TYPE_SCHED)
sched_fn->save_context(queue->s.index);
- UNLOCK(&queue->s.lock);
+ UNLOCK(queue);
buffer_index_to_buf(buf_hdr, buf_idx, num_deq);
@@ -596,12 +596,12 @@ static int queue_info(odp_queue_t handle, odp_queue_info_t *info)
queue = get_qentry(queue_id);
- LOCK(&queue->s.lock);
+ LOCK(queue);
status = queue->s.status;
if (odp_unlikely(status == QUEUE_STATUS_FREE ||
status == QUEUE_STATUS_DESTROYED)) {
- UNLOCK(&queue->s.lock);
+ UNLOCK(queue);
ODP_ERR("Invalid queue status:%d\n", status);
return -1;
}
@@ -609,7 +609,7 @@ static int queue_info(odp_queue_t handle, odp_queue_info_t *info)
info->name = queue->s.name;
info->param = queue->s.param;
- UNLOCK(&queue->s.lock);
+ UNLOCK(queue);
return 0;
}
@@ -626,11 +626,11 @@ int sched_cb_queue_empty(uint32_t queue_index)
queue_entry_t *queue = get_qentry(queue_index);
int ret = 0;
- LOCK(&queue->s.lock);
+ LOCK(queue);
if (odp_unlikely(queue->s.status < QUEUE_STATUS_READY)) {
/* Bad queue, or queue has been destroyed. */
- UNLOCK(&queue->s.lock);
+ UNLOCK(queue);
return -1;
}
@@ -642,7 +642,7 @@ int sched_cb_queue_empty(uint32_t queue_index)
ret = 1;
}
- UNLOCK(&queue->s.lock);
+ UNLOCK(queue);
return ret;
}