Hi Cyril, On 06/22/2015 08:34 PM, Cyril Chemparathy wrote: > This series contains a few improvements that allow the DPDK code base > to build properly on machines that enforce strict pointer cast > alignment constraints. > > When dealing with packet data which could be arbitrarily aligned, we > get the compiler to do the right thing by (a) making sure that header > types are packed, and (b) introducing and using > unaligned_uint(16|32|64)_t types when upcasting from byte pointers. > > In a few other instances, we know apriori that the pointer cast cannot > possibly break alignment. This applies to the changes in mempool, > hash, mbuf, and the ethdev stats code. Here, we simply silence the > compiler by casting through (void *) using the RTE_PTR_(ADD|SUB) > macros. > > Finally, we introduce a new rte_pktmbuf_mtod_offset() helper to return > a type casted pointer to an offset within the packet data. This > replaces the following commonly used pattern: > (struct foo *)(rte_pktmbuf_mtod(m, char *) + offset) > with: > rte_pktmbuf_mtod_offset(m, struct foo *, offset) > > To ensure consistency, the above transform was applied throughout the > code base using the coccinelle semantic patching tool.
Series Acked-by: Olivier Matz <olivier.matz at 6wind.com> > > Changes in this series: > v2: Fixes based on Olivier's comments. > v3: Extends unaligned fixes to new code introduced on master. > v4: Fixes based on Thomas' comments. > Extends unaligned fixes to new code introduced on master. > > Cyril Chemparathy (9): > mempool: silence -Wcast-align on pointer arithmetic > mbuf: silence -Wcast-align on pointer arithmetic > ethdev: silence -Wcast-align on pointer arithmetic > hash: silence -Wcast-align on pointer arithmetic > eal: add and use unaligned integer types > app/test-pmd: pack simple_gre_hdr > librte_mbuf: Add rte_pktmbuf_mtod_offset() > librte_mbuf: Add transform for rte_pktmbuf_mtod_offset() > librte_mbuf: Apply mtod-offset.cocci transform > > app/test-pmd/csumonly.c | 2 +- > app/test-pmd/flowgen.c | 4 +- > app/test-pmd/icmpecho.c | 2 +- > app/test-pmd/ieee1588fwd.c | 4 +- > app/test-pmd/rxonly.c | 21 +++++---- > app/test-pmd/txonly.c | 6 +-- > app/test/packet_burst_generator.c | 9 ++-- > app/test/test_hash_functions.c | 2 +- > app/test/test_mbuf.c | 16 +++---- > config/common_bsdapp | 5 ++ > config/common_linuxapp | 5 ++ > drivers/net/bonding/rte_eth_bond_pmd.c | 12 +++-- > drivers/net/mlx4/mlx4.c | 9 ++-- > examples/dpdk_qat/crypto.c | 8 ++-- > examples/dpdk_qat/main.c | 5 +- > examples/l3fwd-acl/main.c | 20 ++++---- > examples/l3fwd-power/main.c | 8 ++-- > examples/l3fwd-vf/main.c | 4 +- > examples/l3fwd/main.c | 71 ++++++++++++---------------- > examples/load_balancer/runtime.c | 4 +- > examples/vhost_xen/main.c | 4 +- > lib/librte_eal/common/include/rte_common.h | 10 ++++ > lib/librte_ether/rte_ethdev.c | 24 +++++----- > lib/librte_ether/rte_ether.h | 2 +- > lib/librte_hash/rte_hash.c | 10 ++-- > lib/librte_ip_frag/rte_ipv4_reassembly.c | 7 ++- > lib/librte_ip_frag/rte_ipv6_reassembly.c | 5 +- > lib/librte_mbuf/rte_mbuf.h | 32 +++++++++---- > lib/librte_mempool/rte_mempool.c | 2 +- > lib/librte_mempool/rte_mempool.h | 6 +-- > lib/librte_port/rte_port_ras.c | 6 +-- > lib/librte_vhost/vhost_rxtx.c | 6 +-- > scripts/cocci.sh | 64 +++++++++++++++++++++++++ > scripts/cocci/mtod-offset.cocci | 76 > ++++++++++++++++++++++++++++++ > 34 files changed, 319 insertions(+), 152 deletions(-) > create mode 100755 scripts/cocci.sh > create mode 100644 scripts/cocci/mtod-offset.cocci >