Based on today's ARCH call, this seems to be a good approach, with
some slight wording clarification (noted below)

On Mon, Apr 3, 2017 at 5:11 AM, Petri Savolainen
<[email protected]> wrote:
> Added capability information about maximum number of queues
> and queue sizes. Both are defined per queue type, since
> plain and scheduled queues may have different implementations
> (e.g. one uses HW while the other is SW).
>
> Added queue size parameter, which specifies how large
> storage size application requires in minimum.
>
> Signed-off-by: Petri Savolainen <[email protected]>
> ---
>  include/odp/api/spec/queue.h | 35 ++++++++++++++++++++++++++++++++++-
>  1 file changed, 34 insertions(+), 1 deletion(-)
>
> diff --git a/include/odp/api/spec/queue.h b/include/odp/api/spec/queue.h
> index 7972fea..9c83322 100644
> --- a/include/odp/api/spec/queue.h
> +++ b/include/odp/api/spec/queue.h
> @@ -100,7 +100,9 @@ typedef enum odp_queue_op_mode_t {
>   * Queue capabilities
>   */
>  typedef struct odp_queue_capability_t {
> -       /** Maximum number of event queues */
> +       /** Maximum number of event queues of any type. Use this in addition 
> to
> +         * queue type specific 'max_num', if both queue types are used
> +         * simultaneously. */
>         uint32_t max_queues;

These fields tell the application how many queues it is guaranteed to
be able to create, hence this is really a minimum number, not a
maximum number. An application may in fact be able to create more, but
it's guaranteed to be able to create at least this number. So I
suggest the following rename/rewording to clarify this point.

             /** Minimum guaranteed number of event queues of any
type. Use this in addition to
              * queue type specific 'min_num', if both queue types are
used simultaneously */
            uint32_t min_queues;

>
>         /** Maximum number of ordered locks per queue */
> @@ -112,6 +114,28 @@ typedef struct odp_queue_capability_t {
>         /** Number of scheduling priorities */
>         unsigned sched_prios;
>
> +       /** Plain queue capabilities */
> +       struct {
> +               /** Maximum number of a plain queues. */
> +               uint32_t max_num;

                    /** Minimum guaranteed number of plain queues that
may be created in this ODP instance */
                    uint32_t min_num;

> +
> +               /** Maximum number of events a plain queue can store
> +                 * simultaneously. The value of zero means unlimited. */
> +               uint32_t max_size;
> +
> +       } plain;
> +
> +       /** Scheduled queue capabilities */
> +       struct {
> +               /** Maximum number of a scheduled queues. */
> +               uint32_t max_num;

                    /** Minimum guaranteed number of scheduled queues
that may be created in this ODP instance */
                    uint32_t min_num;

> +
> +               /** Maximum number of events a scheduled queue can store
> +                 * simultaneously. The value of zero means unlimited. */
> +               uint32_t max_size;
> +
> +       } sched;
> +
>  } odp_queue_capability_t;
>
>  /**
> @@ -165,6 +189,15 @@ typedef struct odp_queue_param_t {
>           * The implementation may use this value as a hint for the number of
>           * context data bytes to prefetch. Default value is zero (no hint). 
> */
>         uint32_t context_len;
> +
> +       /** Queue size
> +         *
> +         * The queue must be able to store at minimum this many events
> +         * simultaneously. The value must not exceed 'max_size' queue
> +         * capability. The value of zero means implementation specific
> +         * default size. */
> +       uint32_t size;
> +
>  } odp_queue_param_t;
>
>  /**
> --
> 2.8.1
>

Reply via email to