Signed-off-by: Bill Fischofer <bill.fischo...@linaro.org>
---
 .../linux-generic/include/odp_queue_internal.h     | 44 ++++++++++++++++++++++
 platform/linux-generic/odp_queue.c                 |  7 ++++
 2 files changed, 51 insertions(+)

diff --git a/platform/linux-generic/include/odp_queue_internal.h 
b/platform/linux-generic/include/odp_queue_internal.h
index 6322948..32e3288 100644
--- a/platform/linux-generic/include/odp_queue_internal.h
+++ b/platform/linux-generic/include/odp_queue_internal.h
@@ -159,6 +159,50 @@ static inline int queue_prio(queue_entry_t *qe)
        return qe->s.param.sched.prio;
 }
 
+static inline odp_buffer_hdr_t *get_buf_tail(odp_buffer_hdr_t *buf_hdr)
+{
+       odp_buffer_hdr_t *buf_tail = buf_hdr->link ? buf_hdr->link : buf_hdr;
+
+       buf_hdr->next = buf_hdr->link;
+       buf_hdr->link = NULL;
+
+       while (buf_tail->next)
+               buf_tail = buf_tail->next;
+
+       return buf_tail;
+}
+
+static inline void queue_add(queue_entry_t *queue,
+                            odp_buffer_hdr_t *buf_hdr)
+{
+       buf_hdr->next = NULL;
+
+       if (queue->s.head)
+               queue->s.tail->next = buf_hdr;
+       else
+               queue->s.head = buf_hdr;
+
+       queue->s.tail = buf_hdr;
+}
+
+static inline void queue_add_list(queue_entry_t *queue,
+                                 odp_buffer_hdr_t *buf_head,
+                                 odp_buffer_hdr_t *buf_tail)
+{
+       if (queue->s.head)
+               queue->s.tail->next = buf_head;
+       else
+               queue->s.head = buf_head;
+
+       queue->s.tail = buf_tail;
+}
+
+static inline void queue_add_chain(queue_entry_t *queue,
+                                  odp_buffer_hdr_t *buf_hdr)
+{
+       queue_add_list(queue, buf_hdr, get_buf_tail(buf_hdr));
+}
+
 static inline void reorder_enq(queue_entry_t *queue,
                               uint64_t order,
                               queue_entry_t *origin_qe,
diff --git a/platform/linux-generic/odp_queue.c 
b/platform/linux-generic/odp_queue.c
index 2071870..bcc8190 100644
--- a/platform/linux-generic/odp_queue.c
+++ b/platform/linux-generic/odp_queue.c
@@ -69,6 +69,13 @@ static inline void get_qe_locks(queue_entry_t *qe1, 
queue_entry_t *qe2)
        }
 }
 
+static inline void free_qe_locks(queue_entry_t *qe1, queue_entry_t *qe2)
+{
+       UNLOCK(&qe1->s.lock);
+       if (qe1 != qe2)
+               UNLOCK(&qe2->s.lock);
+}
+
 queue_entry_t *get_qentry(uint32_t queue_id)
 {
        return &queue_tbl->queue[queue_id];
-- 
2.1.4

_______________________________________________
lng-odp mailing list
lng-odp@lists.linaro.org
https://lists.linaro.org/mailman/listinfo/lng-odp

Reply via email to