On Thursday 25 February 2016 15:01:11 EXT Bill Fischofer wrote:
> On Thu, Feb 25, 2016 at 12:39 PM, José Pekkarinen
<[email protected]
> > wrote:
> >
> > On Thursday 25 February 2016 11:54:31 EXT Bill Fischofer wrote:
> > > Anything with an initial underscore (like _odp_cast_scalar()) is an
> > >
> > > implementation-internal API (in this case, linux-generic) and is most
> > >
> > > definitely neither portable nor subject to any release-to-release
> > >
> > > compatibility guarantees, so I'd highly discourage trying to use
them.
> >
> > It's used under the scope of the platform folder of odp, not outside of
> > that, and just limited to this usecase, where some vendor decides
that
> > want
> > to use unions to define types that linux-generic does with other kind
of
> > data structure.
> >
> > > If I understand your use case correctly, you want to create a queue
but
> > >
> > > (perhaps temporarily) put it into a state where other queue
operations
> > > on
> > >
> > > it are rejected? We've previously talked about defining an
> > >
> > > odp_queue_quiesce() API that would prohibit further enqueues to a
queue
> > >
> > > while still permitting existing elements to be dequeued from it. This
to
> > >
> > > support graceful termination where you want to drain a queue
before
> > >
> > > destroying it. A corresponding odp_queue_resume() call would
return a
> > >
> > > quiesced queue to normal operation. Would such a capability suffice
for
> > >
> > > your use case or are you also looking to reject dequeue and/or
destroy
> > >
> > > operations on the queue while it is "invalid"? Also, wouldn't you need
a
> > >
> > > odp_queue_revalidate() API to bookend odp_queue_invalidate()?
> >
> > The situation is the other way around. When we create an interface,
the
> > structure defines the queues, and it will initialize all it's data
> > structure one after another, until it gets to the end of the
> > initialization
> > or some initialization error happens. If the queue is created correctly,
> > but some problem in the initialization happens later on, the queue is
> > cleaned up setting it to invalid until we can memset the structure. This
> > is
> > valid also when you happen to have corruption in the queue, or
failures
> > sending some packets through the queue(burst failures, etc).
>
> If your structure contains an odp_queue_t handle in it, then that variable
> can always be set to ODP_QUEUE_INVALID, which is the designated
portable
> handle value to indicate an invalid queue.
And this is what we want, to have more flexibility to set this to
invalid, as the only way to do a pure assignation to ODP_QUEUE_INVALID for
unions is setting ODP_QUEUE_INVALID as stated in the following line.
#define ODP_QUEUE_INVALID _odp_cast_scalar(odp_queue_t,
~(unsigned)0)
> If you have created the queue
> via odp_queue_create() and received a handle for it then you at some
point
> need to do a corresponding odp_queue_destroy() queue to free up any
ODP
> resources associated with that queue. Simply throwing away the handle
> would result in resource leakage.
Sure, odp_queue_destroy should be called, but it takes more
processing time than just setting the queue to invalid, and it can be
performed when no demanding network load is coming.
Best regards.
José.
_______________________________________________
lng-odp mailing list
[email protected]
https://lists.linaro.org/mailman/listinfo/lng-odp