diff mbox

[PATCHv10,4/8] helper: flag to not link ring to linked list

Message ID 1445270883-8069-5-git-send-email-maxim.uvarov@linaro.org
State Superseded
Headers show

Commit Message

Maxim Uvarov Oct. 19, 2015, 4:07 p.m. UTC
Add flag ODPH_RING_NO_LIST to ring to not link it to linked list.

Signed-off-by: Maxim Uvarov <maxim.uvarov@linaro.org>
---
 helper/include/odp/helper/ring.h | 7 ++++---
 helper/ring.c                    | 3 ++-
 2 files changed, 6 insertions(+), 4 deletions(-)

Comments

Ola Liljedahl Oct. 19, 2015, 4:13 p.m. UTC | #1
On 19 October 2015 at 18:07, Maxim Uvarov <maxim.uvarov@linaro.org> wrote:

> Add flag ODPH_RING_NO_LIST to ring to not link it to linked list.
>
And the purpose of this is?
Either we want to be able to look up resources by name or not. Is there any
specific reason why this is a per-object (per-ring) configuration?


>
> Signed-off-by: Maxim Uvarov <maxim.uvarov@linaro.org>
> ---
>  helper/include/odp/helper/ring.h | 7 ++++---
>  helper/ring.c                    | 3 ++-
>  2 files changed, 6 insertions(+), 4 deletions(-)
>
> diff --git a/helper/include/odp/helper/ring.h
> b/helper/include/odp/helper/ring.h
> index 5e640a7..c3c2f6a 100644
> --- a/helper/include/odp/helper/ring.h
> +++ b/helper/include/odp/helper/ring.h
> @@ -156,10 +156,11 @@ typedef struct odph_ring {
>  } odph_ring_t;
>
>
> -#define ODPH_RING_F_SP_ENQ 0x0001 /* The default enqueue is
> "single-producer".*/
> -#define ODPH_RING_F_SC_DEQ 0x0002 /* The default dequeue is
> "single-consumer".*/
> -#define ODPH_RING_SHM_PROC 0x0004 /* If set - ring is visible from
> different
> +#define ODPH_RING_F_SP_ENQ (1 << 0) /* The default enqueue is
> "single-producer".*/
> +#define ODPH_RING_F_SC_DEQ (1 << 1) /* The default dequeue is
> "single-consumer".*/
> +#define ODPH_RING_SHM_PROC (1 << 2) /* If set - ring is visible from
> different
>                                     processes. Default is thread visible.
>    */
> +#define ODPH_RING_NO_LIST  (1 << 3) /* Do not link ring to linked list. */
>  #define ODPH_RING_QUOT_EXCEED (1 << 31)  /* Quota exceed for burst ops */
>  #define ODPH_RING_SZ_MASK  (unsigned)(0x0fffffff) /* Ring size mask */
>
> diff --git a/helper/ring.c b/helper/ring.c
> index 6bb2bda..fe01c5d 100644
> --- a/helper/ring.c
> +++ b/helper/ring.c
> @@ -199,7 +199,8 @@ odph_ring_create(const char *name, unsigned count,
> unsigned flags)
>                 r->prod.tail = 0;
>                 r->cons.tail = 0;
>
> -               TAILQ_INSERT_TAIL(&odp_ring_list, r, next);
> +               if (!(flags & ODPH_RING_NO_LIST))
> +                       TAILQ_INSERT_TAIL(&odp_ring_list, r, next);
>         } else {
>                 ODPH_ERR("Cannot reserve memory\n");
>         }
> --
> 1.9.1
>
> _______________________________________________
> lng-odp mailing list
> lng-odp@lists.linaro.org
> https://lists.linaro.org/mailman/listinfo/lng-odp
>
Maxim Uvarov Oct. 19, 2015, 4:20 p.m. UTC | #2
On 10/19/2015 19:13, Ola Liljedahl wrote:
> On 19 October 2015 at 18:07, Maxim Uvarov <maxim.uvarov@linaro.org 
> <mailto:maxim.uvarov@linaro.org>> wrote:
>
>     Add flag ODPH_RING_NO_LIST to ring to not link it to linked list.
>
> And the purpose of this is?
> Either we want to be able to look up resources by name or not. Is 
> there any specific reason why this is a per-object (per-ring) 
> configuration?

ring used odp_shm_reserve() with the same name. It's possible to find 
that name and free. If original core is used then I have to init odp helper
ring list pointer so that all new created odph_rings attached to it. I 
found it's ugly and prefer just to not add each link to that linked list.

Maxim.

