From: Anton Protopopov aspsk@isovalent.com Date: Wed, 3 Apr 2024 12:09:29 +0200
On Wed, Apr 3, 2024 at 11:57 AM Anton Protopopov aspsk@isovalent.com wrote:
On Wed, Apr 3, 2024 at 11:39 AM Alexander Lobakin aleksander.lobakin@intel.com wrote:
From: Arnd Bergmann arnd@arndb.de Date: Wed, 03 Apr 2024 10:45:36 +0200
On Wed, Apr 3, 2024, at 10:10, Anton Protopopov wrote:
On Wed, Apr 3, 2024 at 10:03 AM Naresh Kamboju naresh.kamboju@linaro.org wrote:
The arm footbridge_defconfig failed with gcc-13 and gcc-8 on Linux next starting from next-20240328..next-20240402.
arm: build: * gcc-8-footbridge_defconfig - Failed * gcc-13-footbridge_defconfig - Failed
Reported-by: Linux Kernel Functional Testing lkft@linaro.org
In file included from include/linux/bitfield.h:10, from arch/arm/include/asm/ptrace.h:13, from arch/arm/include/asm/processor.h:14, from include/linux/prefetch.h:15, from arch/arm/include/asm/atomic.h:12, from include/linux/atomic.h:7, from net/core/filter.c:20: include/linux/build_bug.h:78:41: error: static assertion failed: "struct bpf_fib_lookup size check" 78 | #define __static_assert(expr, msg, ...) _Static_assert(expr, msg) | ^~~~~~~~~~~~~~
Thanks, I will take a look today
Naresh,
Could you please remove that static_assert() and dump bpf_bif_lookup layout from pahole?
Anton unionized { smac, dmac } with __u32 mark. On x86_64, the offset of smac was 52 (aligned to 4) already, so I don't really get what AEABI does here. IIRC it aligns every structure to 8 bytes?
Maybe we could just add __attribute__((__packed__)) __attribute__((__aligned__(4))) to that anonymous union at the end.
Yeah, I am sending a patch for this right now. Better not to depend on compiler options
One __packed__ was not enough though. The problem was also with the union of two __u16's which is padded to be 32 bits when AEABI=n and the whole structure is packed (so total size is 66 in this case).
Hmm, on my setup it's 64 bytes. Since it's UAPI, it always must be of the same size. There's probably a padding somewhere in the middle.
Also, don't forget to always set __aligned__(4 or 8) together with __packed__, otherwise the compilers generate terrible code (they assume the structure alignment is 1 and access to every field can be unaligned).
Thanks, Olek