From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 30F61A046B for ; Thu, 25 Jul 2019 18:29:12 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id D40E31C399; Thu, 25 Jul 2019 18:29:11 +0200 (CEST) Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by dpdk.org (Postfix) with ESMTP id B5D9B1C38F; Thu, 25 Jul 2019 18:29:09 +0200 (CEST) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by fmsmga102.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 25 Jul 2019 09:29:08 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.64,307,1559545200"; d="scan'208";a="197934133" Received: from silpixa00389816.ir.intel.com ([10.237.222.12]) by fmsmga002.fm.intel.com with ESMTP; 25 Jul 2019 09:29:06 -0700 From: hgovindh To: Remy Horton , Marko Kovacevic , Ori Kam , Bruce Richardson , Pablo de Lara , Radu Nicolau , Akhil Goyal , Tomasz Kantecki Cc: dev@dpdk.org, hgovindh , maciej.czekaj@caviumnetworks.com, stable@dpdk.org Date: Thu, 25 Jul 2019 17:29:03 +0100 Message-Id: <20190725162903.106262-1-hariprasad.govindharajan@intel.com> X-Mailer: git-send-email 2.22.0 In-Reply-To: <20190724164354.18811-1-hariprasad.govindharajan@intel.com> References: <20190724164354.18811-1-hariprasad.govindharajan@intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: [dpdk-dev] [PATCH v2] examples/l3fwd: fix unaligned memory access X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Fix unaligned memory access when reading IPv6 header which leads to segmentation fault by changing aligned memory read to unaligned memory read. Bugzilla ID: 279 Fixes: 64d3955de1de ("examples/l3fwd: fix ARM build") Cc: maciej.czekaj@caviumnetworks.com Cc: stable@dpdk.org Signed-off-by: hgovindh --- V2: Added functions which will do unaligned load based on the underlying architecture --- --- examples/l3fwd/l3fwd_em.c | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/examples/l3fwd/l3fwd_em.c b/examples/l3fwd/l3fwd_em.c index fa8f82be6..f2641586b 100644 --- a/examples/l3fwd/l3fwd_em.c +++ b/examples/l3fwd/l3fwd_em.c @@ -244,6 +244,29 @@ em_mask_key(void *key, xmm_t mask) #error No vector engine (SSE, NEON, ALTIVEC) available, check your toolchain #endif +#if defined(RTE_MACHINE_CPUFLAG_SSE2) +static inline xmm_t +em_load_key(void *key) +{ + return _mm_loadu_si128((__m128i *)(key)); +} +#elif defined(RTE_MACHINE_CPUFLAG_NEON) +static inline xmm_t +em_load_key(void *key) +{ + return vld1q_s32((int32_t *)key); +} +#elif defined(RTE_MACHINE_CPUFLAG_ALTIVEC) +static inline xmm_t +em_load_key(void *key) +{ + return vec_ld(0, (xmm_t *)(key)); +} +#else +#error No vector engine (SSE, NEON, ALTIVEC) available, check your toolchain +#endif + + static inline uint16_t em_get_ipv4_dst_port(void *ipv4_hdr, uint16_t portid, void *lookup_struct) { @@ -285,8 +308,7 @@ em_get_ipv6_dst_port(void *ipv6_hdr, uint16_t portid, void *lookup_struct) * Get part of 5 tuple: dst IP address lower 96 bits * and src IP address higher 32 bits. */ - key.xmm[1] = *(xmm_t *)data1; - + key.xmm[1] = em_load_key(data1); /* * Get part of 5 tuple: dst port and src port * and dst IP address higher 32 bits. -- 2.22.0