From 6380daca5bd4e1740ad8afd0224f7bcbe5626ec7 Mon Sep 17 00:00:00 2001 From: Ricardo Salveti Date: Tue, 26 Jul 2016 14:11:48 -0300 Subject: [PATCH] Imported Upstream version 16.07-rc5 Change-Id: I3f93dd2982ddb9c0209bc44466d05a2320175938 Signed-off-by: Ricardo Salveti --- MAINTAINERS | 3 +++ app/test/Makefile | 1 - drivers/net/i40e/i40e_ethdev.c | 2 -- examples/ptpclient/Makefile | 1 - lib/librte_eal/common/include/rte_version.h | 2 +- lib/librte_mempool/rte_mempool.c | 3 ++- lib/librte_ring/rte_ring.h | 2 +- lib/librte_timer/rte_timer.c | 19 ++++++++++++++----- lib/librte_vhost/vhost_rxtx.c | 2 +- mk/rte.lib.mk | 6 +++++- mk/toolchain/clang/rte.toolchain-compat.mk | 10 ++++++++-- 11 files changed, 35 insertions(+), 16 deletions(-) diff --git a/MAINTAINERS b/MAINTAINERS index 92ea5d79..d0991313 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -30,6 +30,9 @@ F: scripts/checkpatches.sh F: scripts/load-devel-config.sh F: scripts/test-build.sh +Stable Branches +--------------- +T: git://dpdk.org/dpdk-stable Security Issues --------------- diff --git a/app/test/Makefile b/app/test/Makefile index 6015b19f..49ea1959 100644 --- a/app/test/Makefile +++ b/app/test/Makefile @@ -158,7 +158,6 @@ SRCS-$(CONFIG_RTE_LIBRTE_CMDLINE) += test_cmdline_string.c SRCS-$(CONFIG_RTE_LIBRTE_CMDLINE) += test_cmdline_lib.c ifeq ($(CONFIG_RTE_LIBRTE_SCHED),y) -LDLIBS += -lrt SRCS-y += test_red.c SRCS-y += test_sched.c endif diff --git a/drivers/net/i40e/i40e_ethdev.c b/drivers/net/i40e/i40e_ethdev.c index 11a58041..d0aeb703 100644 --- a/drivers/net/i40e/i40e_ethdev.c +++ b/drivers/net/i40e/i40e_ethdev.c @@ -4110,7 +4110,6 @@ i40e_vsi_release(struct i40e_vsi *vsi) TAILQ_FOREACH_SAFE(vsi_list, &vsi->veb->head, list, temp) { if (i40e_vsi_release(vsi_list->vsi) != I40E_SUCCESS) return -1; - TAILQ_REMOVE(&vsi->veb->head, vsi_list, list); } i40e_veb_release(vsi->veb); } @@ -4119,7 +4118,6 @@ i40e_vsi_release(struct i40e_vsi *vsi) TAILQ_FOREACH_SAFE(vsi_list, &vsi->floating_veb->head, list, temp) { if (i40e_vsi_release(vsi_list->vsi) != I40E_SUCCESS) return -1; - TAILQ_REMOVE(&vsi->floating_veb->head, vsi_list, list); } } diff --git a/examples/ptpclient/Makefile b/examples/ptpclient/Makefile index d241730f..b77cf710 100644 --- a/examples/ptpclient/Makefile +++ b/examples/ptpclient/Makefile @@ -46,7 +46,6 @@ SRCS-y := ptpclient.c CFLAGS += -O3 CFLAGS += $(WERROR_FLAGS) -LDLIBS += -lrt # workaround for a gcc bug with noreturn attribute # http://gcc.gnu.org/bugzilla/show_bug.cgi?id=12603 diff --git a/lib/librte_eal/common/include/rte_version.h b/lib/librte_eal/common/include/rte_version.h index bbffecff..1e147617 100644 --- a/lib/librte_eal/common/include/rte_version.h +++ b/lib/librte_eal/common/include/rte_version.h @@ -77,7 +77,7 @@ extern "C" { * 0-15 = release candidates * 16 = release */ -#define RTE_VER_RELEASE 4 +#define RTE_VER_RELEASE 5 /** * Macro to compute a version number usable for comparisons diff --git a/lib/librte_mempool/rte_mempool.c b/lib/librte_mempool/rte_mempool.c index 8806633b..2e28e2e8 100644 --- a/lib/librte_mempool/rte_mempool.c +++ b/lib/librte_mempool/rte_mempool.c @@ -1283,12 +1283,13 @@ void rte_mempool_walk(void (*func)(struct rte_mempool *, void *), { struct rte_tailq_entry *te = NULL; struct rte_mempool_list *mempool_list; + void *tmp_te; mempool_list = RTE_TAILQ_CAST(rte_mempool_tailq.head, rte_mempool_list); rte_rwlock_read_lock(RTE_EAL_MEMPOOL_RWLOCK); - TAILQ_FOREACH(te, mempool_list, next) { + TAILQ_FOREACH_SAFE(te, mempool_list, next, tmp_te) { (*func)((struct rte_mempool *) te->data, arg); } diff --git a/lib/librte_ring/rte_ring.h b/lib/librte_ring/rte_ring.h index f928324d..0e22e694 100644 --- a/lib/librte_ring/rte_ring.h +++ b/lib/librte_ring/rte_ring.h @@ -756,7 +756,7 @@ __rte_ring_sc_do_dequeue(struct rte_ring *r, void **obj_table, /* copy in table */ DEQUEUE_PTRS(); - rte_smp_wmb(); + rte_smp_rmb(); __RING_STAT_ADD(r, deq_success, n); r->cons.tail = cons_next; diff --git a/lib/librte_timer/rte_timer.c b/lib/librte_timer/rte_timer.c index 3dcdab58..43da8365 100644 --- a/lib/librte_timer/rte_timer.c +++ b/lib/librte_timer/rte_timer.c @@ -69,6 +69,9 @@ struct priv_timer { unsigned prev_lcore; /**< used for lcore round robin */ + /** running timer on this lcore now */ + struct rte_timer *running_tim; + #ifdef RTE_LIBRTE_TIMER_DEBUG /** per-lcore statistics */ struct rte_timer_debug_stats stats; @@ -135,9 +138,12 @@ timer_set_config_state(struct rte_timer *tim, while (success == 0) { prev_status.u32 = tim->status.u32; - /* timer is running on another core, exit */ + /* timer is running on another core + * or ready to run on local core, exit + */ if (prev_status.state == RTE_TIMER_RUNNING && - prev_status.owner != (uint16_t)lcore_id) + (prev_status.owner != (uint16_t)lcore_id || + tim != priv_timer[lcore_id].running_tim)) return -1; /* timer is being configured on another core */ @@ -543,6 +549,8 @@ void rte_timer_manage(void) /* break the existing list at current time point */ timer_get_prev_entries(cur_time, lcore_id, prev); for (i = priv_timer[lcore_id].curr_skiplist_depth -1; i >= 0; i--) { + if (prev[i] == &priv_timer[lcore_id].pending_head) + continue; priv_timer[lcore_id].pending_head.sl_next[i] = prev[i]->sl_next[i]; if (prev[i]->sl_next[i] == NULL) @@ -562,10 +570,9 @@ void rte_timer_manage(void) pprev = &tim->sl_next[0]; } else { /* another core is trying to re-config this one, - * remove it from local expired list and put it - * back on the priv_timer[] skip list */ + * remove it from local expired list + */ *pprev = next_tim; - timer_add(tim, lcore_id, 1); } } @@ -580,6 +587,7 @@ void rte_timer_manage(void) for (tim = run_first_tim; tim != NULL; tim = next_tim) { next_tim = tim->sl_next[0]; priv_timer[lcore_id].updated = 0; + priv_timer[lcore_id].running_tim = tim; /* execute callback function with list unlocked */ tim->f(tim, tim->arg); @@ -610,6 +618,7 @@ void rte_timer_manage(void) rte_spinlock_unlock(&priv_timer[lcore_id].list_lock); } } + priv_timer[lcore_id].running_tim = NULL; } /* dump statistics about timers */ diff --git a/lib/librte_vhost/vhost_rxtx.c b/lib/librte_vhost/vhost_rxtx.c index bc00518a..08a73fd0 100644 --- a/lib/librte_vhost/vhost_rxtx.c +++ b/lib/librte_vhost/vhost_rxtx.c @@ -748,7 +748,7 @@ copy_desc_to_mbuf(struct virtio_net *dev, struct vhost_virtqueue *vq, break; if (unlikely(desc->next >= vq->size || - ++nr_desc >= vq->size)) + ++nr_desc > vq->size)) return -1; desc = &vq->desc[desc->next]; diff --git a/mk/rte.lib.mk b/mk/rte.lib.mk index 0187ae85..830f81a6 100644 --- a/mk/rte.lib.mk +++ b/mk/rte.lib.mk @@ -93,8 +93,12 @@ O_TO_A_DO = @set -e; \ $(O_TO_A) && \ echo $(O_TO_A_CMD) > $(call exe2cmd,$(@)) +ifneq ($(CC_SUPPORTS_Z),false) +NO_UNDEFINED := -z defs +endif + O_TO_S = $(LD) -L$(RTE_SDK_BIN)/lib $(_CPU_LDFLAGS) $(EXTRA_LDFLAGS) \ - -shared $(OBJS-y) -z defs $(LDLIBS) -Wl,-soname,$(LIB) -o $(LIB) + -shared $(OBJS-y) $(NO_UNDEFINED) $(LDLIBS) -Wl,-soname,$(LIB) -o $(LIB) O_TO_S_STR = $(subst ','\'',$(O_TO_S)) #'# fix syntax highlight O_TO_S_DISP = $(if $(V),"$(O_TO_S_STR)"," LD $(@)") O_TO_S_DO = @set -e; \ diff --git a/mk/toolchain/clang/rte.toolchain-compat.mk b/mk/toolchain/clang/rte.toolchain-compat.mk index f995b0b0..b734413b 100644 --- a/mk/toolchain/clang/rte.toolchain-compat.mk +++ b/mk/toolchain/clang/rte.toolchain-compat.mk @@ -38,6 +38,12 @@ # find out CLANG version -CLANG_MAJOR_VERSION = $(shell $(CC) -dumpversion | cut -f1 -d.) +CLANG_VERSION := $(shell $(CC) -v 2>&1 | grep version | sed "s/.*version \([0-9]*\.[0-9]*\).*/\1/") -CLANG_MINOR_VERSION = $(shell $(CC) -dumpversion | cut -f2 -d.) +CLANG_MAJOR_VERSION := $(shell echo $(CLANG_VERSION) | cut -f1 -d.) + +CLANG_MINOR_VERSION := $(shell echo $(CLANG_VERSION) | cut -f2 -d.) + +ifeq ($(shell test $(CLANG_MAJOR_VERSION)$(CLANG_MINOR_VERSION) -lt 35 && echo 1), 1) + CC_SUPPORTS_Z := false +endif -- 2.16.6