Message ID | 1449674177-10624-1-git-send-email-viktorin@rehivetech.com (mailing list archive) |
---|---|
State | Accepted, archived |
Delegated to: | Thomas Monjalon |
Headers |
Return-Path: <dev-bounces@dpdk.org> X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [IPv6:::1]) by dpdk.org (Postfix) with ESMTP id DC42E7EB0; Wed, 9 Dec 2015 16:17:09 +0100 (CET) Received: from wes1-so1.wedos.net (wes1-so1.wedos.net [46.28.106.15]) by dpdk.org (Postfix) with ESMTP id 357CB5952 for <dev@dpdk.org>; Wed, 9 Dec 2015 16:17:09 +0100 (CET) Received: from pcviktorin.fit.vutbr.cz (pcviktorin.fit.vutbr.cz [147.229.13.147]) by wes1-so1.wedos.net (Postfix) with ESMTPSA id 3pG26X5s15z3BQ; Wed, 9 Dec 2015 16:17:08 +0100 (CET) From: Jan Viktorin <viktorin@rehivetech.com> To: dev@dpdk.org Date: Wed, 9 Dec 2015 16:16:17 +0100 Message-Id: <1449674177-10624-1-git-send-email-viktorin@rehivetech.com> X-Mailer: git-send-email 2.6.3 In-Reply-To: <1449602993-6047-1-git-send-email-viktorin@rehivetech.com> References: <1449602993-6047-1-git-send-email-viktorin@rehivetech.com> Subject: [dpdk-dev] [PATCH 1/1] arm: set CONFIG_RTE_ARCH_STRICT_ALIGN=y for armv7 target X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK <dev.dpdk.org> List-Unsubscribe: <http://dpdk.org/ml/options/dev>, <mailto:dev-request@dpdk.org?subject=unsubscribe> List-Archive: <http://dpdk.org/ml/archives/dev/> List-Post: <mailto:dev@dpdk.org> List-Help: <mailto:dev-request@dpdk.org?subject=help> List-Subscribe: <http://dpdk.org/ml/listinfo/dev>, <mailto:dev-request@dpdk.org?subject=subscribe> Errors-To: dev-bounces@dpdk.org Sender: "dev" <dev-bounces@dpdk.org> |
Commit Message
Jan Viktorin
Dec. 9, 2015, 3:16 p.m. UTC
This patch reduces number of warnings from 53 to 40. It removes the usual false
positives utilizing unaligned_uint*_t data types.
Signed-off-by: Jan Viktorin <viktorin@rehivetech.com>
---
As far as I know, only a 64-bit unaligned access can be a problem for ARMv7.
I found only one such occurence:
118 struct rte_mbuf *
119 rte_ipv4_frag_reassemble_packet(struct rte_ip_frag_tbl *tbl,
120 struct rte_ip_frag_death_row *dr, struct rte_mbuf *mb, uint64_t tms,
121 struct ipv4_hdr *ip_hdr)
...
133 psd = (unaligned_uint64_t *)&ip_hdr->src_addr;
134 /* use first 8 bytes only */
135 key.src_dst[0] = psd[0];
136 key.id = ip_hdr->packet_id;
137 key.key_len = IPV4_KEYLEN
Is this a real issue?
---
config/defconfig_arm-armv7a-linuxapp-gcc | 1 +
1 file changed, 1 insertion(+)
Comments
2015-12-09 16:16, Jan Viktorin: > This patch reduces number of warnings from 53 to 40. It removes the usual false > positives utilizing unaligned_uint*_t data types. > > Signed-off-by: Jan Viktorin <viktorin@rehivetech.com> Applied, thanks Jan, what is the problem with the other ARM alignment warnings? Can they be fixed?
On Mon, 29 Feb 2016 16:14:58 +0100 Thomas Monjalon <thomas.monjalon@6wind.com> wrote: > 2015-12-09 16:16, Jan Viktorin: > > This patch reduces number of warnings from 53 to 40. It removes the usual false > > positives utilizing unaligned_uint*_t data types. > > > > Signed-off-by: Jan Viktorin <viktorin@rehivetech.com> > > Applied, thanks > > Jan, what is the problem with the other ARM alignment warnings? > Can they be fixed? This is the full list of warnings I can see on the current origin/master for ARMv7 (42 occurences) including examples (+10 more). The origin of all of them is: cast increases required alignment of target type [-Wcast-align] After skimming through the list, you can see that they are mostly casts to uint32_t * or something similar. I believe that all of them are OK. However, I don't know how to persuade GCC to not be angry... Probably, we can add some explicit alignment of certain structures. app/test/test_thash.c 116 rte_convert_rss_key((uint32_t *)&default_rss_key, 117 (uint32_t *)rss_key_be, RTE_DIM(default_rss_key)); build/include/test_thash.h 179 *((uint32_t *)targ->v6.src_addr + i) = 180 rte_be_to_cpu_32(*((const uint32_t *)orig->src_addr + i)); 181 *((uint32_t *)targ->v6.dst_addr + i) = 182 rte_be_to_cpu_32(*((const uint32_t *)orig->dst_addr + i)); 207 ret ^= rte_cpu_to_be_32(((const uint32_t *)rss_key)[j]) << i | 208 (uint32_t)((uint64_t)(rte_cpu_to_be_32(((const uint32_t *)rss_key)[j + 1])) >> 238 ret ^= ((const uint32_t *)rss_key)[j] << i | 239 (uint32_t)((uint64_t)(((const uint32_t *)rss_key)[j + 1]) >> (32 - i)); examples-sdk/usr/local/share/dpdk/arm-armv7a-linuxapp-gcc/include/rte_mbuf.h 1617 ((t)((char *)(m)->buf_addr + (m)->data_off + (o))) examples/l3fwd-acl/main.c 1074 next = (struct rte_acl_rule *)(route_rules + 1079 next = (struct rte_acl_rule *)(acl_rules + 1115 *pacl_base = (struct rte_acl_rule *)acl_rules; 1117 *proute_base = (struct rte_acl_rule *)route_rules; netmap_user.h 65 #define NETMAP_IF(b, o) (struct netmap_if *)((char *)(b) + (o)) 68 ((struct netmap_ring *)((char *)(nifp) + \ 72 ((struct netmap_ring *)((char *)(nifp) + \ examples/vhost/main.c 121 #define MBUF_HEADROOM_UINT32(mbuf) (*(uint32_t *)((uint8_t *)(mbuf) \ 945 return ((*(uint64_t *)ea ^ *(uint64_t *)eb) & MAC_ADDR_CMP) == 0; lib/librte_acl/acl_gen.c 391 qtrp = (uint32_t *)node->transitions; lib/librte_acl/acl_run.h 46 (*((const int32_t *)((prm)[(idx)].data + *(prm)[idx].data_index++))) lib/librte_eal/linuxapp/eal/eal_interrupts.c 150 irq_set = (struct vfio_irq_set *) irq_set_buf; 156 fd_ptr = (int *) &irq_set->data; 196 irq_set = (struct vfio_irq_set *) irq_set_buf; 239 irq_set = (struct vfio_irq_set *) irq_set_buf; 245 fd_ptr = (int *) &irq_set->data; 267 irq_set = (struct vfio_irq_set *) irq_set_buf; 293 irq_set = (struct vfio_irq_set *) irq_set_buf; 304 fd_ptr = (int *) &irq_set->data; 330 irq_set = (struct vfio_irq_set *) irq_set_buf; lib/librte_eal/linuxapp/eal/eal_pci_vfio_mp_sync.c 176 chdr = (struct cmsghdr *) chdr_buf; 209 chdr = (struct cmsghdr *) chdr_buf; 595 k = (struct rte_hash_key *) ((char *)keys + 615 k = (struct rte_hash_key *) ((char *)keys + 726 k = (struct rte_hash_key *) ((char *)keys + 749 k = (struct rte_hash_key *) ((char *)keys + 841 k = (struct rte_hash_key *) ((char *)keys + 864 k = (struct rte_hash_key *) ((char *)keys + 959 *key_slot = (const struct rte_hash_key *) ((const char *)keys + 1233 next_key = (struct rte_hash_key *) ((char *)h->key_store + lib/librte_sched/rte_bitmap.h 262 bmp = (struct rte_bitmap *) mem; 264 bmp->array1 = (uint64_t *) &mem[array1_byte_offset]; 266 bmp->array2 = (uint64_t *) &mem[array2_byte_offset]; lib/librte_sched/rte_sched.c 684 port->subport = (struct rte_sched_subport *) 687 port->pipe = (struct rte_sched_pipe *) 690 port->queue = (struct rte_sched_queue *) 693 port->queue_extra = (struct rte_sched_queue_extra *) 696 port->pipe_profiles = (struct rte_sched_pipe_profile *) 701 port->queue_array = (struct rte_mbuf **) lib/librte_vhost/vhost_user/virtio-net-user.c 433 rarp = (struct ether_arp *)(eth_hdr + 1); 527 ifr = (struct ifreq *)ifc.ifc_buf; Regards Jan
On Mon, 29 Feb 2016 16:55:38 +0100 Jan Viktorin <viktorin@rehivetech.com> wrote: > On Mon, 29 Feb 2016 16:14:58 +0100 > Thomas Monjalon <thomas.monjalon@6wind.com> wrote: > > > 2015-12-09 16:16, Jan Viktorin: > > > This patch reduces number of warnings from 53 to 40. It removes the usual false > > > positives utilizing unaligned_uint*_t data types. > > > > > > Signed-off-by: Jan Viktorin <viktorin@rehivetech.com> > > > > Applied, thanks > > > > Jan, what is the problem with the other ARM alignment warnings? > > Can they be fixed? > > This is the full list of warnings I can see on the current origin/master > for ARMv7 (42 occurences) including examples (+10 more). The origin of > all of them is: > > cast increases required alignment of target type [-Wcast-align] > > After skimming through the list, you can see that they are mostly casts > to uint32_t * or something similar. I believe that all of them are OK. > However, I don't know how to persuade GCC to not be angry... > > Probably, we can add some explicit alignment of certain structures. > [snip] > > lib/librte_vhost/vhost_user/virtio-net-user.c > 433 rarp = (struct ether_arp *)(eth_hdr + 1); > 527 ifr = (struct ifreq *)ifc.ifc_buf; Fixed recently in http://dpdk.org/browse/dpdk/commit/?id=bb66588304632a7e4a043d2921d06709d40f9ed4 > > Regards > Jan
diff --git a/config/defconfig_arm-armv7a-linuxapp-gcc b/config/defconfig_arm-armv7a-linuxapp-gcc index cbebd64..2482d91 100644 --- a/config/defconfig_arm-armv7a-linuxapp-gcc +++ b/config/defconfig_arm-armv7a-linuxapp-gcc @@ -39,6 +39,7 @@ CONFIG_RTE_ARCH_ARM_TUNE="cortex-a9" CONFIG_RTE_ARCH_ARM_NEON=y CONFIG_RTE_FORCE_INTRINSICS=y +CONFIG_RTE_ARCH_STRICT_ALIGN=y CONFIG_RTE_TOOLCHAIN="gcc" CONFIG_RTE_TOOLCHAIN_GCC=y