On 2 April 2015 at 03:29, <alexandru.badici...@linaro.org
<mailto:alexandru.badici...@linaro.org>> wrote:
From: Alexandru Badicioiu <alexandru.badici...@linaro.org
<mailto:alexandru.badici...@linaro.org>>
Signed-off-by: Alexandru Badicioiu <alexandru.badici...@linaro.org
<mailto:alexandru.badici...@linaro.org>>
---
example/ipsec/odp_ipsec.c | 64
+++++++++++++++++++++++---------------------
1 files changed, 33 insertions(+), 31 deletions(-)
diff --git a/example/ipsec/odp_ipsec.c b/example/ipsec/odp_ipsec.c
index 0cbf5b4..9fb048a 100644
--- a/example/ipsec/odp_ipsec.c
+++ b/example/ipsec/odp_ipsec.c
@@ -211,14 +211,14 @@ void free_pkt_ctx(pkt_ctx_t *ctx)
/**
* Example supports either polling queues or using odp_schedule
- *
- * Specify "CFLAGS=-DIPSEC_POLL_QUEUES" during configure to
enable polling
- * versus calling odp_schedule
- *
- * @todo Make this command line driven versus compile time
- * (see https://bugs.linaro.org/show_bug.cgi?id=625)
*/
-#ifdef IPSEC_POLL_QUEUES
+typedef odp_queue_t (*queue_create_func_t)
+ (const char *, odp_queue_type_t,
odp_queue_param_t *);
+typedef odp_event_t (*schedule_func_t)
+ (odp_queue_t *, uint64_t);
+
+static queue_create_func_t queue_create;
+static schedule_func_t schedule;
#define MAX_POLL_QUEUES 256
@@ -245,7 +245,8 @@ odp_queue_t polled_odp_queue_create(const char
*name,
if ((ODP_QUEUE_TYPE_SCHED == type) ||
(ODP_QUEUE_TYPE_PKTIN == type)) {
poll_queues[num_polled_queues++] = my_queue;
- printf("%s: adding %d\n", __func__, my_queue);
+ printf("%s: adding %"PRIu64"\n", __func__,
+ odp_queue_to_u64(my_queue));
}
return my_queue;
@@ -255,7 +256,7 @@ odp_queue_t polled_odp_queue_create(const char
*name,
* odp_schedule replacement to poll queues versus using ODP scheduler
*/
static
-odp_buffer_t polled_odp_schedule(odp_queue_t *from, uint64_t wait)
+odp_event_t polled_odp_schedule(odp_queue_t *from, uint64_t wait)
{
uint64_t start_cycle;
uint64_t cycle;
@@ -268,11 +269,11 @@ odp_buffer_t polled_odp_schedule(odp_queue_t
*from, uint64_t wait)
for (idx = 0; idx < num_polled_queues; idx++) {
odp_queue_t queue = poll_queues[idx];
- odp_buffer_t buf;
+ odp_event_t buf;
buf = odp_queue_deq(queue);
- if (ODP_BUFFER_INVALID != buf) {
+ if (ODP_EVENT_INVALID != buf) {
*from = queue;
return buf;
}
@@ -285,11 +286,11 @@ odp_buffer_t polled_odp_schedule(odp_queue_t
*from, uint64_t wait)
break;
if (0 == start_cycle) {
- start_cycle = odp_time_get_cycles();
+ start_cycle = odp_time_cycles();
continue;
}
- cycle = odp_time_get_cycles();
+ cycle = odp_time_cycles();
diff = odp_time_diff_cycles(start_cycle, cycle);
if (wait < diff)
@@ -297,20 +298,9 @@ odp_buffer_t polled_odp_schedule(odp_queue_t
*from, uint64_t wait)
}
*from = ODP_QUEUE_INVALID;
- return ODP_BUFFER_INVALID;
+ return ODP_EVENT_INVALID;
}
-
-#define QUEUE_CREATE(n, t, p) polled_odp_queue_create(n, t, p)
-#define SCHEDULE(q, w) polled_odp_schedule(q, w)
-
-#else
-
-#define QUEUE_CREATE(n, t, p) odp_queue_create(n, t, p)
-#define SCHEDULE(q, w) odp_schedule(q, w)
-
-#endif
-
/**
* IPsec pre argument processing intialization
*/
@@ -330,7 +320,7 @@ void ipsec_init_pre(void)
qparam.sched.sync = ODP_SCHED_SYNC_ATOMIC;
qparam.sched.group = ODP_SCHED_GROUP_DEFAULT;
- completionq = QUEUE_CREATE("completion",
+ completionq = queue_create("completion",
ODP_QUEUE_TYPE_SCHED,
&qparam);
if (ODP_QUEUE_INVALID == completionq) {
@@ -342,7 +332,7 @@ void ipsec_init_pre(void)
qparam.sched.sync = ODP_SCHED_SYNC_ATOMIC;
qparam.sched.group = ODP_SCHED_GROUP_DEFAULT;
- seqnumq = QUEUE_CREATE("seqnum",
+ seqnumq = queue_create("seqnum",
ODP_QUEUE_TYPE_SCHED,
&qparam);
if (ODP_QUEUE_INVALID == seqnumq) {
@@ -448,7 +438,7 @@ void initialize_loop(char *intf)
snprintf(queue_name, sizeof(queue_name),
"%i-loop_inq_def", idx);
queue_name[ODP_QUEUE_NAME_LEN - 1] = '\0';
- inq_def = QUEUE_CREATE(queue_name, ODP_QUEUE_TYPE_SCHED,
&qparam);
+ inq_def = queue_create(queue_name, ODP_QUEUE_TYPE_SCHED,
&qparam);
if (ODP_QUEUE_INVALID == inq_def) {
EXAMPLE_ERR("Error: input queue creation failed
for %s\n",
intf);
@@ -461,7 +451,7 @@ void initialize_loop(char *intf)
snprintf(queue_name, sizeof(queue_name),
"%i-loop_outq_def", idx);
queue_name[ODP_QUEUE_NAME_LEN - 1] = '\0';
- outq_def = QUEUE_CREATE(queue_name, ODP_QUEUE_TYPE_POLL,
&qparam);
+ outq_def = queue_create(queue_name, ODP_QUEUE_TYPE_POLL,
&qparam);
if (ODP_QUEUE_INVALID == outq_def) {
EXAMPLE_ERR("Error: output queue creation failed
for %s\n",
intf);
@@ -525,7 +515,7 @@ void initialize_intf(char *intf)
odp_pktio_to_u64(pktio));
inq_name[ODP_QUEUE_NAME_LEN - 1] = '\0';
- inq_def = QUEUE_CREATE(inq_name, ODP_QUEUE_TYPE_PKTIN,
&qparam);
+ inq_def = queue_create(inq_name, ODP_QUEUE_TYPE_PKTIN,
&qparam);
if (ODP_QUEUE_INVALID == inq_def) {
EXAMPLE_ERR("Error: pktio queue creation failed
for %s\n",
intf);
@@ -1007,7 +997,7 @@ void *pktio_thread(void *arg EXAMPLE_UNUSED)
odp_crypto_op_result_t result;
/* Use schedule to get event from any input queue */
- ev = SCHEDULE(&dispatchq, ODP_SCHED_WAIT);
+ ev = schedule(&dispatchq, ODP_SCHED_WAIT);
/* Determine new work versus completion or
sequence number */
if (ODP_EVENT_PACKET == odp_event_type(ev)) {
@@ -1153,6 +1143,16 @@ main(int argc, char *argv[])
char cpumaskstr[ODP_CPUMASK_STR_SIZE];
odp_pool_param_t params;
+ /* create by default scheduled queues */
+ queue_create = odp_queue_create;
+ schedule = odp_schedule;
+
+ /* check for using poll queues */
+ if (getenv("ODP_IPSEC_USE_POLL_QUEUES")) {
+ queue_create = polled_odp_queue_create;
+ schedule = polled_odp_schedule;
+ }
+
/* Init ODP before calling anything else */
if (odp_init_global(NULL, NULL)) {
EXAMPLE_ERR("Error: ODP global init failed.\n");
@@ -1496,6 +1496,8 @@ static void usage(char *progname)
program
" ODP_PKTIO_DISABLE_SOCKET_MMSG\n"
" ODP_PKTIO_DISABLE_SOCKET_BASIC\n"
" can be used to advanced pkt I/O selection for
linux-generic\n"
+ " ODP_IPSEC_USE_POLL_QUEUES\n"
+ " to enable use of poll queues instead of scheduled
(default)\n"
"\n", NO_PATH(progname), NO_PATH(progname)
);
}
--
1.7.3.4
_______________________________________________
lng-odp mailing list
lng-odp@lists.linaro.org <mailto:lng-odp@lists.linaro.org>
https://lists.linaro.org/mailman/listinfo/lng-odp
--
Mike Holmes
Technical Manager - Linaro Networking Group
Linaro.org <http://www.linaro.org/>***│ *Open source software for ARM SoCs
_______________________________________________
lng-odp mailing list
lng-odp@lists.linaro.org
https://lists.linaro.org/mailman/listinfo/lng-odp