>
>     Signed-off-by: Maxim Uvarov <maxim.uvarov@linaro.org
>     <mailto:maxim.uvarov@linaro.org>>
>     ---
>      helper/include/odp/helper/ring.h | 7 ++++---
>      helper/ring.c                    | 3 ++-
>      2 files changed, 6 insertions(+), 4 deletions(-)
>
>     diff --git a/helper/include/odp/helper/ring.h
>     b/helper/include/odp/helper/ring.h
>     index 5e640a7..c3c2f6a 100644
>     --- a/helper/include/odp/helper/ring.h
>     +++ b/helper/include/odp/helper/ring.h
>     @@ -156,10 +156,11 @@ typedef struct odph_ring {
>      } odph_ring_t;
>
>
>     -#define ODPH_RING_F_SP_ENQ 0x0001 /* The default enqueue is
>     "single-producer".*/
>     -#define ODPH_RING_F_SC_DEQ 0x0002 /* The default dequeue is
>     "single-consumer".*/
>     -#define ODPH_RING_SHM_PROC 0x0004 /* If set - ring is visible
>     from different
>     +#define ODPH_RING_F_SP_ENQ (1 << 0) /* The default enqueue is
>     "single-producer".*/
>     +#define ODPH_RING_F_SC_DEQ (1 << 1) /* The default dequeue is
>     "single-consumer".*/
>     +#define ODPH_RING_SHM_PROC (1 << 2) /* If set - ring is visible
>     from different
>                                         processes. Default is thread
>     visible.     */
>     +#define ODPH_RING_NO_LIST  (1 << 3) /* Do not link ring to linked
>     list. */
>      #define ODPH_RING_QUOT_EXCEED (1 << 31)  /* Quota exceed for
>     burst ops */
>      #define ODPH_RING_SZ_MASK  (unsigned)(0x0fffffff) /* Ring size
>     mask */
>
>     diff --git a/helper/ring.c b/helper/ring.c
>     index 6bb2bda..fe01c5d 100644
>     --- a/helper/ring.c
>     +++ b/helper/ring.c
>     @@ -199,7 +199,8 @@ odph_ring_create(const char *name, unsigned
>     count, unsigned flags)
>                     r->prod.tail = 0;
>                     r->cons.tail = 0;
>
>     -               TAILQ_INSERT_TAIL(&odp_ring_list, r, next);
>     +               if (!(flags & ODPH_RING_NO_LIST))
>     +  TAILQ_INSERT_TAIL(&odp_ring_list, r, next);
>             } else {
>                     ODPH_ERR("Cannot reserve memory\n");
>             }
>     --
>     1.9.1
>
>     _______________________________________________
>     lng-odp mailing list
>     lng-odp@lists.linaro.org <mailto:lng-odp@lists.linaro.org>
>     https://lists.linaro.org/mailman/listinfo/lng-odp
>
>
diff mbox

Patch

diff --git a/helper/include/odp/helper/ring.h b/helper/include/odp/helper/ring.h
index 5e640a7..c3c2f6a 100644
--- a/helper/include/odp/helper/ring.h
+++ b/helper/include/odp/helper/ring.h
@@ -156,10 +156,11 @@  typedef struct odph_ring {
 } odph_ring_t;
 
 
-#define ODPH_RING_F_SP_ENQ 0x0001 /* The default enqueue is "single-producer".*/
-#define ODPH_RING_F_SC_DEQ 0x0002 /* The default dequeue is "single-consumer".*/
-#define ODPH_RING_SHM_PROC 0x0004 /* If set - ring is visible from different
+#define ODPH_RING_F_SP_ENQ (1 << 0) /* The default enqueue is "single-producer".*/
+#define ODPH_RING_F_SC_DEQ (1 << 1) /* The default dequeue is "single-consumer".*/
+#define ODPH_RING_SHM_PROC (1 << 2) /* If set - ring is visible from different
 				    processes. Default is thread visible.     */
+#define ODPH_RING_NO_LIST  (1 << 3) /* Do not link ring to linked list. */
 #define ODPH_RING_QUOT_EXCEED (1 << 31)  /* Quota exceed for burst ops */
 #define ODPH_RING_SZ_MASK  (unsigned)(0x0fffffff) /* Ring size mask */
 
diff --git a/helper/ring.c b/helper/ring.c
index 6bb2bda..fe01c5d 100644
--- a/helper/ring.c
+++ b/helper/ring.c
@@ -199,7 +199,8 @@  odph_ring_create(const char *name, unsigned count, unsigned flags)
 		r->prod.tail = 0;
 		r->cons.tail = 0;
 
-		TAILQ_INSERT_TAIL(&odp_ring_list, r, next);
+		if (!(flags & ODPH_RING_NO_LIST))
+			TAILQ_INSERT_TAIL(&odp_ring_list, r, next);
 	} else {
 		ODPH_ERR("Cannot reserve memory\n");
 	}