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, api-next has been updated
via 525f6e6b3adf629df89d195fbb1959b40ecc8a0d (commit)
via d044b11d7010cc328cca986849a1414c1e46fb53 (commit)
via 9c0ad641faeabbede48fd09b7c91f753186163bd (commit)
via d7913a845c72753758121111cc5da381198ba0f6 (commit)
from 43dd326bf4777a01a0fa75c9c9055376d246e44b (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 525f6e6b3adf629df89d195fbb1959b40ecc8a0d
Author: Petri Savolainen <petri.savolainen(a)linaro.org>
Date: Tue Dec 18 16:37:23 2018 +0200
linux-gen: sched: dummy flow aware implementation
Implement flow aware scheduling API with least possible changes.
Scheduler does not care about flow IDs, but synchronizes still
on queue level. This is functionally correct, but does provide
parallelism between different flows of a queue. So, application
does not benefit from using flows, but functions correctly.
Maximum number of flows per queue is limited to 256 just to
minimize number of bytes used in buffer header.
Signed-off-by: Petri Savolainen <petri.savolainen(a)linaro.org>
Reviewed-by: Dmitry Eremin-Solenikov <dmitry.ereminsolenikov(a)linaro.org>
Reviewed-by: Bill Fischofer <bill.fischofer(a)linaro.org>
Signed-off-by: Maxim Uvarov <maxim.uvarov(a)linaro.org>
diff --git a/platform/linux-generic/include/odp_buffer_internal.h b/platform/linux-generic/include/odp_buffer_internal.h
index c6e1345d..5e0b2bcc 100644
--- a/platform/linux-generic/include/odp_buffer_internal.h
+++ b/platform/linux-generic/include/odp_buffer_internal.h
@@ -54,6 +54,9 @@ ODP_STATIC_ASSERT(ODP_CONFIG_POOLS <= (0xFF + 1), "TOO_MANY_POOLS");
/* Check that buffer index fit into bit field */
ODP_STATIC_ASSERT(CONFIG_POOL_MAX_NUM <= (0xFFFFFF + 1), "TOO_LARGE_POOL");
+/* Type size limits number of flow IDs supported */
+#define BUF_HDR_MAX_FLOW_ID 255
+
/* Common buffer header */
struct ODP_ALIGNED_CACHE odp_buffer_hdr_t {
/* Combined pool and buffer index */
@@ -94,6 +97,9 @@ struct ODP_ALIGNED_CACHE odp_buffer_hdr_t {
/* Event type. Maybe different than pool type (crypto compl event) */
int8_t event_type;
+ /* Event flow id */
+ uint8_t flow_id;
+
/* Initial buffer tail pointer */
uint8_t *buf_end;
@@ -120,6 +126,20 @@ static inline odp_buffer_t buf_from_buf_hdr(odp_buffer_hdr_t *hdr)
return (odp_buffer_t)hdr;
}
+static inline uint32_t event_flow_id(odp_event_t ev)
+{
+ odp_buffer_hdr_t *buf_hdr = (odp_buffer_hdr_t *)(uintptr_t)ev;
+
+ return buf_hdr->flow_id;
+}
+
+static inline void event_flow_id_set(odp_event_t ev, uint32_t flow_id)
+{
+ odp_buffer_hdr_t *buf_hdr = (odp_buffer_hdr_t *)(uintptr_t)ev;
+
+ buf_hdr->flow_id = flow_id;
+}
+
#ifdef __cplusplus
}
#endif
diff --git a/platform/linux-generic/odp_event.c b/platform/linux-generic/odp_event.c
index bdde93e1..efcbc1e2 100644
--- a/platform/linux-generic/odp_event.c
+++ b/platform/linux-generic/odp_event.c
@@ -59,17 +59,14 @@ int odp_event_type_multi(const odp_event_t event[], int num,
return i;
}
-/* For now ODP generic does not support flow awareness,
- * so all flow ids are zero. */
-uint32_t odp_event_flow_id(odp_event_t event ODP_UNUSED)
+uint32_t odp_event_flow_id(odp_event_t event)
{
- return 0;
+ return event_flow_id(event);
}
-void odp_event_flow_id_set(odp_event_t event ODP_UNUSED,
- uint32_t flow_id ODP_UNUSED)
+void odp_event_flow_id_set(odp_event_t event, uint32_t flow_id)
{
- /* Do nothing */
+ event_flow_id_set(event, flow_id);
}
void odp_event_free(odp_event_t event)
diff --git a/platform/linux-generic/odp_schedule_basic.c b/platform/linux-generic/odp_schedule_basic.c
index e5a9cfc7..6176c951 100644
--- a/platform/linux-generic/odp_schedule_basic.c
+++ b/platform/linux-generic/odp_schedule_basic.c
@@ -1579,6 +1579,7 @@ static int schedule_capability(odp_schedule_capability_t *capa)
capa->max_prios = schedule_num_prio();
capa->max_queues = ODP_CONFIG_QUEUES - NUM_INTERNAL_QUEUES;
capa->max_queue_size = queue_glb->config.max_queue_size;
+ capa->max_flow_id = BUF_HDR_MAX_FLOW_ID;
return 0;
}
commit d044b11d7010cc328cca986849a1414c1e46fb53
Author: Petri Savolainen <petri.savolainen(a)linaro.org>
Date: Tue Dec 18 09:55:12 2018 +0200
validation: sched: add flow aware test case
Move scheduler config call into the test suite as some test
cases need non-default config. Scheduler configuration can be
set only once, so all test cases share the config. Flow aware
mode is enabled, when capability allows that.
Signed-off-by: Petri Savolainen <petri.savolainen(a)linaro.org>
Reviewed-by: Dmitry Eremin-Solenikov <dmitry.ereminsolenikov(a)linaro.org>
Reviewed-by: Bill Fischofer <bill.fischofer(a)linaro.org>
Signed-off-by: Maxim Uvarov <maxim.uvarov(a)linaro.org>
diff --git a/test/validation/api/scheduler/scheduler.c b/test/validation/api/scheduler/scheduler.c
index 27377580..bdcd7b2d 100644
--- a/test/validation/api/scheduler/scheduler.c
+++ b/test/validation/api/scheduler/scheduler.c
@@ -8,6 +8,7 @@
#include <odp_api.h>
#include "odp_cunit_common.h"
+#include <odp/helper/odph_api.h>
#define MAX_WORKERS_THREADS 32
#define MAX_ORDERED_LOCKS 2
@@ -24,6 +25,9 @@
#define TEST_QUEUE_SIZE_NUM_EV 50
+#define MAX_FLOWS 16
+#define FLOW_TEST_NUM_EV (10 * MAX_FLOWS)
+
#define GLOBALS_SHM_NAME "test_globals"
#define MSG_POOL_NAME "msg_pool"
#define QUEUE_CTX_POOL_NAME "queue_ctx_pool"
@@ -62,6 +66,7 @@ typedef struct {
odp_pool_t pool;
odp_pool_t queue_ctx_pool;
uint32_t max_sched_queue_size;
+ uint64_t num_flows;
odp_ticketlock_t lock;
odp_spinlock_t atomic_lock;
struct {
@@ -1846,6 +1851,32 @@ static int scheduler_suite_init(void)
odp_pool_t pool;
thread_args_t *args;
odp_pool_param_t params;
+ uint64_t num_flows;
+ odp_schedule_capability_t sched_capa;
+ odp_schedule_config_t sched_config;
+
+ if (odp_schedule_capability(&sched_capa)) {
+ printf("odp_schedule_capability() failed\n");
+ return -1;
+ }
+
+ num_flows = 0;
+ odp_schedule_config_init(&sched_config);
+
+ /* Enable flow aware scheduling */
+ if (sched_capa.max_flow_id > 0) {
+ num_flows = MAX_FLOWS;
+ if ((MAX_FLOWS - 1) > sched_capa.max_flow_id)
+ num_flows = sched_capa.max_flow_id + 1;
+
+ sched_config.max_flow_id = num_flows - 1;
+ }
+
+ /* Configure the scheduler. All test cases share the config. */
+ if (odp_schedule_config(&sched_config)) {
+ printf("odp_schedule_config() failed.\n");
+ return -1;
+ }
odp_pool_param_init(¶ms);
params.buf.size = BUF_SIZE;
@@ -1872,6 +1903,8 @@ static int scheduler_suite_init(void)
memset(globals, 0, sizeof(test_globals_t));
+ globals->num_flows = num_flows;
+
globals->num_workers = odp_cpumask_default_worker(&mask, 0);
if (globals->num_workers > MAX_WORKERS)
globals->num_workers = MAX_WORKERS;
@@ -1975,6 +2008,127 @@ static int scheduler_suite_term(void)
return 0;
}
+static int check_flow_aware_support(void)
+{
+ if (globals->num_flows == 0) {
+ printf("\nTest: scheduler_test_flow_aware: SKIPPED\n");
+ return ODP_TEST_INACTIVE;
+ }
+
+ return ODP_TEST_ACTIVE;
+}
+
+static void scheduler_test_flow_aware(void)
+{
+ odp_schedule_capability_t sched_capa;
+ odp_schedule_config_t sched_config;
+ odp_pool_param_t pool_param;
+ odp_pool_t pool;
+ odp_queue_param_t queue_param;
+ odp_queue_t queue, from;
+ uint32_t j, queue_size, num, num_flows, flow_id;
+ odp_buffer_t buf;
+ odp_event_t ev;
+ int i, ret;
+ uint32_t flow_stat[MAX_FLOWS];
+ odp_schedule_sync_t sync[] = {ODP_SCHED_SYNC_PARALLEL,
+ ODP_SCHED_SYNC_ATOMIC,
+ ODP_SCHED_SYNC_ORDERED};
+
+ /* Test should be skipped when no flows */
+ CU_ASSERT_FATAL(globals->num_flows);
+ CU_ASSERT_FATAL(odp_schedule_capability(&sched_capa) == 0);
+
+ num_flows = globals->num_flows;
+
+ queue_size = FLOW_TEST_NUM_EV;
+ odp_schedule_config_init(&sched_config);
+ if (sched_config.queue_size &&
+ queue_size > sched_config.queue_size)
+ queue_size = sched_config.queue_size;
+
+ odp_pool_param_init(&pool_param);
+ pool_param.buf.size = 100;
+ pool_param.buf.align = 0;
+ pool_param.buf.num = FLOW_TEST_NUM_EV;
+ pool_param.type = ODP_POOL_BUFFER;
+
+ pool = odp_pool_create("test_flow_aware", &pool_param);
+
+ CU_ASSERT_FATAL(pool != ODP_POOL_INVALID);
+
+ for (i = 0; i < 3; i++) {
+ memset(flow_stat, 0, sizeof(flow_stat));
+ flow_id = 0;
+
+ 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 = sync[i];
+ queue_param.sched.group = ODP_SCHED_GROUP_ALL;
+ queue_param.size = queue_size;
+
+ queue = odp_queue_create("test_flow_aware", &queue_param);
+
+ CU_ASSERT_FATAL(queue != ODP_QUEUE_INVALID);
+
+ 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);
+
+ odp_event_flow_id_set(ev, flow_id);
+ CU_ASSERT(odp_event_flow_id(ev) == flow_id);
+
+ ret = odp_queue_enq(queue, ev);
+ CU_ASSERT(ret == 0);
+
+ if (ret) {
+ odp_event_free(ev);
+ continue;
+ }
+
+ flow_stat[flow_id]++;
+
+ flow_id++;
+ if (flow_id == num_flows)
+ flow_id = 0;
+ }
+
+ num = 0;
+ for (j = 0; j < 100 * FLOW_TEST_NUM_EV; j++) {
+ ev = odp_schedule(&from, ODP_SCHED_NO_WAIT);
+
+ if (ev == ODP_EVENT_INVALID)
+ continue;
+
+ CU_ASSERT(from == queue);
+
+ flow_id = odp_event_flow_id(ev);
+ flow_stat[flow_id]--;
+
+ odp_event_free(ev);
+ num++;
+ }
+
+ CU_ASSERT(num == queue_size);
+
+ for (j = 0; j < num_flows; j++) {
+ CU_ASSERT(flow_stat[j] == 0);
+ if (flow_stat[j])
+ printf("flow id %" PRIu32 ", missing %" PRIi32
+ " events\n", j, flow_stat[j]);
+ }
+
+ drain_queues();
+ CU_ASSERT_FATAL(odp_queue_destroy(queue) == 0);
+ }
+
+ CU_ASSERT(odp_pool_destroy(pool) == 0);
+}
+
+/* Default scheduler config */
odp_testinfo_t scheduler_suite[] = {
ODP_TEST_INFO(scheduler_test_capa),
ODP_TEST_INFO(scheduler_test_wait_time),
@@ -1985,6 +2139,8 @@ odp_testinfo_t scheduler_suite[] = {
ODP_TEST_INFO(scheduler_test_groups),
ODP_TEST_INFO(scheduler_test_pause_resume),
ODP_TEST_INFO(scheduler_test_ordered_lock),
+ ODP_TEST_INFO_CONDITIONAL(scheduler_test_flow_aware,
+ check_flow_aware_support),
ODP_TEST_INFO(scheduler_test_parallel),
ODP_TEST_INFO(scheduler_test_atomic),
ODP_TEST_INFO(scheduler_test_ordered),
@@ -2025,6 +2181,32 @@ odp_suiteinfo_t scheduler_suites[] = {
ODP_SUITE_INFO_NULL,
};
+static int global_init(odp_instance_t *inst)
+{
+ odp_init_t init_param;
+ odph_helper_options_t helper_options;
+
+ if (odph_options(&helper_options)) {
+ fprintf(stderr, "error: odph_options() failed.\n");
+ return -1;
+ }
+
+ odp_init_param_init(&init_param);
+ init_param.mem_model = helper_options.mem_model;
+
+ if (0 != odp_init_global(inst, &init_param, NULL)) {
+ fprintf(stderr, "error: odp_init_global() failed.\n");
+ return -1;
+ }
+
+ if (0 != odp_init_local(*inst, ODP_THREAD_CONTROL)) {
+ fprintf(stderr, "error: odp_init_local() failed.\n");
+ return -1;
+ }
+
+ return 0;
+}
+
int main(int argc, char *argv[])
{
int ret;
@@ -2033,6 +2215,7 @@ int main(int argc, char *argv[])
if (odp_cunit_parse_options(argc, argv))
return -1;
+ odp_cunit_register_global_init(global_init);
ret = odp_cunit_register(scheduler_suites);
if (ret == 0)
commit 9c0ad641faeabbede48fd09b7c91f753186163bd
Author: Petri Savolainen <petri.savolainen(a)linaro.org>
Date: Tue Dec 18 12:56:10 2018 +0200
linux-gen: sched: check that config has been done
Check always on slow path functions that schedule config has
been called. Fast path functions do the check only when
debugging is enabled.
Signed-off-by: Petri Savolainen <petri.savolainen(a)linaro.org>
Reviewed-by: Dmitry Eremin-Solenikov <dmitry.ereminsolenikov(a)linaro.org>
Reviewed-by: Bill Fischofer <bill.fischofer(a)linaro.org>
Signed-off-by: Maxim Uvarov <maxim.uvarov(a)linaro.org>
diff --git a/platform/linux-generic/odp_schedule_basic.c b/platform/linux-generic/odp_schedule_basic.c
index 48f232e6..e5a9cfc7 100644
--- a/platform/linux-generic/odp_schedule_basic.c
+++ b/platform/linux-generic/odp_schedule_basic.c
@@ -597,7 +597,10 @@ static int schedule_init_queue(uint32_t queue_index,
int i;
int prio = prio_level_from_api(sched_param->prio);
- ODP_ASSERT(_odp_schedule_configured);
+ if (_odp_schedule_configured == 0) {
+ ODP_ERR("Scheduler has not been configured\n");
+ return -1;
+ }
pri_set_queue(queue_index, prio);
sched->queue[queue_index].grp = sched_param->group;
diff --git a/platform/linux-generic/odp_schedule_if.c b/platform/linux-generic/odp_schedule_if.c
index cb52f155..ba903e58 100644
--- a/platform/linux-generic/odp_schedule_if.c
+++ b/platform/linux-generic/odp_schedule_if.c
@@ -24,10 +24,7 @@ extern const schedule_api_t schedule_scalable_api;
const schedule_fn_t *sched_fn;
const schedule_api_t *sched_api;
-
-#ifdef ODP_DEBUG
int _odp_schedule_configured;
-#endif
uint64_t odp_schedule_wait_time(uint64_t ns)
{
@@ -51,7 +48,10 @@ int odp_schedule_config(const odp_schedule_config_t *config)
int ret;
odp_schedule_config_t defconfig;
- ODP_ASSERT(!_odp_schedule_configured);
+ if (_odp_schedule_configured) {
+ ODP_ERR("Scheduler has been configured already\n");
+ return -1;
+ }
if (!config) {
odp_schedule_config_init(&defconfig);
@@ -59,10 +59,9 @@ int odp_schedule_config(const odp_schedule_config_t *config)
}
ret = sched_api->schedule_config(config);
-#ifdef ODP_DEBUG
+
if (ret >= 0)
_odp_schedule_configured = 1;
-#endif
return ret;
}
diff --git a/platform/linux-generic/odp_schedule_sp.c b/platform/linux-generic/odp_schedule_sp.c
index eec88a60..e7b37895 100644
--- a/platform/linux-generic/odp_schedule_sp.c
+++ b/platform/linux-generic/odp_schedule_sp.c
@@ -375,10 +375,10 @@ static int init_queue(uint32_t qi, const odp_schedule_param_t *sched_param)
odp_schedule_group_t group = sched_param->group;
int prio = 0;
-#ifdef ODP_DEBUG
- if (!_odp_schedule_configured)
- ODP_ABORT("Scheduler not configured!\n");
-#endif
+ if (_odp_schedule_configured == 0) {
+ ODP_ERR("Scheduler has not been configured\n");
+ return -1;
+ }
if (group < 0 || group >= NUM_GROUP)
return -1;
commit d7913a845c72753758121111cc5da381198ba0f6
Author: Petri Savolainen <petri.savolainen(a)linaro.org>
Date: Mon Dec 17 16:03:02 2018 +0200
api: sched: max_flow_id capability
Change max number of flows to max flow ID. This way implementation
can utilize full 32 bits of flow ID space.
Also, note explicitly that odp_schedule_config() must be called
only once.
Signed-off-by: Petri Savolainen <petri.savolainen(a)linaro.org>
Reviewed-by: Dmitry Eremin-Solenikov <dmitry.ereminsolenikov(a)linaro.org>
Reviewed-by: Bill Fischofer <bill.fischofer(a)linaro.org>
Signed-off-by: Maxim Uvarov <maxim.uvarov(a)linaro.org>
diff --git a/include/odp/api/spec/schedule.h b/include/odp/api/spec/schedule.h
index 43292124..fa66f260 100644
--- a/include/odp/api/spec/schedule.h
+++ b/include/odp/api/spec/schedule.h
@@ -271,8 +271,8 @@ void odp_schedule_config_init(odp_schedule_config_t *config);
*
* Initialize and configure scheduler with global configuration options
* to schedule events across different scheduled queues.
- * This function must be called before scheduler is used (any other scheduler
- * function is called except odp_schedule_capability() and
+ * This function must be called only once and before scheduler is used
+ * (any other scheduler function is called except odp_schedule_capability() and
* odp_schedule_config_init()) or any queues are created (by application itself
* or by other ODP modules).
* An application can pass NULL value to use default configuration. It will
diff --git a/include/odp/api/spec/schedule_types.h b/include/odp/api/spec/schedule_types.h
index 3648c64e..2acec0db 100644
--- a/include/odp/api/spec/schedule_types.h
+++ b/include/odp/api/spec/schedule_types.h
@@ -196,12 +196,13 @@ typedef struct odp_schedule_capability_t {
* events. */
uint32_t max_queue_size;
- /** Maximum supported flows per queue.
- * Specifies the maximum number of flows per queue supported by the
- * implementation. A value of 0 indicates flow aware mode is not
- * supported.
- */
- uint32_t max_flows;
+ /** Maximum flow ID per queue
+ *
+ * Valid flow ID range in flow aware mode of scheduling is from 0 to
+ * this maximum value. So, maximum number of flows per queue is this
+ * value plus one. A value of 0 indicates that flow aware mode is not
+ * supported. */
+ uint32_t max_flow_id;
/** Lock-free (ODP_NONBLOCKING_LF) queues support.
* The specification is the same as for the blocking implementation. */
@@ -230,21 +231,24 @@ typedef struct odp_schedule_config_t {
*/
uint32_t queue_size;
- /** Number of flows per queue to be supported. Scheduler enables flow
- * aware mode when flow count is configured greater than 1 (up to
- * 'max_flows' capability).
+ /** Maximum flow ID per queue
*
- * Flows are lightweight entities and events can be assigned to
- * specific flows by the application using odp_event_flow_id_set()
- * before enqueuing the event into the scheduler. This value is ignored
- * unless scheduler supports flow aware mode.
+ * This value must not exceed 'max_flow_id' capability. Flow aware
+ * mode of scheduling is enabled when the value is greater than 0.
+ * The default value is 0.
*
- * This number should be less than maximum flow supported by the
- * implementation. The default value is zero.
+ * Application can assign events to specific flows by calling
+ * odp_event_flow_id_set() before enqueuing events into a scheduled
+ * queue. When in flow aware mode, the event flow id value affects
+ * scheduling of the event and synchronization is maintained per flow
+ * within each queue.
*
- * @see odp_schedule_capability_t
+ * Depeding on implementation, there may be much more flows supported
+ * than queues, as flows are lightweight entities.
+ *
+ * @see odp_schedule_capability_t, odp_event_flow_id()
*/
- uint32_t num_flows;
+ uint32_t max_flow_id;
} odp_schedule_config_t;
-----------------------------------------------------------------------
Summary of changes:
include/odp/api/spec/schedule.h | 4 +-
include/odp/api/spec/schedule_types.h | 38 +++--
.../linux-generic/include/odp_buffer_internal.h | 20 +++
platform/linux-generic/odp_event.c | 11 +-
platform/linux-generic/odp_schedule_basic.c | 6 +-
platform/linux-generic/odp_schedule_if.c | 11 +-
platform/linux-generic/odp_schedule_sp.c | 8 +-
test/validation/api/scheduler/scheduler.c | 183 +++++++++++++++++++++
8 files changed, 244 insertions(+), 37 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 83eef57df54653245402237837c9e95d1bf3aff4 (commit)
from 6c06c34a051342b2d25444ac65348acc30828b11 (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 83eef57df54653245402237837c9e95d1bf3aff4
Author: Matias Elo <matias.elo(a)nokia.com>
Date: Fri Dec 14 10:40:34 2018 +0200
linux-gen: dpdk: fix build with no pmd drivers
Match pattern was added to DPDK_PMDS if no pmd drivers were found.
Signed-off-by: Matias Elo <matias.elo(a)nokia.com>
Reviewed-by: Bill Fischofer <bill.fischofer(a)linaro.org>
Signed-off-by: Maxim Uvarov <maxim.uvarov(a)linaro.org>
diff --git a/m4/odp_dpdk.m4 b/m4/odp_dpdk.m4
index 1072bf2d..2f6662e2 100644
--- a/m4/odp_dpdk.m4
+++ b/m4/odp_dpdk.m4
@@ -6,6 +6,10 @@ AC_DEFUN([ODP_DPDK_PMDS], [dnl
AS_VAR_SET([DPDK_PMDS], ["-Wl,--whole-archive,"])
for filename in "$1"/librte_pmd_*.a; do
cur_driver=`basename "$filename" .a | sed -e 's/^lib//'`
+
+# Match pattern is filled to 'filename' once if no matches are found
+AS_IF([test "x$cur_driver" = "xrte_pmd_*"], [break])
+
AS_VAR_APPEND([DPDK_PMDS], [-l$cur_driver,])
AS_CASE([$cur_driver],
[rte_pmd_nfp], [AS_VAR_APPEND([DPDK_LIBS], [" -lm"])],
-----------------------------------------------------------------------
Summary of changes:
m4/odp_dpdk.m4 | 4 ++++
1 file changed, 4 insertions(+)
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 17a547b56ac5897f0424752b40b2ba07f4d999cb (commit)
from d01e6126c7e91d3c660033cf970f6094ea080abb (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 17a547b56ac5897f0424752b40b2ba07f4d999cb
Author: Matias Elo <matias.elo(a)nokia.com>
Date: Mon Dec 17 09:18:57 2018 +0200
linux-gen: socket_mmap: fix build with older clang versions
Olders clang versions (at least 3.4.2 used by CentOS) don't handle
frame_map.v2.s_ll definition properly and throw invalid error.
Signed-off-by: Matias Elo <matias.elo(a)nokia.com>
Reviewed-by: Bill Fischofer <bill.fischofer(a)linaro.org>
Signed-off-by: Maxim Uvarov <maxim.uvarov(a)linaro.org>
diff --git a/platform/linux-generic/pktio/socket_mmap.c b/platform/linux-generic/pktio/socket_mmap.c
index 03085728..86115228 100644
--- a/platform/linux-generic/pktio/socket_mmap.c
+++ b/platform/linux-generic/pktio/socket_mmap.c
@@ -103,9 +103,8 @@ static int set_pkt_sock_fanout_mmap(pkt_sock_mmap_t *const pkt_sock,
union frame_map {
struct {
struct tpacket2_hdr ODP_ALIGNED(TPACKET_ALIGNMENT) tp_h;
- struct sockaddr_ll
- ODP_ALIGNED(TPACKET_ALIGN(sizeof(struct tpacket2_hdr)))
- s_ll;
+ struct sockaddr_ll ODP_ALIGNED(TPACKET_ALIGN(sizeof(struct
+ tpacket2_hdr))) s_ll;
} *v2;
void *raw;
-----------------------------------------------------------------------
Summary of changes:
platform/linux-generic/pktio/socket_mmap.c | 5 ++---
1 file changed, 2 insertions(+), 3 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 d01e6126c7e91d3c660033cf970f6094ea080abb (commit)
from ec5066a3430e31a87727ac4aea5793253e5ee843 (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 d01e6126c7e91d3c660033cf970f6094ea080abb
Author: Matias Elo <matias.elo(a)nokia.com>
Date: Wed Dec 12 12:17:34 2018 +0200
linux-gen: netmap: update ring->head in netmap_recv_desc()
Netmap function nm_ring_empty() implementation has been modified to use
ring->head instead of ring->cur.
Reported-by: Jari Mustajärvi <jari.mustajarvi(a)nokia-bell-labs.com>
Signed-off-by: Matias Elo <matias.elo(a)nokia.com>
Reviewed-by: Bill Fischofer <bill.fischofer(a)linaro.org>
Signed-off-by: Maxim Uvarov <maxim.uvarov(a)linaro.org>
diff --git a/platform/linux-generic/pktio/netmap.c b/platform/linux-generic/pktio/netmap.c
index 53d3e58c..8fb23153 100644
--- a/platform/linux-generic/pktio/netmap.c
+++ b/platform/linux-generic/pktio/netmap.c
@@ -842,8 +842,8 @@ static inline int netmap_recv_desc(pktio_entry_t *pktio_entry,
"B\n", ring->slot[slot_id].len);
}
ring->cur = nm_ring_next(ring, slot_id);
+ ring->head = ring->cur;
}
- ring->head = ring->cur;
ring_id++;
}
desc->cur_rx_ring = ring_id;
-----------------------------------------------------------------------
Summary of changes:
platform/linux-generic/pktio/netmap.c | 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, api-next has been updated
via a110685b8357276cb4a63ebc6ff421f42f461d94 (commit)
from bc86441b2d02dd518e710f1d9e6936525530c1bb (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 a110685b8357276cb4a63ebc6ff421f42f461d94
Author: Dmitry Eremin-Solenikov <dmitry.ereminsolenikov(a)linaro.org>
Date: Fri Nov 23 03:24:39 2018 +0300
linux-gen: event: support flow-awareness API
Signed-off-by: Dmitry Eremin-Solenikov <dmitry.ereminsolenikov(a)linaro.org>
Reviewed-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/platform/linux-generic/odp_event.c b/platform/linux-generic/odp_event.c
index bb378528..bdde93e1 100644
--- a/platform/linux-generic/odp_event.c
+++ b/platform/linux-generic/odp_event.c
@@ -59,6 +59,19 @@ int odp_event_type_multi(const odp_event_t event[], int num,
return i;
}
+/* For now ODP generic does not support flow awareness,
+ * so all flow ids are zero. */
+uint32_t odp_event_flow_id(odp_event_t event ODP_UNUSED)
+{
+ return 0;
+}
+
+void odp_event_flow_id_set(odp_event_t event ODP_UNUSED,
+ uint32_t flow_id ODP_UNUSED)
+{
+ /* Do nothing */
+}
+
void odp_event_free(odp_event_t event)
{
switch (odp_event_type(event)) {
-----------------------------------------------------------------------
Summary of changes:
platform/linux-generic/odp_event.c | 13 +++++++++++++
1 file changed, 13 insertions(+)
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.20.0.0 has been created
at 503236d6b9058a45ad87881f2d6e7893298b64fc (tag)
tagging ec5066a3430e31a87727ac4aea5793253e5ee843 (commit)
replaces v1.19.0.2_tigermoth
tagged by Maxim Uvarov
on Tue Dec 4 09:52:06 2018 +0300
- Log -----------------------------------------------------------------
== OpenDataPlane (1.20.0.0)
=== Summary of Changes
ODP v1.20.0.0 is a refresh of ODP, incorporating significant configurability
and performance improvements as well as new APIs and API restructures.
==== APIs
===== Symbol `ODP_SHM_NULL` Removed.
An invalid `odp_shm_t` has the value `ODP_SHM_INVALID`, consistent with other
ODP types. The legacy synonym `ODP_SHM_NULL` is now removed for consistency.
===== New 3GPP Crypto Algorithm Support
New support for 3GPP crypto algorithms is added by defining symbols for
* `ODP_CIPHER_ALG_KASUMI_F8`
* `ODP_CIPHER_ALG_SNOW3G_UEA2`
* `ODP_CIPHER_ALG_ZUC_EEA3`
In addition new authentication algorithm symbols are defined for
* `ODP_AUTH_ALG_KASUMI_F9`
* `ODP_AUTH_ALG_SNOW3G_UIA2`
* `ODP_AUTH_ALG_ZUC_EIA3`
These values are returned as ODP capabilities as well as being accepted in
crypto session creation for implementations that indicate support for them.
===== Crypto Capability for Bitwise Operation
The new `bit_mode` capability Boolean is added to the
`odp_crypto_cipher_capability_t` struct to indicate that an implementation
supports operating in bit mode. When operating in bit
mode, field offsets and lengths are expressed in terms of bits rather than
bytes. However, such lengths must always be specified in multiples of 8.
===== Improved Crypto Spec Documentation
The ODP crypto API specification is tightened to specify default values for
cipher and authentication algorithms. Also documented when key and IV
parameters need to be set.
===== IPsec Extensions
IPsec requires "salt" (extra keying material) when the GMAC authentication
algorithm is used. To accommodate this the `auth_key_extra` field is added to
the `odp_ipsec_crypto_param_t` struct and documentation is added clarifying
when this field is needed and how it should be used.
===== Classifier Type Rename
The `odp_pmr_t` type name for an invalid value is renamed from `ODP_PMR_INVAL`
to `ODP_PMR_INVALID` for consistency with the rest of ODP type names. The old
symbol is still available when ODP is configured with
`--enable-deprecated`.
===== New API for Packet Event Subtypes
The `odp_packet_subtype()` API is added that returns the subtype of a packet
event directly.
===== Streamlined Packet Parsing Results
The `odp_packet_parse_result()` API is added that returns the result of
packet parsing as a single `odp_packet_parse_result_t` struct. This can
offer efficiency improvements for applications that need all parse results
rather than making individual parse result calls.
===== PktIO Extensions to Support per-Queue Configuration
PktIO interfaces support multiple input queues to enable increased parallelism
in I/O processing. Previously, all of these input queues were required to
belong to the same scheduler group. The `odp_pktin_queue_param_t` struct is
now extended with an optional `odp_pktin_queue_param_ovr_t` struct that
permits individual pktin queues to be assigned to separate scheduler groups.
This may permit improved performance for advanced application use cases.
===== Timer Pool Capabilities
The `odp_timer_capability_t` struct is extended to return three additional
pieces of information:
`max_pools_combined`::
The total number of timer pools that can be created combining different
clock sources
`max_pools`::
The maximum number of timer pools for a given clock source.
`max_timers`::
The maximum number of timers in a single pool. A zero value means number is
limited only by available memory.
===== Add Scheduler mix/max/default Priority Functions
Three new APIs: `odp_schedule_max_prio()`, `odp_schedule_min_prio()`, and
`odp_schedule_default_prio()` are added that return the min, max, and default
values specified for the `prio` field in the `odp_schedule_param_t` struct.
With the introduction of these scheduling priority functions the previously
defined macros (`ODP_SCHED_PRIO_HIGHEST`, `ODP_SCHED_PRIO_NORMAL`, and
`ODP_SCHED_PRIO_LOWEST`) are now deprecated and should no longer be used.
===== Specification of `odp_schedule_prio_t` as an `int`
Previously, the `odp_schedule_prio_t` type definition was left to each
implementation. With the addition of explicit schedule priority ranges, this
type is now specified to be an `int` to permit efficient implementation
(including inlining) of these functions.
====== New Scheduler APIs
The new scheduler APIs `odp_schedule_multi_wait()` and
`odp_schedule_multi_no_wait()` are added to provide more efficiently
implementable versions of these functions. The existing scheduler APIs remain
unchanged. These new APIs can simply provide a fastpath for some
applications/implementations as an alternative to specifying a parameter on
`odp_schedule_multi()`.
===== Memory Model in `odp_init_global()`
The `odp_init_t` parameter passed to `odp_init_global()` is extended to
add the `mem_model` field. This field is defined by the new `odp_mem_model_t`
struct and is used to specify whether the application will be using a
thread (`ODP_MEM_MODEL_THREAD`) or process (`ODP_MEM_MODEL_PROCESS`)
memory model. The default is a thread model is used for compatibility with
previous levels of ODP.
==== ABI Changes
A number of changes to the ODP ABI have also been made in this release to
improve application binary portability.
===== Strong Typing for Timer Pools
The `odp_timer_pool_t` is now strongly typed.
===== Consistent Initialization
The values of the various `ODP_xxx_INVALID` symbols for ODP abstract types in
the `odp-linux` reference implementation are now consistently zeros. This
reduces errors and improves portability.
=== Implementation Improvements
==== Configuration File
A new configuration file mechanism is introduced that makes use of
https://www.hyperrealm.com/libconfig/libconfig_manual.html[libconfig] to
enable various runtime ODP parameters to be specified dynamically.
Default configuration values for the `odp-linux` reference implementation are
contained in the `config/odp-linux-generic.conf` file. Users may override
these default values by supplying their own configuration file. At
`odp_init_global()` time, if the `ODP_CONFIG_FILE` environment variable is set,
this is used to locate the path to the override configuration file.
==== Process Mode Support
The `odp-linux` reference implementation now supports applications that run in
process mode (`mem_model` = `ODP_MEM_MODEL_PROCESS`) as well as the default
thread mode. This support only applies within a single ODP instance, so any
`fork()` calls must be done only _after_ `odp_init_global()` has been called
to initialize ODP on a root process.
==== Removal of `iQuery` Scheduler
The `iQuery` scheduler is removed from the `odp-linux` reference
implementation, as it offers no performance advantages and has not seen
application use.
==== Number of CPUs
The `odp-linux` reference implementation now supports up to 256 CPUs by
default (increased from 128).
==== Support for Large Burst Sizes
The `odp-linux` reference implementation now supports large burst sizes for
both I/O and non-I/O scheduled events. Large bursts (when available) are
received directly to the application without any stashing for improved
throughput. Burst sizes are configurable via the new configuration file
mechanism, as described above.
==== `--without-openssl` Warnings
When building `odp-linux` using `--without-openssl` a warning will be issued
cautioning that strong cryptography will not be available.
==== Inline Queue Enq/Deq APIs
The various enq/deq APIs are now subject to inlining when `odp-linux` is
built with `--disable-abi-compat`.
==== Configurable Timer Controls
Inline timers are now controlled via a config file option. Timer polling
frequency is similarly controlled via the config file.
==== Huge Page Configuration
The config file is now used to specify the huge page usage limit.
==== Single and Multi-Consumer/Producer Rings
The queue implementation in `odp-linux` now automatically makes use of
optimized single and multi-consumer/producer rings to significantly speed
up enq/deq processing.
==== `odp_shm_print_all()` Improvements
The output from `odp_shm_print_all()` is reworked to provide more useful
and comprehensive shared memory usage information in `odp-linux`.
==== IPsec Improvements
SA lifetime checking is now more scalable to multiple threads. This
significantly reduces overhead for multithreaded IPsec applications.
==== Native Builds
When running in non-ABI compatibility mode, `odp-linux` now enables
native machine-specific optimizations for the CPU architecture of the
local machine.
=== Validation Test Improvements
==== SCTP Test Packets
SCTP test packets are now used in parser testing. SCTP headers are added to
ODP and ODP helpers and SCTP checksums are now inserted and verified as part
of validation testing.
==== `odp_packet_reset()` Test
The packet validation test suite now properly tests `odp_packet_reset()`.
=== Helper Changes
In support of process mode, ODP helper functions have been changed to
better match these new capabilities
==== New `enum`
The `odph_linux_thread_type_t enum` has been replaced with the new
`odp_mem_model_t` type.
==== Helper Options
The new `odph_options()` getter function is added that returns
applicable options in effect via the new `odph_helper_options_t` struct.
This currently includes the memory model (thread or process) that is in use.
==== SCTP Helpers
The new helper APIs `odph_sctp_chksum_set()` and `odph_sctp_chksum_verify()`
are added to facilitate working with SCTP packet checksums.
=== Performance Test Improvements
==== Pool Performance
A new `odp_pool_perf` test has been added that stress-tests ODP pool
functions in a multithreaded environment to generate performance statistics.
==== Scheduler Performance
A new `odp_sched_perf` test has been added that stress-tests the scheduler
in a multithreaded environment.
==== CPU Performance
A new `odp_cpu_bench` performance test has been added that runs
compute-intensive packet operations in a multithreaded environment and prints
the observed maximum throughput for each thread.
=== Example Improvements
==== Classifier Example changes
The `odp_classifier` example program now uses a reduced number of threads by
default to reduce elapsed run time. `ODP_THREAD_COUNT_MAX` is also now used as
the max worker count.
==== Generator Improvements
The `odp_generator` example has numerous cleanups and performance improvements.
==== IPsec Example
The `odp_ipsec` example now properly stops and closes pktio devices on exit.
==== Packet Dumping
A new `odp_packet_dump` example is added that prints received packets to the
terminal. This is useful for debugging packet I/O interfaces.
==== Sysinfo Example
A new `odp_sysinfo` example is provided that prints system information. Useful
for checking the ODP environment during debugging. This includes providing
detailed information about the various crypto facilities supported, as well
as the feature flags used at build time (_e.g.,_ if the binary was built with
ARMv8.0 or ARMv8.1 instructions).
==== Traffic Manager Example
The traffic manager example now properly destroys all TM queues it creates
for improved reliability. It also now always prints a proper termination
summary message.
=== Bug Fixes
==== Numbered Bugs/Issues
===== https://bugs.linaro.org/show_bug.cgi?id=3983[Bug 3983]
Compile fails on OpenSuSE 42.2 Leap with error: negative width in bit field
'__error_if_negative'
===== https://bugs.linaro.org/show_bug.cgi?id=3989[Bug 3989]
odp_system_info_init() issues
===== https://bugs.linaro.org/show_bug.cgi?id=3999[Bug 3999]
IPsec antireplay check drops packets when sequence number jumps.
===== https://bugs.linaro.org/show_bug.cgi?id=4002[Bug 4002]
IPsec SA creation must fail for ESN-enabled SAs
===== https://bugs.linaro.org/show_bug.cgi?id=4013[Bug 4013]
Per-SA IPv4 ID allocation may cause duplicate IDs.
===== https://bugs.linaro.org/show_bug.cgi?id=4017[Bug 4017]
Unexpected IP ID causes IPsec API validation to fail
===== https://github.com/Linaro/odp/issues/662[Issue 662]
rte_mempool_ops_alloc() is not dpdk api
==== Unnumbered Bugs/Issues
* Fixed enq/deq issues encountered on architectures with weak memory ordering.
* Return 0 from `odp_sys_huge_page_size_all()` if hugepages are not
supported/detected. Tests modified to not treat this as an error.
* Set `ODP_CACHE_LINE_SIZE` to 128 on ppc64le systems.
* iplookuptable fix putting values into table
* DPDK pktio support now works properly across multiple ODP instances.
* Zero timer pool memory on reserve (fixes timer failures due to uninitialized
variables).
* `-march=native` disabled for `clang`. This fixes a known issue with recent
levels of clang.
=== Known Issues
==== https://bugs.linaro.org/show_bug.cgi?id=3998[Bug 3998]
IPsec extended sequence number support is missing
==== https://bugs.linaro.org/show_bug.cgi?id=4014[Bug 4014]
Separate IP ID allocation for transport and tunnel mode SAs may cause
duplicate IDs
==== https://bugs.linaro.org/show_bug.cgi?id=4018[Bug 4018]
Unexpected IV causes IPsec API validation to fail
==== https://bugs.linaro.org/show_bug.cgi?id=4040[Bug 4040]
Clang build fails on Ubuntu 18.04
Bill Fischofer (3):
configure: add warning about --without-openssl implications
doc: implementation: add configuration section to implementation guide
changelog: updates for odp v1.20.0.0
Bogdan Pricope (3):
api: pktio: extend odp_pktin_queue_param_t to support per queue configuration
linux-gen: pktio: implement per queue pktin configuration
validation: pktio: test per queue pktin configuration
Dmitry Eremin-Solenikov (47):
travis: stop using deprecated image
travis: pin repositories to architectures
travis: switch iptables policy to let tap driver work
example: sysinfo: print more information about crypto capabilities
linux-gen: crypto: properly sort AES-CMAC capabilities
validation: pktio: check sctp flag in parser tests
validation: pktio: fix checks in pktio tests
test/common: add IPv6 SCTP packet
validation: pktio: parser: add SCTP test
helper: add SCTP protocol header
helper: add SCTP handling functions
linux-gen: add SCTP protocol header
linux-gen: packet: parse SCTP packets and verify checksum
linux-gen: packet: support SCTP packet insertion
linux-gen: pktio: loop: handle SCTP checksums
linux-gen: ipsec: insert checksum into SCTP packets if required
validation: pktio: add SCTP checksum tests
travis: fix DOCKER_NAMESPACE variable setting
travis: switch to unified 16.04 image
m4: odp_dpdk: pass CFLAGS and LDFLAGS to CC when locating libdpdk.so
travis: move netmap to install stage
travis: restore quick build-only testing
ci: rewrite coverage and distcheck scripts to follow other build scripts
ci: move build stage to common script
ci: do compile-after-install test
linux-gen: sysinfo: return 0 if hugepages are not supported
linux-gen: x86: as a last resort parse max cpu freq from bogomips value
validation: system: 0 is valid huge page size
include: abi: set ODP_CACHE_LINE_SIZE to 128 on ppc64le
linux-gen: abi: set ODP_CACHE_LINE_SIZE to 128 on ppc64le
linux-gen: fix pktio private size on 128-byte cache machines
validation: time: fix c&p error
validation: scheduler: print debug diagnostics on test_wait failure
validation: time: be more tolerant wrt delays
validation: timer: be more tolerant wrt delays
validation: scheduler: increase wait tolerance timeout to 150 msec
linux-gen: ipsec: fix sliding window shifts
linux-gen: ipsec: reject SA creation with ESN flag set
configure.ac: set DX environment WITH_PLATFORM from configure.ac
doc: pass generated include files to Doxygen
m4: update ax_prog_doxygen.m4 to latest version
shippable: switch to using official Shippable image
api: crypto: provide definitions for 3GPP crypto algorithms
api: crypto: add bitstring operation capability
validation: crypto: add support for bit mode algorithm testing
validation: crypto: 3GPP crypto algorightms support
travis: install graphviz in doxygen test
Janne Peltonen (8):
linux-gen: ipsec: speed up random IV generation by thread-local buffering
linux-gen: ipsec: remove SA reference counting from outbound processing
linux-gen: ipsec: separate hot r/w data from r/o data in an SA
linux-gen: ipsec: use sequence number counter for counter based IV
validation: ipsec: make output checking accept any IP ID value
linux-gen: ipsec: use global IPv4 ID allocator for all tunnel SAs
linux-gen: ipsec: make IPv4 ID allocator scale better to multiple threads
linux-gen: ipsec: make SA lifetime checking more scalable to multiple threads
Josep Puigdemont (2):
linux-gen: ishm: implement huge page cache
linux-gen: ishm: make huge page cache size dynamic
Matias Elo (105):
example: use min number of workers by default
example: use ODP_THREAD_COUNT_MAX as max worker count
test: performance: add new CPU benchmarking application
linux-gen: pktio: remove unused ring operations
linux-gen: pktio: ring: guarantee enq/deq variable load order
linux-gen: ipsec: fall back to lower odp_random_kind_t if necessary
thread: increase ODP_THREAD_COUNT_MAX to 256
linux-gen: netmap: fix incorrect debug message
linux-gen: dpdk: fix calling internal dpdk function
abi: packet: set ODP_PACKET_SEG_INVALID to zero
abi: classification: set ODP_COS_INVALID to zero
abi: classification: set ODP_PMR_INVAL to zero
abi: ipsec: set ODP_IPSEC_SA_INVALID to zero
abi: pool: set ODP_POOL_INVALID to zero
abi: timer: set ODP_TIMER_POOL_INVALID to zero
abi: timer: set ODP_TIMEOUT_INVALID to zero
abi: timer: set ODP_TIMER_INVALID to zero
linux-gen: shm: add option for allocating internal shm using single VA
linux-gen: shm: increase pre-reserved virtual address space size
linux-gen: shm: reserve internal shms using single VA flag
linux-gen: split global data into RO and RW structs
linux-gen: pcapng: move global data into odp_global_data_rw_t
linux-gen: dpdk: move dpdk_initialized global var into odp_global_data_rw_t
linux-gen: timer: allocate global memory from shm
linux-gen: timer: move global variable 'locks' into timer_global_t
linux-gen: timer: move global variables into timer_global_t
linux-gen: ipsec: allocate memory from shm
linux-gen: hash: allocate crc table memory from shm
linux-gen: pcap: allocate tx buffer from stack
linux-gen: socket_mmap: reserve memory from shm
validation: atomic: allocate test variables from shm
validation: thread: allocate barriers from shm
validation: timer: allocate global data from shm
test: performance: enable testing in process mode
test: example: allocate global data from shm
test: ring: allocate global data from shm
test: mmap_vlan_ins: allocate global data from shm
helper: threads: add ODPH_PROC_MODE environment variable
linux-gen: test: configuration file for running process mode tests
travis: add process mode test
linux-gen: dpdk: fix running multiple odp instances simulaneusly
linux-gen: dpdk: prefix visible internal parse functions with _odp_
linux-gen: dpdk: improved zero-copy implementation
linux-gen: sched scalable: allocate global data from shm
linux-gen: ring: allocate global data from shm
example: stop and close pktio devices on exit
example: generator: use odp_wait_time_ns() instead of timers
example: generator: remove print from packet tx loop
linux-gen: pool: increase minimum packet segment length
linux-gen: queue: add internal interface for adding/removing inline timers
linux-gen: timer: reduce inline timer overhead
linux-gen: timer: run inline timers during queue dequeue operations
linux-gen: ishm: remove _ODP_SHM_NO_HP flag
linux-gen: ishm: remove unused odp_shm_internal header
linux-gen: ishm: add internal _ODP_ISHM_USE_HP flag
linux-gen: ishm: allocate small shm blocks using normal pages
linux-gen: ishm: remove unnecessary _odp_ishm_pool_lookup() function
linux-gen: ishm: remove unused internal functions
linux-gen: queue scalable: remove _ODP_ISHM_SINGLE_VA from pool create
linux-gen: ishm: move block memory mapping into _odp_ishm_address()
validation: pool: add test for creating and using a pool after fork
validation: shmem: reduce the number of workers in single VA alloc test
linux-gen: ishm: read single va size from config
linux-gen: ishm: use pre-reserved single va memory
linux-gen: init: always initialize odp_global_ro.init_param
linux-gen: timer: zero timer pool memory on reserve
linux-gen: timer: enable inline timer implementation using config file
travis: test inline timer implementation
linux-gen: timer: add config option for inline timer poll frequency
linux-gen: timer: decrease inline timer polling interval under load
linux-gen: ishm: add config option for selecting huge page usage limit
api: shm: remove unused ODP_SHM_NULL define
abi: timer: use strong type for odp_timer_pool_t
api: classifier: rename ODP_PMR_INVAL to ODP_PMR_INVALID
api: timer: add timer pool capabilities
linux-gen: timer: implement new timer pool capabilities
validation: timer: use new timer pool capabilities
api: init: add new mem_model member to odp_init_t
linux-gen: init: use new odp_init_t.mem_model parameter
validation: init: add test for odp_init_t.mem_model
helper: threads: replace odph_linux_thread_type_t with odp_mem_model_t
helper: threads: add odph_options() getter function
helper: test: add test for new odph_options() function
test: performance: use mem_model from helper options
example: use mem_model from helper options
validation: use use mem_model from helper options
linux-gen: shm: remove single_va configuration option
example: generator: add signal handler for SIGINT
linux-gen: pool: reduce buffer memory usage
linux-gen: pool: move ODP_CONFIG_BUFFER_ALIGN_MIN out of config header
linux-gen: pool: remove unnecessary align padding from buffers
abi: traffic_mngr: reduce max defines
linux-gen: traffic_mngr: use static array for odp_tm_systems
linux-gen: traffic_mngr: move tm_wred_node_t inside tm_queue_obj_t
linux-gen: traffic_mngr: allocate tm_queue_obj_t from shm
linux-gen: traffic_mngr: allocate tm_system_group_t from shm
linux-gen: traffic_mngr: move tm_schedulers_obj_t inside tm_node_obj_t
linux-gen: traffic_mngr: move tm_wred_node_t inside tm_node_obj_t
linux-gen: traffic_mngr: allocate tm_node_obj_t from shm
linux-gen: traffic_mngr: store tm_queue_obj_t array inside tm_system_t
linux-gen: traffic_mngr: store root node inside tm_system_t
linux-gen: traffic_mngr: store input_work_queue inside tm_system_t
linux-gen: traffic_mngr: allocate profile objects from shm
linux-gen: traffic_mngr: don't reserve memory if tm is disabled
linux-gen: traffic_mngr: allocate all global data from shm
Maxim Uvarov (28):
fix code check warning using CC in code
configure.ac print linker
linux-gen: odp_tm_queue_destroy should not take care about params
example: tm: add tm queues destroy
example: tm: use 0 array index for queues
example: tm: add some message on exit
travis: add docker tests
travis: setup default docker name space
travis: set CI for distcheck
travis: let after_failure task print logs
travis: add ubuntu 18.04 compilation test
linux-gen: odp_shm_print_all: refine output spreadsheet
abi: align ODP_CPUMASK_SIZE with kernel cpu_set_t
helper: iplookuptable fix puting values to table
travis: export CI for first distcheck
linux-gen: shm: do not print map error
linux-gen: do not use huge pages for internal allocations
remove scripts/build-pktio-dpdk
linuxgen: add dumpconfig utility
linux-gen: run without /proc mounted
travis: define compiler for clang test
configure: disable -march=native for clang
travis: check.sh request huge pages at early start
linux-gen: remove performance test for process mode
linux-gen: ishm: add missing cast to calculate max_memory
text: perf odp_sched_pktio: try to terminate on failure
linux-gen: drop performance.m4
configure.ac: update version to v1.20.0.0
Petri Savolainen (129):
test: pool_perf: add new pool performance test
test: sched_perf: add new scheduler performance test
linux-gen: ring: remove unnecessary r_tail synchronization
example: sysinfo: application to print system information
linux-gen: cpu: move num cpu into config header file
linux-gen: config: increase max number of cpus
linux-gen: sysinfo: use cpufreq for max freq by default
linux-gen: sysinfo: parse aarch64 cpuinfo
linux-gen: sched: support large burst sizes
linux-gen: sched: support large burst size from pktin
linux-gen: queue: separate plain and sched dequeues
linux-gen: queue: rename queue basic internal header file
linux-gen: sched: move basic queue scheduler functions
linux-gen: sched: configurable default burst size
test: sched_perf: add num queues option
api: queue: split queue spec header file
linux-gen: queue: inline enq and deq functions
linux-gen: queue: remove internal queue handle conversions
linux-gen: queue: remove enq/deq from queue interface
linux-gen: queue: prepare for separate queue operations
linux-gen: queue: separate plain and sched enqueue functions
linux-gen: queue: fix ordered queue issue
test: queue_perf: handle max queue size capability zero
test: queue_perf: prepare for multiple worker threads
test: queue_perf: add num_cpu option
test: queue_perf: add burst_size option
linux-gen: ring_mpmc: new multi-producer, multi-consumer ring
linux-gen: queue: use mpmc ring in plain queues
linux-gen: ring_st: move ring mask and data pointer
linux-gen: ring_spsc: move ring mask and data pointer
test: sched_perf: total number of queues option
test: sched_perf: add event forward option
test: sched_perf: total events per second
linux-gen: queue: remove extra checks
linux-gen: sched: clean up local data struct
linux-gen: sched: single variable for sync context status
linux-gen: sched: remove queue_destroy_finalize callback
linux-gen: sched: stash ring pointer
linux-gen: ring: change ring_deq return value
linux-gen: config: print config file name
linux-gen: config: add array lookup function
linux-gen: sched: per priority burst size configuration
linux-gen: sched: pack global data struct
linux-gen: pktin: use enqueue multi for dst_queue packets
validation: cls: multiple packet tcp dest port test
linux-gen: queue: fix error print format
test: ipc: reduce interface start poll frequency
example: packet_dump: add new example
example: packet_dump: run during make check
linux-gen: dpdk: prefetch pkt_hdr before packet init
linux-gen: dpdk: prefetch packet data early
linux-gen: pool: decrease minimum segment size to 2k
validation: sched: add queue size test
linux-gen: queue: use queue size parameter
test: sched_pktio: add queue pipeline options
test: sched_pktio: add scheduler sync mode option
test: sched_pktio: add pipeline queue size option
example: build: configure option to disable example build
test: build: configure option to disable test build
validation: packet: add packet reset test
helper: iplookup: check capabilities
test: scheduling: fix script to exit with failure status
test: scheduling: honor pool capability
test: sched_latency: honor pool capability limits
linux-gen: sched: remove unnecessary queue null index
linux-gen: pool: ring size must be larger than num items
linux-gen: ring: add reader tail check
linux-gen: pool: reduce max pool size
validation: pool: add max num pool tests
linux-gen: pktio: fix index calculation of multiple dest_queue
validation: cls: interleave tcp test flows
ci: remove iquery tests
linux-gen: sched: remove iquery from interface
linux-gen: remove iquery scheduler implementation
linux-gen: sched: remove unused schedule interface functions
linux-gen: config: improve config file check error output
linux-gen: config: move queue size config to scalable
linux-gen: pool: output error on pool create
linux-gen: pool: add packet param checks
linux-gen: pool: add max num packets in config file
linux-gen: config: maximum pool size 1M
travis: build ODP on multiple threads
travis: add test cases for optional schedulers
travis: split distcheck test
travis: clean process mode test script
travis: explicit build only tests
travis: change pcapng test to build only
travis: exclude duplicate tests
travis: start coverage test early
travis: explicit netmap test cases
travis: run all test with gcc first
linux-gen: sched: add spread weight config file option
linux-gen: sched: use spread weight from config file
linux-gen: sched: increase max spread weight
test: sched_pktio: add burst size option
linux-gen: config: add schedule group config file options
linux-gen: sched: add config request function to interface
linux-gen: thread: use automatic schedule group configuration
linux-gen: schedule_sp: use sched_cb_pktin_poll
linux-gen: pktio: remove sched_cb_pktin_poll_old
linux-gen: ipsec: check crypto param salt length
validation: crypto: capability call should not fail
test: queue_perf: fix lockfree support check
example: sysinfo: print shm blocks
linux-gen: shm: modify shm print header string
linux-gen: cls: simplify shm usage
linux-gen: sysinfo: print out ARM build time features
linux-gen: arm atomic: fix register numbering with casp
linux-gen: build: enable CPU arch specific optimization
api: packet: add subtype call
linux-gen: packet: implementation subtype api
validation: packet: add packet subtype tests
api: packet: add parse result call
linux-gen: packet: implement packet result calls
validation: packet: add num_pkt parameter to parse_test_alloc
validation: packet: add parse result test
api: crypto: improve odp_crypto_session_param_t documentation
api: ipsec: add auth_key_extra IPSEC crypto param
linux-gen: ipsec: use new auth_key_extra
api: sched: add priority min/max/default functions
api: sched: odp_schedule_prio_t is an integer
api: sched: favor priority functions over macros
linux-gen: sched: implement min/max/default prio functions
validation: sched: convert priority macros to function calls
validation: sched: add priority function tests
validation: queue: default queue parameter values
api: sched: add wait and no_wait schedule functions
linux-gen: sched: implement wait and no_wait functions
validation: sched: add test case for wait and no_wait
Seungha Son (3):
linux-gen: timer: add debug print when running out of timer pools
test: odp_pool_per: fix printf string format
linux-gen: shm: fix wrong spelling
-----------------------------------------------------------------------
hooks/post-receive
--