* include/linux/compiler_types.h:631:38: error: call to '__compiletime_assert_431' declared with attribute error: BUILD_BUG_ON failed: offsetof(struct qla_tgt_sess_op, atio) + sizeof(u->atio) != sizeof(*u)
@ 2026-03-02 23:58 kernel test robot
2026-03-03 6:48 ` Finn Thain
0 siblings, 1 reply; 3+ messages in thread
From: kernel test robot @ 2026-03-02 23:58 UTC (permalink / raw)
To: Finn Thain
Cc: oe-kbuild-all, linux-kernel, Andrew Morton,
Linux Memory Management List, Arnd Bergmann
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head: af4e9ef3d78420feb8fe58cd9a1ab80c501b3c08
commit: e428b013d9dff30f7a65509e33047ba975cce8ba atomic: specify alignment for atomic_t and atomic64_t
date: 5 weeks ago
config: m68k-randconfig-r133-20260303 (https://download.01.org/0day-ci/archive/20260303/202603030747.VX0v4otS-lkp@intel.com/config)
compiler: m68k-linux-gcc (GCC) 8.5.0
sparse: v0.6.5-rc1
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260303/202603030747.VX0v4otS-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202603030747.VX0v4otS-lkp@intel.com/
All errors (new ones prefixed by >>):
In file included from <command-line>:
In function 'qlt_queue_unknown_atio',
inlined from 'qlt_24xx_atio_pkt_all_vps' at drivers/scsi/qla2xxx/qla_target.c:331:4,
inlined from 'qlt_24xx_process_atio_queue' at drivers/scsi/qla2xxx/qla_target.c:7903:4:
>> include/linux/compiler_types.h:631:38: error: call to '__compiletime_assert_431' declared with attribute error: BUILD_BUG_ON failed: offsetof(struct qla_tgt_sess_op, atio) + sizeof(u->atio) != sizeof(*u)
_compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
^
include/linux/compiler_types.h:612:4: note: in definition of macro '__compiletime_assert'
prefix ## suffix(); \
^~~~~~
include/linux/compiler_types.h:631:2: note: in expansion of macro '_compiletime_assert'
_compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
^~~~~~~~~~~~~~~~~~~
include/linux/build_bug.h:39:37: note: in expansion of macro 'compiletime_assert'
#define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg)
^~~~~~~~~~~~~~~~~~
include/linux/build_bug.h:50:2: note: in expansion of macro 'BUILD_BUG_ON_MSG'
BUILD_BUG_ON_MSG(condition, "BUILD_BUG_ON failed: " #condition)
^~~~~~~~~~~~~~~~
drivers/scsi/qla2xxx/qla_target.c:216:2: note: in expansion of macro 'BUILD_BUG_ON'
BUILD_BUG_ON(offsetof(struct qla_tgt_sess_op, atio) + sizeof(u->atio) != sizeof(*u));
^~~~~~~~~~~~
Kconfig warnings: (for reference only)
WARNING: unmet direct dependencies detected for NET_SELFTESTS
Depends on [n]: NET [=y] && PHYLIB [=y] && INET [=n]
Selected by [y]:
- AMD_XGBE [=y] && NETDEVICES [=y] && ETHERNET [=y] && NET_VENDOR_AMD [=y] && (OF_ADDRESS [=y] || ACPI || PCI [=y]) && HAS_IOMEM [=y] && (X86 || ARM64 || COMPILE_TEST [=y]) && PTP_1588_CLOCK_OPTIONAL [=y]
vim +/__compiletime_assert_431 +631 include/linux/compiler_types.h
eb5c2d4b45e3d2 Will Deacon 2020-07-21 617
eb5c2d4b45e3d2 Will Deacon 2020-07-21 618 #define _compiletime_assert(condition, msg, prefix, suffix) \
eb5c2d4b45e3d2 Will Deacon 2020-07-21 619 __compiletime_assert(condition, msg, prefix, suffix)
eb5c2d4b45e3d2 Will Deacon 2020-07-21 620
eb5c2d4b45e3d2 Will Deacon 2020-07-21 621 /**
eb5c2d4b45e3d2 Will Deacon 2020-07-21 622 * compiletime_assert - break build and emit msg if condition is false
eb5c2d4b45e3d2 Will Deacon 2020-07-21 623 * @condition: a compile-time constant condition to check
eb5c2d4b45e3d2 Will Deacon 2020-07-21 624 * @msg: a message to emit if condition is false
eb5c2d4b45e3d2 Will Deacon 2020-07-21 625 *
eb5c2d4b45e3d2 Will Deacon 2020-07-21 626 * In tradition of POSIX assert, this macro will break the build if the
eb5c2d4b45e3d2 Will Deacon 2020-07-21 627 * supplied condition is *false*, emitting the supplied error message if the
eb5c2d4b45e3d2 Will Deacon 2020-07-21 628 * compiler has support to do so.
eb5c2d4b45e3d2 Will Deacon 2020-07-21 629 */
eb5c2d4b45e3d2 Will Deacon 2020-07-21 630 #define compiletime_assert(condition, msg) \
eb5c2d4b45e3d2 Will Deacon 2020-07-21 @631 _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
eb5c2d4b45e3d2 Will Deacon 2020-07-21 632
:::::: The code at line 631 was first introduced by commit
:::::: eb5c2d4b45e3d2d5d052ea6b8f1463976b1020d5 compiler.h: Move compiletime_assert() macros into compiler_types.h
:::::: TO: Will Deacon <will@kernel.org>
:::::: CC: Will Deacon <will@kernel.org>
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: include/linux/compiler_types.h:631:38: error: call to '__compiletime_assert_431' declared with attribute error: BUILD_BUG_ON failed: offsetof(struct qla_tgt_sess_op, atio) + sizeof(u->atio) != sizeof(*u)
2026-03-02 23:58 include/linux/compiler_types.h:631:38: error: call to '__compiletime_assert_431' declared with attribute error: BUILD_BUG_ON failed: offsetof(struct qla_tgt_sess_op, atio) + sizeof(u->atio) != sizeof(*u) kernel test robot
@ 2026-03-03 6:48 ` Finn Thain
2026-03-03 15:29 ` Arnd Bergmann
0 siblings, 1 reply; 3+ messages in thread
From: Finn Thain @ 2026-03-03 6:48 UTC (permalink / raw)
To: Nilesh Javali
Cc: Arnd Bergmann, Andrew Morton, linux-kernel, linux-mm, oe-kbuild-all, lkp
On Tue, 3 Mar 2026, kernel test robot wrote:
> tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
> head: af4e9ef3d78420feb8fe58cd9a1ab80c501b3c08
> commit: e428b013d9dff30f7a65509e33047ba975cce8ba atomic: specify alignment for atomic_t and atomic64_t
> date: 5 weeks ago
> config: m68k-randconfig-r133-20260303 (https://download.01.org/0day-ci/archive/20260303/202603030747.VX0v4otS-lkp@intel.com/config)
> compiler: m68k-linux-gcc (GCC) 8.5.0
> sparse: v0.6.5-rc1
> reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260303/202603030747.VX0v4otS-lkp@intel.com/reproduce)
This config is an unlikely one (fibre channel storage with a coldfire
processor) which is probably why 'make randconfig' was needed in order to
expose the problem. It's essentially a theoretical bug but I will try to
patch it anyway.
What's happening here is that the patch that naturally aligned atomic_t
caused some new padding to appear at the end of this struct:
--- a/pahole.out
+++ b/pahole.out
@@ -1,16 +1,18 @@
struct qla_tgt_sess_op {
struct scsi_qla_host * vha; /* 0 4 */
uint32_t chip_reset; /* 4 4 */
- struct work_struct work; /* 8 16 */
+ struct work_struct work __attribute__((__aligned__(4))); /* 8 16 */
struct list_head cmd_list; /* 24 8 */
bool aborted; /* 32 1 */
/* XXX 1 byte hole, try to pack */
struct rsp_que * rsp; /* 34 4 */
struct atio_from_isp atio; /* 38 64 */
- /* size: 102, cachelines: 2, members: 7 */
+ /* size: 104, cachelines: 2, members: 7 */
/* sum members: 101, holes: 1, sum holes: 1 */
- /* last cacheline: 38 bytes */
-};
+ /* padding: 2 */
+ /* forced alignments: 1 */
+ /* last cacheline: 40 bytes */
+} __attribute__((__aligned__(4)));
The BUILD_BUG_ON assertion checks the size of the struct, which doesn't
seem right, because any padding at the end of the struct does not
interfere with the subsequent kzalloc() and memcpy() in
qlt_queue_unknown_atio().
I suppose the assertion could be motivated by some code elsewhere but I
haven't yet found it. So perhaps the assertion can simply be removed. An
alternative solution could be to increase the 1 byte hole to 3 bytes, and
prevent tail padding that way.
But padding should be irrelevant to the real requirement --
struct qla_tgt_sess_op {
struct scsi_qla_host *vha;
uint32_t chip_reset;
struct work_struct work;
struct list_head cmd_list;
bool aborted;
struct rsp_que *rsp;
struct atio_from_isp atio;
/* DO NOT ADD ANYTHING ELSE HERE - atio must be last member */
};
And yet, there's already a precedent in this driver for padding a struct
in order to satisfy a BUILD_BUG_ON --
struct atio7_fcp_cmnd {
uint64_t lun;
uint8_t cmnd_ref;
uint8_t task_attr:3;
uint8_t reserved:5;
uint8_t task_mgmt_flags;
#define FCP_CMND_TASK_MGMT_CLEAR_ACA 6
#define FCP_CMND_TASK_MGMT_TARGET_RESET 5
#define FCP_CMND_TASK_MGMT_LU_RESET 4
#define FCP_CMND_TASK_MGMT_CLEAR_TASK_SET 2
#define FCP_CMND_TASK_MGMT_ABORT_TASK_SET 1
uint8_t wrdata:1;
uint8_t rddata:1;
uint8_t add_cdb_len:6;
uint8_t cdb[16];
/*
* add_cdb is optional and can absent from struct atio7_fcp_cmnd. Size 4
* only to make sizeof(struct atio7_fcp_cmnd) be as expected by
* BUILD_BUG_ON in qlt_init().
*/
uint8_t add_cdb[4];
/* __le32 data_length; */
} __packed;
So I'm undecided. Any thoughts, Nilesh?
>
> If you fix the issue in a separate patch/commit (i.e. not just a new version of
> the same patch/commit), kindly add following tags
> | Reported-by: kernel test robot <lkp@intel.com>
> | Closes: https://lore.kernel.org/oe-kbuild-all/202603030747.VX0v4otS-lkp@intel.com/
>
> All errors (new ones prefixed by >>):
>
> In file included from <command-line>:
> In function 'qlt_queue_unknown_atio',
> inlined from 'qlt_24xx_atio_pkt_all_vps' at drivers/scsi/qla2xxx/qla_target.c:331:4,
> inlined from 'qlt_24xx_process_atio_queue' at drivers/scsi/qla2xxx/qla_target.c:7903:4:
> >> include/linux/compiler_types.h:631:38: error: call to '__compiletime_assert_431' declared with attribute error: BUILD_BUG_ON failed: offsetof(struct qla_tgt_sess_op, atio) + sizeof(u->atio) != sizeof(*u)
> _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
> ^
> include/linux/compiler_types.h:612:4: note: in definition of macro '__compiletime_assert'
> prefix ## suffix(); \
> ^~~~~~
> include/linux/compiler_types.h:631:2: note: in expansion of macro '_compiletime_assert'
> _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
> ^~~~~~~~~~~~~~~~~~~
> include/linux/build_bug.h:39:37: note: in expansion of macro 'compiletime_assert'
> #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg)
> ^~~~~~~~~~~~~~~~~~
> include/linux/build_bug.h:50:2: note: in expansion of macro 'BUILD_BUG_ON_MSG'
> BUILD_BUG_ON_MSG(condition, "BUILD_BUG_ON failed: " #condition)
> ^~~~~~~~~~~~~~~~
> drivers/scsi/qla2xxx/qla_target.c:216:2: note: in expansion of macro 'BUILD_BUG_ON'
> BUILD_BUG_ON(offsetof(struct qla_tgt_sess_op, atio) + sizeof(u->atio) != sizeof(*u));
> ^~~~~~~~~~~~
>
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: include/linux/compiler_types.h:631:38: error: call to '__compiletime_assert_431' declared with attribute error: BUILD_BUG_ON failed: offsetof(struct qla_tgt_sess_op, atio) + sizeof(u->atio) != sizeof(*u)
2026-03-03 6:48 ` Finn Thain
@ 2026-03-03 15:29 ` Arnd Bergmann
0 siblings, 0 replies; 3+ messages in thread
From: Arnd Bergmann @ 2026-03-03 15:29 UTC (permalink / raw)
To: Finn Thain, Nilesh Javali
Cc: Andrew Morton, linux-kernel, linux-mm, oe-kbuild-all, kernel test robot
On Tue, Mar 3, 2026, at 07:48, Finn Thain wrote:
>
> --- a/pahole.out
> +++ b/pahole.out
> @@ -1,16 +1,18 @@
> struct qla_tgt_sess_op {
> struct scsi_qla_host * vha; /* 0
> 4 */
> uint32_t chip_reset; /* 4
> 4 */
> - struct work_struct work; /* 8
> 16 */
> + struct work_struct work
> __attribute__((__aligned__(4))); /* 8 16 */
> struct list_head cmd_list; /* 24
> 8 */
> bool aborted; /* 32
> 1 */
>
> /* XXX 1 byte hole, try to pack */
>
> struct rsp_que * rsp; /* 34 4 */
> struct atio_from_isp atio; /* 38 64 */
>
> - /* size: 102, cachelines: 2, members: 7 */
> + /* size: 104, cachelines: 2, members: 7 */
> /* sum members: 101, holes: 1, sum holes: 1 */
> - /* last cacheline: 38 bytes */
> -};
> + /* padding: 2 */
> + /* forced alignments: 1 */
> + /* last cacheline: 40 bytes */
> +} __attribute__((__aligned__(4)));
>
>
> The BUILD_BUG_ON assertion checks the size of the struct, which doesn't
> seem right, because any padding at the end of the struct does not
> interfere with the subsequent kzalloc() and memcpy() in
> qlt_queue_unknown_atio().
As far as I can tell, the assertion is always true on all architectures
other than m68k because "struct rsp_que *rsp" is word-aligned and
"struct atio_from_isp atio" is either 64 bytes long. The intention
of the assertion is to ensure that nothing got added after atio,
though the way it is written does not take misaligned atio into
account.
> I suppose the assertion could be motivated by some code elsewhere but I
> haven't yet found it. So perhaps the assertion can simply be removed. An
> alternative solution could be to increase the 1 byte hole to 3 bytes, and
> prevent tail padding that way.
The simplest way would be to force atio itself to be aligned
regardless of the architecture, either by removing the __packed
attribute on the struct nack_from_isp definition, or by
adding alignment on the variable:
--- a/drivers/scsi/qla2xxx/qla_target.h
+++ b/drivers/scsi/qla2xxx/qla_target.h
@@ -844,7 +844,7 @@ struct qla_tgt_sess_op {
bool aborted;
struct rsp_que *rsp;
- struct atio_from_isp atio;
+ struct atio_from_isp atio __aligned(8);
/* DO NOT ADD ANYTHING ELSE HERE - atio must be last member */
};
In general, the use of __packed attributes in this file
seems a bit inconsistent, with outer structures being packed
but containing aligned inner structures like atio_from_isp
and nack_to_isp. It may be best to review all of them and
remove as much as possible, but that's not necessary as a bug
fix here.
Arnd
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2026-03-03 15:30 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-03-02 23:58 include/linux/compiler_types.h:631:38: error: call to '__compiletime_assert_431' declared with attribute error: BUILD_BUG_ON failed: offsetof(struct qla_tgt_sess_op, atio) + sizeof(u->atio) != sizeof(*u) kernel test robot
2026-03-03 6:48 ` Finn Thain
2026-03-03 15:29 ` Arnd Bergmann
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox