On Mon, Jul 11, 2022 at 02:11:32PM +0200, Mattias Rönnblom wrote: > __rte_raw_cksum() (used by rte_raw_cksum() among others) accessed its > data through an uint16_t pointer, which allowed the compiler to assume > the data was 16-bit aligned. This in turn would, with certain > architectures and compiler flag combinations, result in code with SIMD > load or store instructions with restrictions on data alignment. > > This patch keeps the old algorithm, but data is read using memcpy() > instead of direct pointer access, forcing the compiler to always > generate code that handles unaligned input. The __may_alias__ GCC > attribute is no longer needed. > > The data on which the Internet checksum functions operates are almost > always 16-bit aligned, but there are exceptions. In particular, the > PDCP protocol header may (literally) have an odd size. > > Performance impact seems to range from none to a very slight > regression. > > Bugzilla ID: 1035 > Cc: sta...@dpdk.org
Fixes: 6006818cfb26 ("net: new checksum functions") > --- > > v3: > * Use RTE_ALIGN_FLOOR() in the pointer arithmetic (Olivier Matz). > v2: > * Simplified the odd-length conditional (Morten Brørup). > > Reviewed-by: Morten Brørup <m...@smartsharesystems.com> > > Signed-off-by: Mattias Rönnblom <mattias.ronnb...@ericsson.com> Acked-by: Olivier Matz <olivier.m...@6wind.com> Thank you!