This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "".
The branch, master has been updated
via 5ccc27cf77c936460b265c973a531a04b7a74014 (commit)
from 63517b31c273570ead349cf92834a71d13d8470e (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit 5ccc27cf77c936460b265c973a531a04b7a74014
Author: Matias Elo <matias.elo(a)nokia.com>
Date: Thu Feb 14 17:19:12 2019 +0200
linux-gen: shm: replace ftruncate() with fallocate()
fallocate() reserves required memory at call time, so out of memory
failures are easier to detect.
Signed-off-by: Matias Elo <matias.elo(a)nokia.com>
Reviewed-by: Petri Savolainen <petri.savolainen(a)nokia.com>
diff --git a/platform/linux-generic/odp_ishm.c b/platform/linux-generic/odp_ishm.c
index 875f9f9d..94a14549 100644
--- a/platform/linux-generic/odp_ishm.c
+++ b/platform/linux-generic/odp_ishm.c
@@ -256,6 +256,7 @@ static void procsync(void);
static int hp_create_file(uint64_t len, const char *filename)
{
int fd;
+ int ret;
void *addr;
if (len <= 0) {
@@ -273,10 +274,19 @@ static int hp_create_file(uint64_t len, const char *filename)
/* remove file from file system */
unlink(filename);
- if (ftruncate(fd, len) == -1) {
- ODP_ERR("Could not truncate file: %s\n", strerror(errno));
- close(fd);
- return -1;
+ ret = fallocate(fd, 0, 0, len);
+ if (ret == -1) {
+ if (errno == ENOTSUP) {
+ ODP_DBG("fallocate() not supported\n");
+ ret = ftruncate(fd, len);
+ }
+
+ if (ret == -1) {
+ ODP_ERR("memory allocation failed: fd=%d, err=%s.\n",
+ fd, strerror(errno));
+ close(fd);
+ return -1;
+ }
}
/* commit huge page */
@@ -637,6 +647,7 @@ static int create_file(int block_index, huge_flag_t huge, uint64_t len,
* /mnt/huge */
int oflag = O_RDWR | O_CREAT | O_TRUNC; /* flags for open */
char dir[ISHM_FILENAME_MAXLEN];
+ int ret;
/* No ishm_block_t for the master single VA memory file */
if (single_va) {
@@ -676,12 +687,20 @@ static int create_file(int block_index, huge_flag_t huge, uint64_t len,
return -1;
}
- if (ftruncate(fd, len) == -1) {
- ODP_ERR("ftruncate failed: fd=%d, err=%s.\n",
- fd, strerror(errno));
- close(fd);
- unlink(filename);
- return -1;
+ ret = fallocate(fd, 0, 0, len);
+ if (ret == -1) {
+ if (errno == ENOTSUP) {
+ ODP_DBG("fallocate() not supported\n");
+ ret = ftruncate(fd, len);
+ }
+
+ if (ret == -1) {
+ ODP_ERR("memory allocation failed: fd=%d, err=%s.\n",
+ fd, strerror(errno));
+ close(fd);
+ unlink(filename);
+ return -1;
+ }
}
/* No export file is created since this is only for internal use.*/
-----------------------------------------------------------------------
Summary of changes:
platform/linux-generic/odp_ishm.c | 39 +++++++++++++++++++++++++++++----------
1 file changed, 29 insertions(+), 10 deletions(-)
hooks/post-receive
--
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "".
The branch, master has been updated
via 63517b31c273570ead349cf92834a71d13d8470e (commit)
from af88591a590faeadeff8a20d6e996c16fc272171 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit 63517b31c273570ead349cf92834a71d13d8470e
Author: Matias Elo <matias.elo(a)nokia.com>
Date: Tue Feb 12 13:53:42 2019 +0200
validation: timer: calculate number of timers per thread using capability
Previously, the test could fail if 'num_workers * NTIMERS' was larger than
the maximum number of timers. Also, added a check for timeout pool
capability.
Signed-off-by: Matias Elo <matias.elo(a)nokia.com>
Reviewed-by: Petri Savolainen <petri.savolainen(a)nokia.com>
diff --git a/test/validation/api/timer/timer.c b/test/validation/api/timer/timer.c
index aaffd92d..51caed7a 100644
--- a/test/validation/api/timer/timer.c
+++ b/test/validation/api/timer/timer.c
@@ -27,6 +27,9 @@
/* Number of timers per thread */
#define NTIMERS 2000
+/* Number of extra timers per thread */
+#define EXTRA_TIMERS 256
+
#define NAME "timer_pool"
#define RES (10 * ODP_TIME_MSEC_IN_NS / 3)
#define MIN_TMO (10 * ODP_TIME_MSEC_IN_NS / 3)
@@ -54,6 +57,8 @@ typedef struct {
/* Sum of all allocated timers from all threads. Thread-local
* caches may make this number lower than the capacity of the pool */
odp_atomic_u32_t timers_allocated;
+ /* Number of timers allocated per thread */
+ uint32_t timers_per_thread;
} global_shared_mem_t;
static global_shared_mem_t *global_mem;
@@ -642,27 +647,28 @@ static int worker_entrypoint(void *arg TEST_UNUSED)
odp_timer_set_t timer_rc;
odp_timer_pool_t tp = global_mem->tp;
odp_pool_t tbp = global_mem->tbp;
+ uint32_t num_timers = global_mem->timers_per_thread;
queue = odp_queue_create("timer_queue", NULL);
if (queue == ODP_QUEUE_INVALID)
CU_FAIL_FATAL("Queue create failed");
- tt = malloc(sizeof(struct test_timer) * NTIMERS);
+ tt = malloc(sizeof(struct test_timer) * num_timers);
if (!tt)
CU_FAIL_FATAL("malloc failed");
/* Prepare all timers */
- for (i = 0; i < NTIMERS; i++) {
+ for (i = 0; i < num_timers; i++) {
tt[i].ev = odp_timeout_to_event(odp_timeout_alloc(tbp));
if (tt[i].ev == ODP_EVENT_INVALID) {
LOG_DBG("Failed to allocate timeout (%" PRIu32 "/%d)\n",
- i, NTIMERS);
+ i, num_timers);
break;
}
tt[i].tim = odp_timer_alloc(tp, queue, &tt[i]);
if (tt[i].tim == ODP_TIMER_INVALID) {
LOG_DBG("Failed to allocate timer (%" PRIu32 "/%d)\n",
- i, NTIMERS);
+ i, num_timers);
odp_event_free(tt[i].ev);
break;
}
@@ -837,10 +843,12 @@ static void timer_test_odp_timer_all(void)
uint64_t resolution_ns;
uint32_t timers_allocated;
pthrd_arg thrdarg;
+ odp_pool_capability_t pool_capa;
odp_timer_capability_t timer_capa;
odp_pool_t tbp;
odp_timer_pool_t tp;
uint32_t num_timers;
+ int timers_per_thread;
/* Reserve at least one core for running other processes so the timer
* test hopefully can run undisturbed and thus get better timing
@@ -860,10 +868,18 @@ static void timer_test_odp_timer_all(void)
if (timer_capa.max_timers && timer_capa.max_timers < num_timers)
num_timers = timer_capa.max_timers;
+ CU_ASSERT_FATAL(!odp_pool_capability(&pool_capa));
+ if (pool_capa.tmo.max_num && num_timers > pool_capa.tmo.max_num)
+ num_timers = pool_capa.tmo.max_num;
+
/* Create timeout pools */
odp_pool_param_init(¶ms);
params.type = ODP_POOL_TIMEOUT;
- params.tmo.num = num_timers + num_workers;
+ params.tmo.num = num_timers;
+
+ timers_per_thread = (num_timers / num_workers) - EXTRA_TIMERS;
+ global_mem->timers_per_thread = timers_per_thread > 1 ?
+ timers_per_thread : 1;
global_mem->tbp = odp_pool_create("tmo_pool", ¶ms);
if (global_mem->tbp == ODP_POOL_INVALID)
-----------------------------------------------------------------------
Summary of changes:
test/validation/api/timer/timer.c | 26 +++++++++++++++++++++-----
1 file changed, 21 insertions(+), 5 deletions(-)
hooks/post-receive
--
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "".
The branch, master has been updated
via af88591a590faeadeff8a20d6e996c16fc272171 (commit)
via 9ce998af3ae376542a6b52be71d196a50fa032ba (commit)
via 695362d8a9aa83eb5cbd7ab1f72d3a3c670fb177 (commit)
via 486e4d5231eb84618ccf9ed2bf3ba1e9e2531bba (commit)
via 4a9ac7a31a3289222bbba19bc8ecb73561ee9fd7 (commit)
via 059af8bd22a1e7d9a9dcc31846b06c55b5759df6 (commit)
from 7d91ea174cb2a25fa85e2d39fc8528841c4956fe (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit af88591a590faeadeff8a20d6e996c16fc272171
Author: Petri Savolainen <petri.savolainen(a)nokia.com>
Date: Thu Feb 7 14:04:59 2019 +0200
api: increment version to v1.21.1
Increment minor version number to reflect backward compatible
API changes.
Signed-off-by: Petri Savolainen <petri.savolainen(a)nokia.com>
Reviewed-by: Stanislaw Kardach <skardach(a)marvell.com>
diff --git a/configure.ac b/configure.ac
index f6eeeb7e..be5ae787 100644
--- a/configure.ac
+++ b/configure.ac
@@ -4,7 +4,7 @@ AC_PREREQ([2.5])
##########################################################################
m4_define([odpapi_generation_version], [1])
m4_define([odpapi_major_version], [21])
-m4_define([odpapi_minor_version], [0])
+m4_define([odpapi_minor_version], [1])
m4_define([odpapi_point_version], [0])
m4_define([odpapi_version],
[odpapi_generation_version.odpapi_major_version.odpapi_minor_version.odpapi_point_version])
commit 9ce998af3ae376542a6b52be71d196a50fa032ba
Author: Petri Savolainen <petri.savolainen(a)nokia.com>
Date: Thu Feb 7 12:33:52 2019 +0200
validation: sched: highlight queue vs sched capa
Remove unused queue capa. Rename variables to highlight which
capa is used.
Signed-off-by: Petri Savolainen <petri.savolainen(a)nokia.com>
Reviewed-by: Stanislaw Kardach <skardach(a)marvell.com>
diff --git a/test/validation/api/scheduler/scheduler.c b/test/validation/api/scheduler/scheduler.c
index 50238ffe..c128580d 100644
--- a/test/validation/api/scheduler/scheduler.c
+++ b/test/validation/api/scheduler/scheduler.c
@@ -149,17 +149,17 @@ static void release_context(odp_schedule_sync_t sync)
static void scheduler_test_capa(void)
{
- odp_schedule_capability_t capa;
+ odp_schedule_capability_t sched_capa;
odp_queue_capability_t queue_capa;
- memset(&capa, 0, sizeof(odp_schedule_capability_t));
- CU_ASSERT_FATAL(odp_schedule_capability(&capa) == 0);
+ memset(&sched_capa, 0, sizeof(odp_schedule_capability_t));
+ CU_ASSERT_FATAL(odp_schedule_capability(&sched_capa) == 0);
CU_ASSERT_FATAL(odp_queue_capability(&queue_capa) == 0);
- CU_ASSERT(capa.max_groups != 0);
- CU_ASSERT(capa.max_prios != 0);
- CU_ASSERT(capa.max_queues != 0);
- CU_ASSERT(queue_capa.max_queues >= capa.max_queues);
+ CU_ASSERT(sched_capa.max_groups != 0);
+ CU_ASSERT(sched_capa.max_prios != 0);
+ CU_ASSERT(sched_capa.max_queues != 0);
+ CU_ASSERT(queue_capa.max_queues >= sched_capa.max_queues);
}
static void scheduler_test_wait_time(void)
@@ -422,7 +422,6 @@ static void scheduler_test_wait(void)
static void scheduler_test_queue_size(void)
{
- odp_queue_capability_t queue_capa;
odp_schedule_config_t default_config;
odp_pool_t pool;
odp_pool_param_t pool_param;
@@ -436,8 +435,10 @@ static void scheduler_test_queue_size(void)
ODP_SCHED_SYNC_ATOMIC,
ODP_SCHED_SYNC_ORDERED};
- CU_ASSERT_FATAL(odp_queue_capability(&queue_capa) == 0);
queue_size = DEFAULT_NUM_EV;
+
+ /* Scheduler has been already configured. Use default config as max
+ * queue size. */
odp_schedule_config_init(&default_config);
if (default_config.queue_size &&
queue_size > default_config.queue_size)
@@ -1779,7 +1780,7 @@ static void scheduler_test_ordered_lock(void)
static int create_queues(test_globals_t *globals)
{
int i, j, prios, rc;
- odp_queue_capability_t capa;
+ odp_queue_capability_t queue_capa;
odp_schedule_capability_t sched_capa;
odp_schedule_config_t default_config;
odp_pool_t queue_ctx_pool;
@@ -1793,7 +1794,7 @@ static int create_queues(test_globals_t *globals)
int queues_per_prio;
int sched_types;
- if (odp_queue_capability(&capa) < 0) {
+ if (odp_queue_capability(&queue_capa) < 0) {
printf("Queue capability query failed\n");
return -1;
}
@@ -1826,8 +1827,9 @@ static int create_queues(test_globals_t *globals)
num_sched = (prios * queues_per_prio * sched_types) + CHAOS_NUM_QUEUES;
num_plain = (prios * queues_per_prio);
while ((num_sched > default_config.num_queues ||
- num_plain > capa.plain.max_num ||
- num_sched + num_plain > capa.max_queues) && queues_per_prio) {
+ num_plain > queue_capa.plain.max_num ||
+ num_sched + num_plain > queue_capa.max_queues) &&
+ queues_per_prio) {
queues_per_prio--;
num_sched = (prios * queues_per_prio * sched_types) +
CHAOS_NUM_QUEUES;
commit 695362d8a9aa83eb5cbd7ab1f72d3a3c670fb177
Author: Petri Savolainen <petri.savolainen(a)nokia.com>
Date: Thu Feb 7 10:31:24 2019 +0200
validation: sched: order ignore param test
Added simple, single threaded test to check that events from
an ordered queue can be forwarded to a plain queue which
ignores ordering (created with ODP_QUEUE_ORDER_IGNORE).
Signed-off-by: Petri Savolainen <petri.savolainen(a)nokia.com>
Reviewed-by: Stanislaw Kardach <skardach(a)marvell.com>
diff --git a/test/validation/api/scheduler/scheduler.c b/test/validation/api/scheduler/scheduler.c
index bdcd7b2d..50238ffe 100644
--- a/test/validation/api/scheduler/scheduler.c
+++ b/test/validation/api/scheduler/scheduler.c
@@ -23,7 +23,7 @@
#define NUM_GROUPS 2
#define MAX_QUEUES (64 * 1024)
-#define TEST_QUEUE_SIZE_NUM_EV 50
+#define DEFAULT_NUM_EV 50
#define MAX_FLOWS 16
#define FLOW_TEST_NUM_EV (10 * MAX_FLOWS)
@@ -437,7 +437,7 @@ static void scheduler_test_queue_size(void)
ODP_SCHED_SYNC_ORDERED};
CU_ASSERT_FATAL(odp_queue_capability(&queue_capa) == 0);
- queue_size = TEST_QUEUE_SIZE_NUM_EV;
+ queue_size = DEFAULT_NUM_EV;
odp_schedule_config_init(&default_config);
if (default_config.queue_size &&
queue_size > default_config.queue_size)
@@ -446,7 +446,7 @@ static void scheduler_test_queue_size(void)
odp_pool_param_init(&pool_param);
pool_param.buf.size = 100;
pool_param.buf.align = 0;
- pool_param.buf.num = TEST_QUEUE_SIZE_NUM_EV;
+ pool_param.buf.num = DEFAULT_NUM_EV;
pool_param.type = ODP_POOL_BUFFER;
pool = odp_pool_create("test_queue_size", &pool_param);
@@ -489,7 +489,7 @@ static void scheduler_test_queue_size(void)
}
num = 0;
- for (j = 0; j < 100 * TEST_QUEUE_SIZE_NUM_EV; j++) {
+ for (j = 0; j < 100 * DEFAULT_NUM_EV; j++) {
ev = odp_schedule(&from, ODP_SCHED_NO_WAIT);
if (ev == ODP_EVENT_INVALID)
@@ -507,6 +507,120 @@ static void scheduler_test_queue_size(void)
CU_ASSERT_FATAL(odp_pool_destroy(pool) == 0);
}
+static void scheduler_test_order_ignore(void)
+{
+ odp_queue_capability_t queue_capa;
+ odp_schedule_config_t default_config;
+ odp_pool_t pool;
+ odp_pool_param_t pool_param;
+ odp_queue_param_t queue_param;
+ odp_queue_t ordered, plain, from;
+ odp_event_t ev;
+ odp_buffer_t buf;
+ uint32_t j, queue_size, num;
+ int ret;
+
+ odp_schedule_config_init(&default_config);
+ CU_ASSERT_FATAL(odp_queue_capability(&queue_capa) == 0);
+
+ queue_size = DEFAULT_NUM_EV;
+ if (default_config.queue_size &&
+ queue_size > default_config.queue_size)
+ queue_size = default_config.queue_size;
+
+ if (queue_capa.plain.max_size &&
+ queue_size > queue_capa.plain.max_size)
+ queue_size = queue_capa.plain.max_size;
+
+ odp_pool_param_init(&pool_param);
+ pool_param.buf.size = 100;
+ pool_param.buf.align = 0;
+ pool_param.buf.num = DEFAULT_NUM_EV;
+ pool_param.type = ODP_POOL_BUFFER;
+
+ pool = odp_pool_create("test_order_ignore", &pool_param);
+
+ CU_ASSERT_FATAL(pool != ODP_POOL_INVALID);
+
+ /* Ensure that scheduler is empty */
+ for (j = 0; j < 10;) {
+ ev = odp_schedule(NULL, ODP_SCHED_NO_WAIT);
+ CU_ASSERT(ev == ODP_EVENT_INVALID);
+
+ if (ev != ODP_EVENT_INVALID)
+ odp_event_free(ev);
+ else
+ j++;
+ }
+
+ odp_queue_param_init(&queue_param);
+ queue_param.type = ODP_QUEUE_TYPE_SCHED;
+ queue_param.sched.prio = odp_schedule_default_prio();
+ queue_param.sched.sync = ODP_SCHED_SYNC_ORDERED;
+ queue_param.sched.group = ODP_SCHED_GROUP_ALL;
+
+ ordered = odp_queue_create("ordered", &queue_param);
+ CU_ASSERT_FATAL(ordered != ODP_QUEUE_INVALID);
+
+ odp_queue_param_init(&queue_param);
+ queue_param.type = ODP_QUEUE_TYPE_PLAIN;
+ queue_param.order = ODP_QUEUE_ORDER_IGNORE;
+
+ plain = odp_queue_create("plain", &queue_param);
+ CU_ASSERT_FATAL(plain != ODP_QUEUE_INVALID);
+
+ num = 0;
+ for (j = 0; j < queue_size; j++) {
+ buf = odp_buffer_alloc(pool);
+ CU_ASSERT_FATAL(buf != ODP_BUFFER_INVALID);
+
+ ev = odp_buffer_to_event(buf);
+ ret = odp_queue_enq(ordered, ev);
+
+ if (ret)
+ odp_event_free(ev);
+ else
+ num++;
+ }
+
+ CU_ASSERT(num == queue_size);
+
+ num = 0;
+ for (j = 0; j < 100 * DEFAULT_NUM_EV; j++) {
+ ev = odp_schedule(&from, ODP_SCHED_NO_WAIT);
+
+ if (ev == ODP_EVENT_INVALID)
+ continue;
+
+ CU_ASSERT(from == ordered);
+ ret = odp_queue_enq(plain, ev);
+
+ if (ret)
+ odp_event_free(ev);
+ else
+ num++;
+ }
+
+ CU_ASSERT(num == queue_size);
+
+ num = 0;
+ for (j = 0; j < 100 * DEFAULT_NUM_EV; j++) {
+ ev = odp_queue_deq(plain);
+
+ if (ev == ODP_EVENT_INVALID)
+ continue;
+
+ odp_event_free(ev);
+ num++;
+ }
+
+ CU_ASSERT(num == queue_size);
+
+ CU_ASSERT_FATAL(odp_queue_destroy(ordered) == 0);
+ CU_ASSERT_FATAL(odp_queue_destroy(plain) == 0);
+ CU_ASSERT_FATAL(odp_pool_destroy(pool) == 0);
+}
+
static void scheduler_test_groups(void)
{
odp_pool_t p;
@@ -2136,6 +2250,7 @@ odp_testinfo_t scheduler_suite[] = {
ODP_TEST_INFO(scheduler_test_queue_destroy),
ODP_TEST_INFO(scheduler_test_wait),
ODP_TEST_INFO(scheduler_test_queue_size),
+ ODP_TEST_INFO(scheduler_test_order_ignore),
ODP_TEST_INFO(scheduler_test_groups),
ODP_TEST_INFO(scheduler_test_pause_resume),
ODP_TEST_INFO(scheduler_test_ordered_lock),
commit 486e4d5231eb84618ccf9ed2bf3ba1e9e2531bba
Author: Petri Savolainen <petri.savolainen(a)nokia.com>
Date: Thu Feb 7 12:18:59 2019 +0200
linux-gen: sched: implement QUEUE_ORDER_IGNORE option in scalable
Scalable scheduler implementation of QUEUE_ORDER_IGNORE option.
Signed-off-by: Petri Savolainen <petri.savolainen(a)nokia.com>
Reviewed-by: Stanislaw Kardach <skardach(a)marvell.com>
diff --git a/platform/linux-generic/odp_queue_scalable.c b/platform/linux-generic/odp_queue_scalable.c
index 88abe8c7..b4e62b08 100644
--- a/platform/linux-generic/odp_queue_scalable.c
+++ b/platform/linux-generic/odp_queue_scalable.c
@@ -632,7 +632,8 @@ static int _queue_enq_multi(odp_queue_t handle, odp_buffer_hdr_t *buf_hdr[],
queue = qentry_from_int(handle);
ts = sched_ts;
- if (ts && odp_unlikely(ts->out_of_order)) {
+ if (ts && odp_unlikely(ts->out_of_order) &&
+ (queue->s.param.order == ODP_QUEUE_ORDER_KEEP)) {
actual = rctx_save(queue, buf_hdr, num);
return actual;
}
@@ -888,6 +889,7 @@ static void queue_param_init(odp_queue_param_t *params)
params->sched.prio = odp_schedule_default_prio();
params->sched.sync = ODP_SCHED_SYNC_PARALLEL;
params->sched.group = ODP_SCHED_GROUP_ALL;
+ params->order = ODP_QUEUE_ORDER_KEEP;
}
static int queue_info(odp_queue_t handle, odp_queue_info_t *info)
diff --git a/platform/linux-generic/odp_schedule_scalable.c b/platform/linux-generic/odp_schedule_scalable.c
index 4e9dd771..326c49e3 100644
--- a/platform/linux-generic/odp_schedule_scalable.c
+++ b/platform/linux-generic/odp_schedule_scalable.c
@@ -2064,8 +2064,9 @@ static int ord_enq_multi(odp_queue_t handle, void *buf_hdr[], int num,
int actual;
ts = sched_ts;
- if (ts && odp_unlikely(ts->out_of_order)) {
- queue = qentry_from_int(handle);
+ queue = qentry_from_int(handle);
+ if (ts && odp_unlikely(ts->out_of_order) &&
+ (queue->s.param.order == ODP_QUEUE_ORDER_KEEP)) {
actual = rctx_save(queue, (odp_buffer_hdr_t **)buf_hdr, num);
*ret = actual;
return 1;
commit 4a9ac7a31a3289222bbba19bc8ecb73561ee9fd7
Author: Petri Savolainen <petri.savolainen(a)nokia.com>
Date: Thu Feb 7 09:31:50 2019 +0200
linux-gen: sched: implement QUEUE_ORDER_IGNORE option
If destination queue does not require order maintenance,
fall back from ordered enqueue to normal enqueue operation.
Signed-off-by: Petri Savolainen <petri.savolainen(a)nokia.com>
Reviewed-by: Stanislaw Kardach <skardach(a)marvell.com>
diff --git a/platform/linux-generic/odp_queue_basic.c b/platform/linux-generic/odp_queue_basic.c
index 37a2fad1..74ed1faa 100644
--- a/platform/linux-generic/odp_queue_basic.c
+++ b/platform/linux-generic/odp_queue_basic.c
@@ -615,6 +615,7 @@ static void queue_param_init(odp_queue_param_t *params)
params->enq_mode = ODP_QUEUE_OP_MT;
params->deq_mode = ODP_QUEUE_OP_MT;
params->nonblocking = ODP_BLOCKING;
+ params->order = ODP_QUEUE_ORDER_KEEP;
params->sched.prio = odp_schedule_default_prio();
params->sched.sync = ODP_SCHED_SYNC_PARALLEL;
params->sched.group = ODP_SCHED_GROUP_ALL;
diff --git a/platform/linux-generic/odp_schedule_basic.c b/platform/linux-generic/odp_schedule_basic.c
index 6176c951..d20fd735 100644
--- a/platform/linux-generic/odp_schedule_basic.c
+++ b/platform/linux-generic/odp_schedule_basic.c
@@ -846,9 +846,13 @@ static int schedule_ord_enq_multi(odp_queue_t dst_queue, void *buf_hdr[],
if (sched_local.ordered.in_order)
return 0;
+ dst_qentry = qentry_from_handle(dst_queue);
+
+ if (dst_qentry->s.param.order == ODP_QUEUE_ORDER_IGNORE)
+ return 0;
+
src_queue = sched_local.ordered.src_queue;
stash_num = sched_local.ordered.stash_num;
- dst_qentry = qentry_from_handle(dst_queue);
if (ordered_own_turn(src_queue)) {
/* Own turn, so can do enqueue directly. */
commit 059af8bd22a1e7d9a9dcc31846b06c55b5759df6
Author: Petri Savolainen <petri.savolainen(a)nokia.com>
Date: Wed Feb 6 16:40:00 2019 +0200
api: queue: add order maintenance parameter
Added a parameter to control if a destination queue does not
require event re-ordering. By default, event order is maintained
for all destination queues as before. Application may use
ODP_QUEUE_ORDER_IGNORE for those queues that are used under
ordered queue context, but do not require re-ordering and/or
do need to avoid extra re-ordering delays.
Signed-off-by: Petri Savolainen <petri.savolainen(a)nokia.com>
Reviewed-by: Stanislaw Kardach <skardach(a)marvell.com>
diff --git a/include/odp/api/spec/queue_types.h b/include/odp/api/spec/queue_types.h
index c8f31046..3ed9246d 100644
--- a/include/odp/api/spec/queue_types.h
+++ b/include/odp/api/spec/queue_types.h
@@ -122,6 +122,37 @@ typedef enum odp_nonblocking_t {
} odp_nonblocking_t;
+/**
+ * Original event order maintenance options
+ *
+ * Options to keep or ignore the original event order of a source queue. This
+ * option is relevant for (plain or parallel scheduled) queues that are
+ * destinations for events enqueued while holding an ordered queue
+ * synchronization context. By default, an ordered context maintains original
+ * event order regardless of the destination queue type. Event re-ordering may
+ * cause extra synchronization effort for implementation and a long delay before
+ * application can receive a re-ordered event from the destination queue. This
+ * is wasteful and in some cases the extra delay is not acceptable for those
+ * destination queues that do not need to maintain the original event order.
+ * Application can use ODP_QUEUE_ORDER_IGNORE option to prevent implementation
+ * from performing unnecessary event re-ordering and negative side-effects of
+ * that.
+ */
+typedef enum odp_queue_order_t {
+ /** Keep original event order. Events enqueued into this queue while
+ * holding an ordered queue synchronization context maintain the
+ * original event order of the source queue.
+ */
+ ODP_QUEUE_ORDER_KEEP = 0,
+
+ /** Ignore original event order. Events enqueued into this queue do not
+ * need to maintain the original event order of the source queue.
+ * Implementation must avoid significant event re-ordering delays.
+ */
+ ODP_QUEUE_ORDER_IGNORE
+
+} odp_queue_order_t;
+
/**
* Queue capabilities
*/
@@ -262,6 +293,12 @@ typedef struct odp_queue_param_t {
* ODP_QUEUE_TYPE_SCHED. */
odp_schedule_param_t sched;
+ /** Original event order maintenance
+ *
+ * Keep or ignore the original event order of a source queue.
+ * The default value is ODP_QUEUE_ORDER_KEEP. */
+ odp_queue_order_t order;
+
/** Non-blocking level
*
* Queue implementation must guarantee at least this level of block
diff --git a/include/odp/api/spec/schedule_types.h b/include/odp/api/spec/schedule_types.h
index 2acec0db..c5325901 100644
--- a/include/odp/api/spec/schedule_types.h
+++ b/include/odp/api/spec/schedule_types.h
@@ -77,7 +77,10 @@ extern "C" {
* The atomic queue synchronization context is dedicated to the thread until it
* requests another event from the scheduler, which implicitly releases the
* context. User may allow the scheduler to release the context earlier than
- * that by calling odp_schedule_release_atomic().
+ * that by calling odp_schedule_release_atomic(). However, this call is just
+ * a hint to the implementation and the context may be held until the next
+ * schedule call.
+ *
* When scheduler is enabled as flow-aware, the event flow id value affects
* scheduling of the event and synchronization is maintained per flow within
* each queue.
@@ -97,7 +100,9 @@ extern "C" {
* queue synchronization context. A thread holds the context until it
* requests another event from the scheduler, which implicitly releases the
* context. User may allow the scheduler to release the context earlier than
- * that by calling odp_schedule_release_ordered().
+ * that by calling odp_schedule_release_ordered(). However, this call is just
+ * a hint to the implementation and the context may be held until the next
+ * schedule call.
*
* Events from the same (source) queue appear in their original order
* when dequeued from a destination queue. The destination queue can have any
@@ -107,6 +112,11 @@ extern "C" {
* (e.g. freed or stored) within the context are considered missing from
* reordering and are skipped at this time (but can be ordered again within
* another context).
+ *
+ * Unnecessary event re-ordering may be avoided for those destination queues
+ * that do not need to maintain the original event order by setting 'order'
+ * queue parameter to ODP_QUEUE_ORDER_IGNORE.
+ *
* When scheduler is enabled as flow-aware, the event flow id value affects
* scheduling of the event and synchronization is maintained per flow within
* each queue.
-----------------------------------------------------------------------
Summary of changes:
configure.ac | 2 +-
include/odp/api/spec/queue_types.h | 37 ++++++
include/odp/api/spec/schedule_types.h | 14 ++-
platform/linux-generic/odp_queue_basic.c | 1 +
platform/linux-generic/odp_queue_scalable.c | 4 +-
platform/linux-generic/odp_schedule_basic.c | 6 +-
platform/linux-generic/odp_schedule_scalable.c | 5 +-
test/validation/api/scheduler/scheduler.c | 151 ++++++++++++++++++++++---
8 files changed, 196 insertions(+), 24 deletions(-)
hooks/post-receive
--
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "".
The branch, master has been updated
via 3be1cd5a8ce1ff6b5b31cf41fbbf995bce5144d5 (commit)
from b1564eb643c16dc98048fb9aa072580451ed90b2 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit 3be1cd5a8ce1ff6b5b31cf41fbbf995bce5144d5
Author: Matias Elo <matias.elo(a)nokia.com>
Date: Thu Jan 31 14:29:56 2019 +0200
doc: update GitHub repository links
Signed-off-by: Matias Elo <matias.elo(a)nokia.com>
Reviewed-by: Bill Fischofer <bill.fischofer(a)linaro.org>
diff --git a/.travis.yml b/.travis.yml
index bbcec4fd..e4b9768e 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -9,7 +9,7 @@
#
# Travis uses Docker images which mainained here:
-# https://github.com/Linaro/odp-docker-images
+# https://github.com/OpenDataPlane/odp-docker-images
# CI scirpts are maintained under ./scripts/ci/ directory
# which passed into container during the test run.
diff --git a/DEPENDENCIES b/DEPENDENCIES
index d5214663..f16617bc 100644
--- a/DEPENDENCIES
+++ b/DEPENDENCIES
@@ -75,7 +75,7 @@ Prerequisites for building the OpenDataPlane (ODP) API
$ make install
# You may now build either 32 or 64 bit ODP
- $ git clone https://github.com/Linaro/odp.git odp
+ $ git clone https://github.com/OpenDataPlane/odp.git odp
$ cd odp
$ ./bootstrap
@@ -174,7 +174,7 @@ Prerequisites for building the OpenDataPlane (ODP) API
v18.02, v18.05 and v18.11.
Note: only packet I/O is accelerated with DPDK. Use
- https://github.com/Linaro/odp-dpdk.git
+ https://github.com/OpenDataPlane/odp-dpdk.git
for fully accelerated odp dpdk platform.
3.4.1 DPDK pktio requirements
diff --git a/doc/application-api-guide/odp.dox b/doc/application-api-guide/odp.dox
index a6adf623..33357bc9 100644
--- a/doc/application-api-guide/odp.dox
+++ b/doc/application-api-guide/odp.dox
@@ -37,7 +37,7 @@
*
* @section contact Contact Details
* - The main web site is http://www.opendataplane.org/
- * - The git repo is https://github.com/Linaro/odp.git
+ * - The git repo is https://github.com/OpenDataPlane/odp.git
* - Bug tracking is https://bugs.linaro.org/describecomponents.cgi?product=OpenDataPlane%20-%20…
*
*/
diff --git a/doc/helper-guide/odp.dox b/doc/helper-guide/odp.dox
index 82db060b..0a0f9375 100644
--- a/doc/helper-guide/odp.dox
+++ b/doc/helper-guide/odp.dox
@@ -20,7 +20,7 @@
*
* @section contact Contact Details
* - The main web site is http://www.opendataplane.org/
- * - The git repo is https://github.com/Linaro/odp.git
+ * - The git repo is https://github.com/OpenDataPlane/odp.git
* - Bug tracking is https://bugs.linaro.org/describecomponents.cgi?product=OpenDataPlane%20-%20…
*
*/
diff --git a/platform/linux-generic/Makefile.am b/platform/linux-generic/Makefile.am
index d65f6592..08b6a671 100644
--- a/platform/linux-generic/Makefile.am
+++ b/platform/linux-generic/Makefile.am
@@ -1,5 +1,5 @@
# Uncomment this if you need to change the CUSTOM_STR string
-#export CUSTOM_STR=https://github.com/Linaro/odp.git
+#export CUSTOM_STR=https://github.com/OpenDataPlane/odp.git
include $(top_srcdir)/platform/Makefile.inc
-----------------------------------------------------------------------
Summary of changes:
.travis.yml | 2 +-
DEPENDENCIES | 4 ++--
doc/application-api-guide/odp.dox | 2 +-
doc/helper-guide/odp.dox | 2 +-
platform/linux-generic/Makefile.am | 2 +-
5 files changed, 6 insertions(+), 6 deletions(-)
hooks/post-receive
--
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "".
The branch, master has been updated
via b1564eb643c16dc98048fb9aa072580451ed90b2 (commit)
from 8b0ac26e358b7632f891557be07c8c1f43a29a4a (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit b1564eb643c16dc98048fb9aa072580451ed90b2
Author: Petri Savolainen <petri.savolainen(a)linaro.org>
Date: Thu Jan 31 11:13:35 2019 +0200
linux-gen: buffer: clean checkpatch warnings
Checkpatch reported warnings when running it against the file.
Corrected all reported warnings.
Signed-off-by: Petri Savolainen <petri.savolainen(a)linaro.org>
Reviewed-by: Matias Elo <matias.elo(a)nokia.com>
diff --git a/platform/linux-generic/odp_buffer.c b/platform/linux-generic/odp_buffer.c
index ac0b9f9c..f3864bfd 100644
--- a/platform/linux-generic/odp_buffer.c
+++ b/platform/linux-generic/odp_buffer.c
@@ -65,16 +65,16 @@ int odp_buffer_snprint(char *str, uint32_t n, odp_buffer_t buf)
hdr = buf_hdl_to_hdr(buf);
pool = hdr->pool_ptr;
- len += snprintf(&str[len], n-len,
+ len += snprintf(&str[len], n - len,
"Buffer\n");
- len += snprintf(&str[len], n-len,
+ len += snprintf(&str[len], n - len,
" pool %" PRIu64 "\n",
odp_pool_to_u64(pool->pool_hdl));
- len += snprintf(&str[len], n-len,
+ len += snprintf(&str[len], n - len,
" addr %p\n", hdr->seg[0].data);
- len += snprintf(&str[len], n-len,
+ len += snprintf(&str[len], n - len,
" size %" PRIu32 "\n", odp_buffer_size(buf));
- len += snprintf(&str[len], n-len,
+ len += snprintf(&str[len], n - len,
" type %i\n", hdr->type);
return len;
@@ -86,7 +86,7 @@ void odp_buffer_print(odp_buffer_t buf)
char str[max_len];
int len;
- len = odp_buffer_snprint(str, max_len-1, buf);
+ len = odp_buffer_snprint(str, max_len - 1, buf);
str[len] = 0;
ODP_PRINT("\n%s\n", str);
-----------------------------------------------------------------------
Summary of changes:
platform/linux-generic/odp_buffer.c | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
hooks/post-receive
--
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "".
The annotated tag, v1.21.0.0 has been created
at 62b0005078c07a7f44f084dc6785265a3607e6f0 (tag)
tagging 8b0ac26e358b7632f891557be07c8c1f43a29a4a (commit)
replaces v1.20.0.0
tagged by Maxim Uvarov
on Mon Jan 28 16:48:09 2019 +0300
- Log -----------------------------------------------------------------
== OpenDataPlane (1.21.0.0)
=== Summary of Changes
ODP v1.21.0.0 adds two new API families as well as several small improvements.
==== APIs
===== Compression Support
A new family of APIs is added that provides for session-oriented support for
packet data compression and decompression. Compression sessions define the
parameters used to control compression operations and their associated
integrity hashes. Once created, sessions are input parameters to the new
`odp_comp_op()` and `odp_comp_op_enq()` APIs that provide access to
synchronous and asynchronous compression services on packets.
Associated with the completion of asynchronous compression operations, a new
packet subtype, `ODP_EVENT_PACKET_COMP` is defined. This subtype indicates
that the packet includes additional metadata (retrievable via
`odp_comp_result()`) that provides the result of the requested operation.
A number of different compression and associated hash algorithms are defined,
which are communicated with three new capability APIs:
`odp_comp_capability()`::
Provides information about general compression related capabilities
offered by this implementation
`odp_comp_alg_capability()`::
Provides details about the capabilities of individual compression algorithms
supported.
`odp_comp_hash_alg_capability()`::
Provides details about the capabilities of individual hash algorithms
supported for use with compression.
===== Flow Aware Scheduler Support
A new capability for flow aware scheduling is added. As part of this, the
scheduler now supports capabilities and configurability. As a result, the
initialization sequence for applications that make use of the ODP scheduler
has changed slightly. The new API call sequence is:
[source,c]
-----
odp_schedule_capability()
odp_schedule_config_init()
odp_schedule_config()
odp_schedule()
-----
It is a programming error to call `odp_schedule()` (or its variants) without
having first initialized the scheduler with an `odp_schedule_config()` call.
This call may only be issued once per ODP instance as scheduler configuration
is global.
By default the scheduler operates as before. When configured to operate in
flow aware mode, the scheduler will now respect event flow ids (managed by the
new `odp_event_flow_id()` and `odp_event_flow_id_set()` APIs) when making
scheduling decisions. This means that flow identification is a combination of
event flow id and queue id. For example, when operating in flow aware mode the
scheduler may dispatch events from an atomic queue to multiple threads
concurrently, as long as those events have different flow ids. For
applications that process large numbers of lightweight flows that have limited
context needs, this can lead to throughput improvements as well as reduced
implementation memory footprint.
==== DPDK v18.11 Support
The latest LTS release of DPDK (v18.11) is now supported by ODP. Support for
the previous LTS release (v17.11) is retained. Prior versions of DPDK are
no longer supported.
==== Queue Capabilities Moved to Scheduler
As part of the introduction of flow-aware scheduling, capabilities associated
with `SCHED` queues have been moved from the `odp_queue_capabilities_t` struct
returned by `odp_queue_capabilities()` to the new `odp_sched_capabilities_t`
struct returned by `odp_sched_capabilities()`.
Capabilities moved include `max_ordered_locks`, `max_sched_groups`, and
`sched_prios`. The `max_sched_groups` capability is renamed `max_groups`. In
addition, `max_queues`, `max_queue_size`, and the support capabilities for
lock free and wait free non blocking queues is now part of the scheduler
capabilities.
In support of flow aware scheduling mode, the `max_flows` scheduler capability
is renamed `max_flow_id`. A value of 0 indicates that flow aware mode
scheduling is not available in this ODP implementation.
=== Test/Validation Improvements
==== Travis readability improvement
The "BUILD_ONLY` environment variable has been renamed `CHECK` for improved
output readability.
==== Flow aware scheduler testing
As part of flow aware mode, scheduler validation tests will now test this mode
if `odp_schedule_capability()` indicates that flow-aware mode is supported.
=== Bug Fixes
==== Unnumbered Bugs/Issues
* Latest version of netmap `nm_ring_empty()` implementation has changed.
PktIO netmap support updated to support this as well as previous releases.
* Improved compatibility of PktIO socket support with latest versions
of the clang compiler.
* Add match pattern for missing DPDK PMD drivers for improved compatibility.
Balasubramanian Manoharan (1):
api: comp: compression specification
Bill Fischofer (3):
doc: userguide: add documentation for flow aware scheduler mode
doc: userguide: add section for compression support
changelog: add change log updates for odp v1.21.0.0
Dmitry Eremin-Solenikov (31):
api: queue, schedule: move scheduler capabilities to scheduler
linux-gen: move NUM_INTERNAL_QUEUES to config
linux-gen: queue, schedule: move scheduler capabilities to scheduler
example, tests: move scheduler capabilities to scheduler
api: queue, schedule: move scheduled queue capabilities to sched
linux-gen: queue, schedule: move scheduled queue capabilities to sched
example, tests: move scheduled queue capabilities to sched
api: schedule: add scheduler config and start API
api: schedule: add scheduler flow aware mode
linux-gen: schedule: rename config to get_config
linux-gen: implement odp_schedule_config() API call
validation: add calls to odp_schedule_config()
performance: add calls to odp_schedule_config()
examples: add calls to odp_schedule_config()
validation: scheduler use schedule_config instead of capabilities
linux-gen: event: support flow-awareness API
api: event: define ODP_EVENT_PACKET_COMP
api: fix compression API headers
linux-gen: add compression ABI file
linux-gen: event: define ODP_EVENT_PACKET_COMP
validation: add compression tests
linux-gen: comp: add stub implementation
linux-gen: add miniz library at 3a884afaa7a9eefb4eb80041aee6e7995a2f5215
linux-gen: miniz local modifications
linux-gen: comp: add deflate/zlib implementation based on miniz
validation: add comp_main to .gitignore
linux-gen: miniz: disable unaligned loads/stores to fix compilation with clang
m4: move -lnuma detection to global file
build: support detection of DPDK through pkg-config
build: provide PKG_CHECK_MODULES_STATIC implementation
linux-gen: fix compiling dpdk pktio with Clang
Matias Elo (8):
linux-gen: netmap: update ring->head in netmap_recv_desc()
linux-gen: socket_mmap: fix build with older clang versions
linux-gen: dpdk: fix build with no pmd drivers
travis: add CentOS 7 build test
travis: rename BUILD_ONLY to CHECK
test: odp_pktio_ordered: add missing schedule_config initialization
linux-gen: dpdk: add a fallback value for the number of numa nodes
travis: add dpdk 18.11 test
Maxim Uvarov (1):
changelog: updates for odp v1.21.0.0
Petri Savolainen (7):
linux-gen: dpdk: support DPDK version up to v18.11
dependencies: dpdk: list supported versions
api: sched: max_flow_id capability
linux-gen: sched: check that config has been done
validation: sched: add flow aware test case
linux-gen: sched: dummy flow aware implementation
dependencies: add libconfig package name
-----------------------------------------------------------------------
hooks/post-receive
--
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "".
The branch, master has been updated
via 8b0ac26e358b7632f891557be07c8c1f43a29a4a (commit)
from a0038f5d6a06aaf3596adddfb950011abe2aa8bd (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit 8b0ac26e358b7632f891557be07c8c1f43a29a4a
Author: Maxim Uvarov <maxim.uvarov(a)linaro.org>
Date: Mon Jan 28 16:26:52 2019 +0300
changelog: updates for odp v1.21.0.0
Signed-off-by: Maxim Uvarov <maxim.uvarov(a)linaro.org>
diff --git a/configure.ac b/configure.ac
index 8efb8525..f6eeeb7e 100644
--- a/configure.ac
+++ b/configure.ac
@@ -3,7 +3,7 @@ AC_PREREQ([2.5])
# Set correct API version
##########################################################################
m4_define([odpapi_generation_version], [1])
-m4_define([odpapi_major_version], [20])
+m4_define([odpapi_major_version], [21])
m4_define([odpapi_minor_version], [0])
m4_define([odpapi_point_version], [0])
m4_define([odpapi_version],
-----------------------------------------------------------------------
Summary of changes:
configure.ac | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
hooks/post-receive
--
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "".
The branch, master has been updated
via a0038f5d6a06aaf3596adddfb950011abe2aa8bd (commit)
from 3a9cf94b77aab17ea6d94bd8c8b667f183ee1521 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit a0038f5d6a06aaf3596adddfb950011abe2aa8bd
Author: Bill Fischofer <bill.fischofer(a)linaro.org>
Date: Wed Jan 23 14:18:18 2019 -0600
changelog: add change log updates for odp v1.21.0.0
Add the updates to the ODP change log for the v1.21.0.0 release.
Signed-off-by: Bill Fischofer <bill.fischofer(a)linaro.org>
Reviewed-by: Petri Savolainen <petri.savolainen(a)linaro.org>
Signed-off-by: Maxim Uvarov <maxim.uvarov(a)linaro.org>
diff --git a/CHANGELOG b/CHANGELOG
index a0bdf558..3322ea7c 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,105 @@
+== OpenDataPlane (1.21.0.0)
+=== Summary of Changes
+ODP v1.21.0.0 adds two new API families as well as several small improvements.
+
+==== APIs
+===== Compression Support
+A new family of APIs is added that provides for session-oriented support for
+packet data compression and decompression. Compression sessions define the
+parameters used to control compression operations and their associated
+integrity hashes. Once created, sessions are input parameters to the new
+`odp_comp_op()` and `odp_comp_op_enq()` APIs that provide access to
+synchronous and asynchronous compression services on packets.
+
+Associated with the completion of asynchronous compression operations, a new
+packet subtype, `ODP_EVENT_PACKET_COMP` is defined. This subtype indicates
+that the packet includes additional metadata (retrievable via
+`odp_comp_result()`) that provides the result of the requested operation.
+
+A number of different compression and associated hash algorithms are defined,
+which are communicated with three new capability APIs:
+
+`odp_comp_capability()`::
+Provides information about general compression related capabilities
+offered by this implementation
+
+`odp_comp_alg_capability()`::
+Provides details about the capabilities of individual compression algorithms
+supported.
+
+`odp_comp_hash_alg_capability()`::
+Provides details about the capabilities of individual hash algorithms
+supported for use with compression.
+
+===== Flow Aware Scheduler Support
+A new capability for flow aware scheduling is added. As part of this, the
+scheduler now supports capabilities and configurability. As a result, the
+initialization sequence for applications that make use of the ODP scheduler
+has changed slightly. The new API call sequence is:
+[source,c]
+-----
+odp_schedule_capability()
+odp_schedule_config_init()
+odp_schedule_config()
+odp_schedule()
+-----
+It is a programming error to call `odp_schedule()` (or its variants) without
+having first initialized the scheduler with an `odp_schedule_config()` call.
+This call may only be issued once per ODP instance as scheduler configuration
+is global.
+
+By default the scheduler operates as before. When configured to operate in
+flow aware mode, the scheduler will now respect event flow ids (managed by the
+new `odp_event_flow_id()` and `odp_event_flow_id_set()` APIs) when making
+scheduling decisions. This means that flow identification is a combination of
+event flow id and queue id. For example, when operating in flow aware mode the
+scheduler may dispatch events from an atomic queue to multiple threads
+concurrently, as long as those events have different flow ids. For
+applications that process large numbers of lightweight flows that have limited
+context needs, this can lead to throughput improvements as well as reduced
+implementation memory footprint.
+
+==== DPDK v18.11 Support
+The latest LTS release of DPDK (v18.11) is now supported by ODP. Support for
+the previous LTS release (v17.11) is retained. Prior versions of DPDK are
+no longer supported.
+
+==== Queue Capabilities Moved to Scheduler
+As part of the introduction of flow-aware scheduling, capabilities associated
+with `SCHED` queues have been moved from the `odp_queue_capabilities_t` struct
+returned by `odp_queue_capabilities()` to the new `odp_sched_capabilities_t`
+struct returned by `odp_sched_capabilities()`.
+
+Capabilities moved include `max_ordered_locks`, `max_sched_groups`, and
+`sched_prios`. The `max_sched_groups` capability is renamed `max_groups`. In
+addition, `max_queues`, `max_queue_size`, and the support capabilities for
+lock free and wait free non blocking queues is now part of the scheduler
+capabilities.
+
+In support of flow aware scheduling mode, the `max_flows` scheduler capability
+is renamed `max_flow_id`. A value of 0 indicates that flow aware mode
+scheduling is not available in this ODP implementation.
+
+=== Test/Validation Improvements
+==== Travis readability improvement
+The "BUILD_ONLY` environment variable has been renamed `CHECK` for improved
+output readability.
+
+==== Flow aware scheduler testing
+As part of flow aware mode, scheduler validation tests will now test this mode
+if `odp_schedule_capability()` indicates that flow-aware mode is supported.
+
+=== Bug Fixes
+==== Unnumbered Bugs/Issues
+
+* Latest version of netmap `nm_ring_empty()` implementation has changed.
+PktIO netmap support updated to support this as well as previous releases.
+
+* Improved compatibility of PktIO socket support with latest versions
+of the clang compiler.
+
+* Add match pattern for missing DPDK PMD drivers for improved compatibility.
+
== OpenDataPlane (1.20.0.0)
=== Summary of Changes
ODP v1.20.0.0 is a refresh of ODP, incorporating significant configurability
-----------------------------------------------------------------------
Summary of changes:
CHANGELOG | 102 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 102 insertions(+)
hooks/post-receive
--