> From: David Marchand [mailto:david.march...@redhat.com] > Sent: Tuesday, 9 July 2024 13.43 > > Hello, > > On Tue, Jul 9, 2024 at 11:24 AM David Marchand > <david.march...@redhat.com> wrote: > > > > On Mon, Jun 10, 2024 at 3:40 PM Konstantin Ananyev > > <konstantin.anan...@huawei.com> wrote: > > > > When the rte_memcpy() size is 16, the same 16 bytes are copied > twice. > > > > In the case where the size is known to be 16 at build time, omit > the > > > > duplicate copy. > > > > > > > > Reduced the amount of effectively copy-pasted code by using #ifdef > > > > inside functions instead of outside functions. > > > > > > > > Suggested-by: Stephen Hemminger <step...@networkplumber.org> > > > > Signed-off-by: Morten Brørup <m...@smartsharesystems.com> > > > > Acked-by: Bruce Richardson <bruce.richard...@intel.com> > > > Acked-by: Konstantin Ananyev <konstantin.anan...@huawei.com> > > > > Applied, thanks for the cleanup. > > This breaks OVS compilation (clang and gcc). > > make[1]: *** [Makefile:4722: lib/ofp-packet.lo] Error 1 > make[1]: *** Waiting for unfinished jobs.... > In file included from lib/ofp-print.c:34: > In file included from ./lib/dp-packet.h:25: > In file included from /home/runner/work/ovs/ovs/dpdk- > dir/include/rte_mbuf.h:38: > In file included from > /home/runner/work/ovs/ovs/dpdk-dir/include/rte_mempool.h:50: > /home/runner/work/ovs/ovs/dpdk-dir/include/rte_memcpy.h:113:25: error: > cast from 'const uint8_t *' (aka 'const unsigned char *') to 'const > __m128i *' increases required alignment from 1 to 16 > [-Werror,-Wcast-align] > xmm0 = _mm_loadu_si128((const __m128i *)src); > ^~~~~~~~~~~~~~~~~~~~ > /home/runner/work/ovs/ovs/dpdk-dir/include/rte_memcpy.h:114:19: error: > cast from 'uint8_t *' (aka 'unsigned char *') to '__m128i *' increases > required alignment from 1 to 16 [-Werror,-Wcast-align] > _mm_storeu_si128((__m128i *)dst, xmm0); > ^~~~~~~~~~~~~~ > 2 errors generated. > make[1]: *** [Makefile:4722: lib/ofp-print.lo] Error 1 > make[1]: Leaving directory '/home/runner/work/ovs/ovs' > make: *** [Makefile:3102: all] Error 2 > > I dropped this patch from main for now. > Can you have a look please?
It seems the new code casts directly to the vector register size, while the original code first cast to void*, and then to the register size. I'll try to fix it and post a new version. PS: The CI should catch this stuff.