On Wed, Mar 04, 2015 at 12:26:15PM +0300, Maxim Uvarov wrote: > odp_packet examples has polling queues commented out with if 1. > Input queue (ODP_QUEUE_TYPE_PKTIN) is not attached to scheduler > but it make sense in example show that packets can be accessed > with polling queues also. > https://bugs.linaro.org/show_bug.cgi?id=301 > > Signed-off-by: Maxim Uvarov <maxim.uva...@linaro.org> > --- > v2: fix bunch of Stuarts comments. > > example/packet/odp_pktio.c | 99 > +++++++++++++++++++++++++++++++++------------- > 1 file changed, 72 insertions(+), 27 deletions(-) > > diff --git a/example/packet/odp_pktio.c b/example/packet/odp_pktio.c > index bb07726..43f94a3 100644 > --- a/example/packet/odp_pktio.c > +++ b/example/packet/odp_pktio.c > @@ -52,6 +52,11 @@ > */ > #define APPL_MODE_PKT_QUEUE 1 > > +/** @def APPL_MODE_PKT_SCHED > + * @brief The application will handle packets with sheduler > + */ > +#define APPL_MODE_PKT_SCHED 2 > + > /** @def PRINT_APPL_MODE(x) > * @brief Macro to print the current status of how the application handles > * packets. > @@ -123,18 +128,30 @@ static odp_pktio_t create_pktio(const char *dev, > odp_pool_t pool, int mode) > if (pktio == ODP_PKTIO_INVALID) > EXAMPLE_ABORT("Error: pktio create failed for %s\n", dev); > > - /* no further setup needed for burst mode */ > - if (mode == APPL_MODE_PKT_BURST) > - return pktio; > - > - qparam.sched.prio = ODP_SCHED_PRIO_DEFAULT; > - qparam.sched.sync = ODP_SCHED_SYNC_ATOMIC; > - qparam.sched.group = ODP_SCHED_GROUP_DEFAULT; > snprintf(inq_name, sizeof(inq_name), "%" PRIu64 "-pktio_inq_def", > odp_pktio_to_u64(pktio)); > inq_name[ODP_QUEUE_NAME_LEN - 1] = '\0'; > > - inq_def = odp_queue_create(inq_name, ODP_QUEUE_TYPE_PKTIN, &qparam); > + switch (mode) { > + case APPL_MODE_PKT_BURST: > + /* no further setup needed for burst mode */ > + return pktio; > + case APPL_MODE_PKT_QUEUE: > + inq_def = odp_queue_create(inq_name, > + ODP_QUEUE_TYPE_PKTIN, NULL); > + break; > + case APPL_MODE_PKT_SCHED: > + qparam.sched.prio = ODP_SCHED_PRIO_DEFAULT; > + qparam.sched.sync = ODP_SCHED_SYNC_ATOMIC; > + qparam.sched.group = ODP_SCHED_GROUP_DEFAULT; > + > + inq_def = odp_queue_create(inq_name, > + ODP_QUEUE_TYPE_PKTIN, &qparam); > + break; > + default: > + EXAMPLE_ABORT("invalid mode %d\n", mode); > + } > + > if (inq_def == ODP_QUEUE_INVALID) > EXAMPLE_ABORT("Error: pktio inq create failed for %s\n", dev); > > @@ -162,11 +179,13 @@ static void *pktio_queue_thread(void *arg) > odp_pktio_t pktio; > thread_args_t *thr_args; > odp_queue_t outq_def; > + odp_queue_t inq; > odp_packet_t pkt; > odp_event_t ev; > unsigned long pkt_cnt = 0; > unsigned long err_cnt = 0; > > +
Stray blank line > thr = odp_thread_id(); > thr_args = arg; > > @@ -183,21 +202,29 @@ static void *pktio_queue_thread(void *arg) > thr, odp_pktio_to_u64(pktio), odp_pktio_to_u64(pktio), > odp_queue_to_u64(odp_pktio_inq_getdef(pktio))); > > + /* Always dequeue from the same input queue */ This comment is only valid for the APPL_MODE_PKT_QUEUE case, and you don't need the inq for the _SCHED case. I think it would be cleaner to do; if (thr_args->mode == APPL_MODE_PKT_QUEUE) inq = odp_pktio_inq_getdef(pktio); else inq = ODP_QUEUE_INVALID; Then in the loop if (inq != ODP_QUEUE_INVALID) odp_queue_deq() else odp_schedule() > + inq = odp_pktio_inq_getdef(pktio); > + > /* Loop packets */ > for (;;) { > odp_pktio_t pktio_tmp; > > -#if 1 > - /* Use schedule to get buf from any input queue */ > - ev = odp_schedule(NULL, ODP_SCHED_WAIT); > -#else > - /* Always dequeue from the same input queue */ > - buf = odp_queue_deq(inq_def); > - if (!odp_buffer_is_valid(buf)) > - continue; > -#endif > - > - pkt = odp_packet_from_event(ev); > + switch (thr_args->mode) { > + case APPL_MODE_PKT_QUEUE: > + ev = odp_queue_deq(inq); > + pkt = odp_packet_from_event(ev); > + if (!odp_packet_is_valid(pkt)) > + continue; > + break; > + case APPL_MODE_PKT_SCHED: > + /* Use schedule to get buf from any input queue */ > + ev = odp_schedule(NULL, ODP_SCHED_WAIT); > + pkt = odp_packet_from_event(ev); > + break; > + default: > + EXAMPLE_ERR("unexpected mode %d\n", thr_args->mode); > + return NULL; > + } > > /* Drop packets with errors */ > if (odp_unlikely(drop_err_pkts(&pkt, 1) == 0)) { -- Stuart. _______________________________________________ lng-odp mailing list lng-odp@lists.linaro.org http://lists.linaro.org/mailman/listinfo/lng-odp