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 >
