linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
From: Finn Thain <fthain@linux-m68k.org>
To: Nilesh Javali <njavali@marvell.com>
Cc: Arnd Bergmann <arnd@arndb.de>,
	Andrew Morton <akpm@linux-foundation.org>,
	 linux-kernel@vger.kernel.org, linux-mm@kvack.org,
	 oe-kbuild-all@lists.linux.dev, lkp@intel.com
Subject: 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)
Date: Tue, 3 Mar 2026 17:48:48 +1100 (AEDT)	[thread overview]
Message-ID: <6bc11e2f-393d-16a2-9664-a20e2f1d3767@linux-m68k.org> (raw)
In-Reply-To: <202603030747.VX0v4otS-lkp@intel.com>


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));
>      ^~~~~~~~~~~~
> 


      reply	other threads:[~2026-03-03  6:47 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-03-02 23:58 kernel test robot
2026-03-03  6:48 ` Finn Thain [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=6bc11e2f-393d-16a2-9664-a20e2f1d3767@linux-m68k.org \
    --to=fthain@linux-m68k.org \
    --cc=akpm@linux-foundation.org \
    --cc=arnd@arndb.de \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=lkp@intel.com \
    --cc=njavali@marvell.com \
    --cc=oe-kbuild-all@lists.linux.dev \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox