* [Intel-wired-lan] [tnguy-net-queue:dev-queue 2/12] include/linux/build_bug.h:78:41: error: static assertion failed: "sizeof(__uapi_uuid_t) == sizeof(uuid_t) && __alignof__(__uapi_uuid_t) == __alignof__(uuid_t)"
@ 2025-04-04 20:30 ` kernel test robot
0 siblings, 0 replies; 12+ messages in thread
From: kernel test robot @ 2025-04-04 20:30 UTC (permalink / raw)
To: Dan Williams; +Cc: oe-kbuild-all, Intel Wired LAN, Tony Nguyen
tree: https://git.kernel.org/pub/scm/linux/kernel/git/tnguy/net-queue.git dev-queue
head: 41ab790c342f99d9eb891807b2ff00caa56804b9
commit: a4bf8e3b34147889963e4c46d1e7916f7157b784 [2/12] fwctl/cxl: Fix uuid_t usage in uapi
config: arm-randconfig-003-20250405 (https://download.01.org/0day-ci/archive/20250405/202504050434.Eb4vugh5-lkp@intel.com/config)
compiler: arm-linux-gnueabi-gcc (GCC) 8.5.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250405/202504050434.Eb4vugh5-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/202504050434.Eb4vugh5-lkp@intel.com/
All errors (new ones prefixed by >>):
In file included from include/linux/bits.h:22,
from include/linux/ratelimit_types.h:5,
from include/linux/ratelimit.h:5,
from include/linux/dev_printk.h:16,
from include/linux/device.h:15,
from drivers/cxl/port.c:3:
>> include/linux/build_bug.h:78:41: error: static assertion failed: "sizeof(__uapi_uuid_t) == sizeof(uuid_t) && __alignof__(__uapi_uuid_t) == __alignof__(uuid_t)"
#define __static_assert(expr, msg, ...) _Static_assert(expr, msg)
^~~~~~~~~~~~~~
include/linux/build_bug.h:77:34: note: in expansion of macro '__static_assert'
#define static_assert(expr, ...) __static_assert(expr, ##__VA_ARGS__, #expr)
^~~~~~~~~~~~~~~
include/uapi/cxl/features.h:16:1: note: in expansion of macro 'static_assert'
static_assert(sizeof(__uapi_uuid_t) == sizeof(uuid_t) &&
^~~~~~~~~~~~~
vim +78 include/linux/build_bug.h
bc6245e5efd70c Ian Abbott 2017-07-10 60
6bab69c65013be Rasmus Villemoes 2019-03-07 61 /**
6bab69c65013be Rasmus Villemoes 2019-03-07 62 * static_assert - check integer constant expression at build time
6bab69c65013be Rasmus Villemoes 2019-03-07 63 *
6bab69c65013be Rasmus Villemoes 2019-03-07 64 * static_assert() is a wrapper for the C11 _Static_assert, with a
6bab69c65013be Rasmus Villemoes 2019-03-07 65 * little macro magic to make the message optional (defaulting to the
6bab69c65013be Rasmus Villemoes 2019-03-07 66 * stringification of the tested expression).
6bab69c65013be Rasmus Villemoes 2019-03-07 67 *
6bab69c65013be Rasmus Villemoes 2019-03-07 68 * Contrary to BUILD_BUG_ON(), static_assert() can be used at global
6bab69c65013be Rasmus Villemoes 2019-03-07 69 * scope, but requires the expression to be an integer constant
6bab69c65013be Rasmus Villemoes 2019-03-07 70 * expression (i.e., it is not enough that __builtin_constant_p() is
6bab69c65013be Rasmus Villemoes 2019-03-07 71 * true for expr).
6bab69c65013be Rasmus Villemoes 2019-03-07 72 *
6bab69c65013be Rasmus Villemoes 2019-03-07 73 * Also note that BUILD_BUG_ON() fails the build if the condition is
6bab69c65013be Rasmus Villemoes 2019-03-07 74 * true, while static_assert() fails the build if the expression is
6bab69c65013be Rasmus Villemoes 2019-03-07 75 * false.
6bab69c65013be Rasmus Villemoes 2019-03-07 76 */
6bab69c65013be Rasmus Villemoes 2019-03-07 77 #define static_assert(expr, ...) __static_assert(expr, ##__VA_ARGS__, #expr)
6bab69c65013be Rasmus Villemoes 2019-03-07 @78 #define __static_assert(expr, msg, ...) _Static_assert(expr, msg)
6bab69c65013be Rasmus Villemoes 2019-03-07 79
07a368b3f55a79 Maxim Levitsky 2022-10-25 80
:::::: The code at line 78 was first introduced by commit
:::::: 6bab69c65013bed5fce9f101a64a84d0385b3946 build_bug.h: add wrapper for _Static_assert
:::::: TO: Rasmus Villemoes <linux@rasmusvillemoes.dk>
:::::: CC: Linus Torvalds <torvalds@linux-foundation.org>
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 12+ messages in thread* [tnguy-net-queue:dev-queue 2/12] include/linux/build_bug.h:78:41: error: static assertion failed: "sizeof(__uapi_uuid_t) == sizeof(uuid_t) && __alignof__(__uapi_uuid_t) == __alignof__(uuid_t)"
@ 2025-04-04 20:30 ` kernel test robot
0 siblings, 0 replies; 12+ messages in thread
From: kernel test robot @ 2025-04-04 20:30 UTC (permalink / raw)
To: Dan Williams; +Cc: oe-kbuild-all, Intel Wired LAN, Tony Nguyen
tree: https://git.kernel.org/pub/scm/linux/kernel/git/tnguy/net-queue.git dev-queue
head: 41ab790c342f99d9eb891807b2ff00caa56804b9
commit: a4bf8e3b34147889963e4c46d1e7916f7157b784 [2/12] fwctl/cxl: Fix uuid_t usage in uapi
config: arm-randconfig-003-20250405 (https://download.01.org/0day-ci/archive/20250405/202504050434.Eb4vugh5-lkp@intel.com/config)
compiler: arm-linux-gnueabi-gcc (GCC) 8.5.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250405/202504050434.Eb4vugh5-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/202504050434.Eb4vugh5-lkp@intel.com/
All errors (new ones prefixed by >>):
In file included from include/linux/bits.h:22,
from include/linux/ratelimit_types.h:5,
from include/linux/ratelimit.h:5,
from include/linux/dev_printk.h:16,
from include/linux/device.h:15,
from drivers/cxl/port.c:3:
>> include/linux/build_bug.h:78:41: error: static assertion failed: "sizeof(__uapi_uuid_t) == sizeof(uuid_t) && __alignof__(__uapi_uuid_t) == __alignof__(uuid_t)"
#define __static_assert(expr, msg, ...) _Static_assert(expr, msg)
^~~~~~~~~~~~~~
include/linux/build_bug.h:77:34: note: in expansion of macro '__static_assert'
#define static_assert(expr, ...) __static_assert(expr, ##__VA_ARGS__, #expr)
^~~~~~~~~~~~~~~
include/uapi/cxl/features.h:16:1: note: in expansion of macro 'static_assert'
static_assert(sizeof(__uapi_uuid_t) == sizeof(uuid_t) &&
^~~~~~~~~~~~~
vim +78 include/linux/build_bug.h
bc6245e5efd70c Ian Abbott 2017-07-10 60
6bab69c65013be Rasmus Villemoes 2019-03-07 61 /**
6bab69c65013be Rasmus Villemoes 2019-03-07 62 * static_assert - check integer constant expression at build time
6bab69c65013be Rasmus Villemoes 2019-03-07 63 *
6bab69c65013be Rasmus Villemoes 2019-03-07 64 * static_assert() is a wrapper for the C11 _Static_assert, with a
6bab69c65013be Rasmus Villemoes 2019-03-07 65 * little macro magic to make the message optional (defaulting to the
6bab69c65013be Rasmus Villemoes 2019-03-07 66 * stringification of the tested expression).
6bab69c65013be Rasmus Villemoes 2019-03-07 67 *
6bab69c65013be Rasmus Villemoes 2019-03-07 68 * Contrary to BUILD_BUG_ON(), static_assert() can be used at global
6bab69c65013be Rasmus Villemoes 2019-03-07 69 * scope, but requires the expression to be an integer constant
6bab69c65013be Rasmus Villemoes 2019-03-07 70 * expression (i.e., it is not enough that __builtin_constant_p() is
6bab69c65013be Rasmus Villemoes 2019-03-07 71 * true for expr).
6bab69c65013be Rasmus Villemoes 2019-03-07 72 *
6bab69c65013be Rasmus Villemoes 2019-03-07 73 * Also note that BUILD_BUG_ON() fails the build if the condition is
6bab69c65013be Rasmus Villemoes 2019-03-07 74 * true, while static_assert() fails the build if the expression is
6bab69c65013be Rasmus Villemoes 2019-03-07 75 * false.
6bab69c65013be Rasmus Villemoes 2019-03-07 76 */
6bab69c65013be Rasmus Villemoes 2019-03-07 77 #define static_assert(expr, ...) __static_assert(expr, ##__VA_ARGS__, #expr)
6bab69c65013be Rasmus Villemoes 2019-03-07 @78 #define __static_assert(expr, msg, ...) _Static_assert(expr, msg)
6bab69c65013be Rasmus Villemoes 2019-03-07 79
07a368b3f55a79 Maxim Levitsky 2022-10-25 80
:::::: The code at line 78 was first introduced by commit
:::::: 6bab69c65013bed5fce9f101a64a84d0385b3946 build_bug.h: add wrapper for _Static_assert
:::::: TO: Rasmus Villemoes <linux@rasmusvillemoes.dk>
:::::: CC: Linus Torvalds <torvalds@linux-foundation.org>
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 12+ messages in thread* Re: [Intel-wired-lan] [tnguy-net-queue:dev-queue 2/12] include/linux/build_bug.h:78:41: error: static assertion failed: "sizeof(__uapi_uuid_t) == sizeof(uuid_t) && __alignof__(__uapi_uuid_t) == __alignof__(uuid_t)"
2025-04-04 20:30 ` kernel test robot
@ 2025-04-10 2:01 ` Dan Williams
-1 siblings, 0 replies; 12+ messages in thread
From: Dan Williams @ 2025-04-10 2:01 UTC (permalink / raw)
To: kernel test robot, Dan Williams
Cc: oe-kbuild-all, Intel Wired LAN, Tony Nguyen, jgg, linux-cxl
[add Jason, linux-cxl]
Heads up for a new __uapi_uuid_t patch.
kernel test robot wrote:
> tree: https://git.kernel.org/pub/scm/linux/kernel/git/tnguy/net-queue.git dev-queue
> head: 41ab790c342f99d9eb891807b2ff00caa56804b9
> commit: a4bf8e3b34147889963e4c46d1e7916f7157b784 [2/12] fwctl/cxl: Fix uuid_t usage in uapi
> config: arm-randconfig-003-20250405 (https://download.01.org/0day-ci/archive/20250405/202504050434.Eb4vugh5-lkp@intel.com/config)
> compiler: arm-linux-gnueabi-gcc (GCC) 8.5.0
> reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250405/202504050434.Eb4vugh5-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/202504050434.Eb4vugh5-lkp@intel.com/
>
> All errors (new ones prefixed by >>):
>
> In file included from include/linux/bits.h:22,
> from include/linux/ratelimit_types.h:5,
> from include/linux/ratelimit.h:5,
> from include/linux/dev_printk.h:16,
> from include/linux/device.h:15,
> from drivers/cxl/port.c:3:
> >> include/linux/build_bug.h:78:41: error: static assertion failed: "sizeof(__uapi_uuid_t) == sizeof(uuid_t) && __alignof__(__uapi_uuid_t) == __alignof__(uuid_t)"
> #define __static_assert(expr, msg, ...) _Static_assert(expr, msg)
> ^~~~~~~~~~~~~~
> include/linux/build_bug.h:77:34: note: in expansion of macro '__static_assert'
> #define static_assert(expr, ...) __static_assert(expr, ##__VA_ARGS__, #expr)
> ^~~~~~~~~~~~~~~
> include/uapi/cxl/features.h:16:1: note: in expansion of macro 'static_assert'
> static_assert(sizeof(__uapi_uuid_t) == sizeof(uuid_t) &&
> ^~~~~~~~~~~~~
It turns out that on ARM the alignment of __uapi_uuid_t is 1 and the
alignment of uuid_t is 4. However, this check is not actually concerned
with the base alignment of the type, but whether it changes the size and
alignment of a structure that contains the type. The following fixes the
warning for me. I will send out a revised patch with that tomorrow if it
looks good.
diff --git a/include/uapi/cxl/features.h b/include/uapi/cxl/features.h
index dd8874860cec..06a1ae3f3fd0 100644
--- a/include/uapi/cxl/features.h
+++ b/include/uapi/cxl/features.h
@@ -14,7 +14,8 @@ typedef unsigned char __uapi_uuid_t[16];
#ifdef __KERNEL__
#include <linux/uuid.h>
static_assert(sizeof(__uapi_uuid_t) == sizeof(uuid_t) &&
- __alignof__(__uapi_uuid_t) == __alignof__(uuid_t));
+ __alignof__(struct { __uapi_uuid_t uuid; }) ==
+ __alignof__(struct { uuid_t uuid; }));
#define __uapi_uuid_t uuid_t
#endif
^ permalink raw reply related [flat|nested] 12+ messages in thread* Re: [tnguy-net-queue:dev-queue 2/12] include/linux/build_bug.h:78:41: error: static assertion failed: "sizeof(__uapi_uuid_t) == sizeof(uuid_t) && __alignof__(__uapi_uuid_t) == __alignof__(uuid_t)"
@ 2025-04-10 2:01 ` Dan Williams
0 siblings, 0 replies; 12+ messages in thread
From: Dan Williams @ 2025-04-10 2:01 UTC (permalink / raw)
To: kernel test robot, Dan Williams
Cc: oe-kbuild-all, Intel Wired LAN, Tony Nguyen, jgg, linux-cxl
[add Jason, linux-cxl]
Heads up for a new __uapi_uuid_t patch.
kernel test robot wrote:
> tree: https://git.kernel.org/pub/scm/linux/kernel/git/tnguy/net-queue.git dev-queue
> head: 41ab790c342f99d9eb891807b2ff00caa56804b9
> commit: a4bf8e3b34147889963e4c46d1e7916f7157b784 [2/12] fwctl/cxl: Fix uuid_t usage in uapi
> config: arm-randconfig-003-20250405 (https://download.01.org/0day-ci/archive/20250405/202504050434.Eb4vugh5-lkp@intel.com/config)
> compiler: arm-linux-gnueabi-gcc (GCC) 8.5.0
> reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250405/202504050434.Eb4vugh5-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/202504050434.Eb4vugh5-lkp@intel.com/
>
> All errors (new ones prefixed by >>):
>
> In file included from include/linux/bits.h:22,
> from include/linux/ratelimit_types.h:5,
> from include/linux/ratelimit.h:5,
> from include/linux/dev_printk.h:16,
> from include/linux/device.h:15,
> from drivers/cxl/port.c:3:
> >> include/linux/build_bug.h:78:41: error: static assertion failed: "sizeof(__uapi_uuid_t) == sizeof(uuid_t) && __alignof__(__uapi_uuid_t) == __alignof__(uuid_t)"
> #define __static_assert(expr, msg, ...) _Static_assert(expr, msg)
> ^~~~~~~~~~~~~~
> include/linux/build_bug.h:77:34: note: in expansion of macro '__static_assert'
> #define static_assert(expr, ...) __static_assert(expr, ##__VA_ARGS__, #expr)
> ^~~~~~~~~~~~~~~
> include/uapi/cxl/features.h:16:1: note: in expansion of macro 'static_assert'
> static_assert(sizeof(__uapi_uuid_t) == sizeof(uuid_t) &&
> ^~~~~~~~~~~~~
It turns out that on ARM the alignment of __uapi_uuid_t is 1 and the
alignment of uuid_t is 4. However, this check is not actually concerned
with the base alignment of the type, but whether it changes the size and
alignment of a structure that contains the type. The following fixes the
warning for me. I will send out a revised patch with that tomorrow if it
looks good.
diff --git a/include/uapi/cxl/features.h b/include/uapi/cxl/features.h
index dd8874860cec..06a1ae3f3fd0 100644
--- a/include/uapi/cxl/features.h
+++ b/include/uapi/cxl/features.h
@@ -14,7 +14,8 @@ typedef unsigned char __uapi_uuid_t[16];
#ifdef __KERNEL__
#include <linux/uuid.h>
static_assert(sizeof(__uapi_uuid_t) == sizeof(uuid_t) &&
- __alignof__(__uapi_uuid_t) == __alignof__(uuid_t));
+ __alignof__(struct { __uapi_uuid_t uuid; }) ==
+ __alignof__(struct { uuid_t uuid; }));
#define __uapi_uuid_t uuid_t
#endif
^ permalink raw reply related [flat|nested] 12+ messages in thread* Re: [Intel-wired-lan] [tnguy-net-queue:dev-queue 2/12] include/linux/build_bug.h:78:41: error: static assertion failed: "sizeof(__uapi_uuid_t) == sizeof(uuid_t) && __alignof__(__uapi_uuid_t) == __alignof__(uuid_t)"
2025-04-10 2:01 ` Dan Williams
@ 2025-04-10 11:59 ` Jason Gunthorpe
-1 siblings, 0 replies; 12+ messages in thread
From: Jason Gunthorpe @ 2025-04-10 11:59 UTC (permalink / raw)
To: Dan Williams; +Cc: Tony Nguyen, Intel Wired LAN, linux-cxl, oe-kbuild-all
On Wed, Apr 09, 2025 at 07:01:29PM -0700, Dan Williams wrote:
> diff --git a/include/uapi/cxl/features.h b/include/uapi/cxl/features.h
> index dd8874860cec..06a1ae3f3fd0 100644
> --- a/include/uapi/cxl/features.h
> +++ b/include/uapi/cxl/features.h
> @@ -14,7 +14,8 @@ typedef unsigned char __uapi_uuid_t[16];
> #ifdef __KERNEL__
> #include <linux/uuid.h>
> static_assert(sizeof(__uapi_uuid_t) == sizeof(uuid_t) &&
> - __alignof__(__uapi_uuid_t) == __alignof__(uuid_t));
> + __alignof__(struct { __uapi_uuid_t uuid; }) ==
> + __alignof__(struct { uuid_t uuid; }));
Really? I'm surprised that the struct wrapper increases the
alignment..
Jason
^ permalink raw reply [flat|nested] 12+ messages in thread* Re: [tnguy-net-queue:dev-queue 2/12] include/linux/build_bug.h:78:41: error: static assertion failed: "sizeof(__uapi_uuid_t) == sizeof(uuid_t) && __alignof__(__uapi_uuid_t) == __alignof__(uuid_t)"
@ 2025-04-10 11:59 ` Jason Gunthorpe
0 siblings, 0 replies; 12+ messages in thread
From: Jason Gunthorpe @ 2025-04-10 11:59 UTC (permalink / raw)
To: Dan Williams
Cc: kernel test robot, oe-kbuild-all, Intel Wired LAN, Tony Nguyen,
linux-cxl
On Wed, Apr 09, 2025 at 07:01:29PM -0700, Dan Williams wrote:
> diff --git a/include/uapi/cxl/features.h b/include/uapi/cxl/features.h
> index dd8874860cec..06a1ae3f3fd0 100644
> --- a/include/uapi/cxl/features.h
> +++ b/include/uapi/cxl/features.h
> @@ -14,7 +14,8 @@ typedef unsigned char __uapi_uuid_t[16];
> #ifdef __KERNEL__
> #include <linux/uuid.h>
> static_assert(sizeof(__uapi_uuid_t) == sizeof(uuid_t) &&
> - __alignof__(__uapi_uuid_t) == __alignof__(uuid_t));
> + __alignof__(struct { __uapi_uuid_t uuid; }) ==
> + __alignof__(struct { uuid_t uuid; }));
Really? I'm surprised that the struct wrapper increases the
alignment..
Jason
^ permalink raw reply [flat|nested] 12+ messages in thread* Re: [Intel-wired-lan] [tnguy-net-queue:dev-queue 2/12] include/linux/build_bug.h:78:41: error: static assertion failed: "sizeof(__uapi_uuid_t) == sizeof(uuid_t) && __alignof__(__uapi_uuid_t) == __alignof__(uuid_t)"
2025-04-10 11:59 ` Jason Gunthorpe
@ 2025-04-10 17:48 ` Dan Williams
-1 siblings, 0 replies; 12+ messages in thread
From: Dan Williams @ 2025-04-10 17:48 UTC (permalink / raw)
To: Jason Gunthorpe, Dan Williams
Cc: Tony Nguyen, Intel Wired LAN, linux-cxl, oe-kbuild-all
Jason Gunthorpe wrote:
> On Wed, Apr 09, 2025 at 07:01:29PM -0700, Dan Williams wrote:
>
> > diff --git a/include/uapi/cxl/features.h b/include/uapi/cxl/features.h
> > index dd8874860cec..06a1ae3f3fd0 100644
> > --- a/include/uapi/cxl/features.h
> > +++ b/include/uapi/cxl/features.h
> > @@ -14,7 +14,8 @@ typedef unsigned char __uapi_uuid_t[16];
> > #ifdef __KERNEL__
> > #include <linux/uuid.h>
> > static_assert(sizeof(__uapi_uuid_t) == sizeof(uuid_t) &&
> > - __alignof__(__uapi_uuid_t) == __alignof__(uuid_t));
> > + __alignof__(struct { __uapi_uuid_t uuid; }) ==
> > + __alignof__(struct { uuid_t uuid; }));
>
> Really? I'm surprised that the struct wrapper increases the
> alignment..
I was also surprised that gcc has different rules for this alignment
across compilers. Empirically this change solves the assertion, but I
admit this was just the result of tinkering until the error goes away.
For this arm-gcc-8.5.0 compiler the alignments are:
1: __uapi_uuid_t
4: uuid_t
4: struct { __uapi_uuid_t uuid; }
4: struct { uuid_t uuid; }
For x86-gcc-14.2.1:
1: __uapi_uuid_t
1: uuid_t
1: struct { __uapi_uuid_t uuid; }
1: struct { uuid_t uuid; }
So your intution that the struct wrapper does not matter holds in that
latter case.
^ permalink raw reply [flat|nested] 12+ messages in thread* Re: [tnguy-net-queue:dev-queue 2/12] include/linux/build_bug.h:78:41: error: static assertion failed: "sizeof(__uapi_uuid_t) == sizeof(uuid_t) && __alignof__(__uapi_uuid_t) == __alignof__(uuid_t)"
@ 2025-04-10 17:48 ` Dan Williams
0 siblings, 0 replies; 12+ messages in thread
From: Dan Williams @ 2025-04-10 17:48 UTC (permalink / raw)
To: Jason Gunthorpe, Dan Williams
Cc: kernel test robot, oe-kbuild-all, Intel Wired LAN, Tony Nguyen,
linux-cxl
Jason Gunthorpe wrote:
> On Wed, Apr 09, 2025 at 07:01:29PM -0700, Dan Williams wrote:
>
> > diff --git a/include/uapi/cxl/features.h b/include/uapi/cxl/features.h
> > index dd8874860cec..06a1ae3f3fd0 100644
> > --- a/include/uapi/cxl/features.h
> > +++ b/include/uapi/cxl/features.h
> > @@ -14,7 +14,8 @@ typedef unsigned char __uapi_uuid_t[16];
> > #ifdef __KERNEL__
> > #include <linux/uuid.h>
> > static_assert(sizeof(__uapi_uuid_t) == sizeof(uuid_t) &&
> > - __alignof__(__uapi_uuid_t) == __alignof__(uuid_t));
> > + __alignof__(struct { __uapi_uuid_t uuid; }) ==
> > + __alignof__(struct { uuid_t uuid; }));
>
> Really? I'm surprised that the struct wrapper increases the
> alignment..
I was also surprised that gcc has different rules for this alignment
across compilers. Empirically this change solves the assertion, but I
admit this was just the result of tinkering until the error goes away.
For this arm-gcc-8.5.0 compiler the alignments are:
1: __uapi_uuid_t
4: uuid_t
4: struct { __uapi_uuid_t uuid; }
4: struct { uuid_t uuid; }
For x86-gcc-14.2.1:
1: __uapi_uuid_t
1: uuid_t
1: struct { __uapi_uuid_t uuid; }
1: struct { uuid_t uuid; }
So your intution that the struct wrapper does not matter holds in that
latter case.
^ permalink raw reply [flat|nested] 12+ messages in thread* Re: [Intel-wired-lan] [tnguy-net-queue:dev-queue 2/12] include/linux/build_bug.h:78:41: error: static assertion failed: "sizeof(__uapi_uuid_t) == sizeof(uuid_t) && __alignof__(__uapi_uuid_t) == __alignof__(uuid_t)"
2025-04-10 17:48 ` Dan Williams
@ 2025-04-10 17:57 ` Jason Gunthorpe
-1 siblings, 0 replies; 12+ messages in thread
From: Jason Gunthorpe @ 2025-04-10 17:57 UTC (permalink / raw)
To: Dan Williams; +Cc: Tony Nguyen, Intel Wired LAN, linux-cxl, oe-kbuild-all
On Thu, Apr 10, 2025 at 10:48:00AM -0700, Dan Williams wrote:
> Jason Gunthorpe wrote:
> > On Wed, Apr 09, 2025 at 07:01:29PM -0700, Dan Williams wrote:
> >
> > > diff --git a/include/uapi/cxl/features.h b/include/uapi/cxl/features.h
> > > index dd8874860cec..06a1ae3f3fd0 100644
> > > --- a/include/uapi/cxl/features.h
> > > +++ b/include/uapi/cxl/features.h
> > > @@ -14,7 +14,8 @@ typedef unsigned char __uapi_uuid_t[16];
> > > #ifdef __KERNEL__
> > > #include <linux/uuid.h>
> > > static_assert(sizeof(__uapi_uuid_t) == sizeof(uuid_t) &&
> > > - __alignof__(__uapi_uuid_t) == __alignof__(uuid_t));
> > > + __alignof__(struct { __uapi_uuid_t uuid; }) ==
> > > + __alignof__(struct { uuid_t uuid; }));
> >
> > Really? I'm surprised that the struct wrapper increases the
> > alignment..
>
> I was also surprised that gcc has different rules for this alignment
> across compilers. Empirically this change solves the assertion, but I
> admit this was just the result of tinkering until the error goes away.
Hurm.
So the reason to have the align check is to ensure that when it is
embedded in the structs it doesn't change the layout of the struct.
The only use is this:
struct cxl_feat_entry {
uuid_t uuid;
__le16 id;
Which is fine, but if instead it was:
struct cxl_feat_entry {
__le16 id;
uuid_t uuid;
Then you have a problem as the align by 1 version will have no
padding while the align by 4 will have 2 bytes padding.
Wrapping in a struct for the static_assert does not prevent the above
issue..
So maybe the answer is to drop the alignof check entirely and add a
comment explaining that uuid must only be placed on 4 byte aligned
offsets and all structs must have explicit padding.
Jason
^ permalink raw reply [flat|nested] 12+ messages in thread* Re: [tnguy-net-queue:dev-queue 2/12] include/linux/build_bug.h:78:41: error: static assertion failed: "sizeof(__uapi_uuid_t) == sizeof(uuid_t) && __alignof__(__uapi_uuid_t) == __alignof__(uuid_t)"
@ 2025-04-10 17:57 ` Jason Gunthorpe
0 siblings, 0 replies; 12+ messages in thread
From: Jason Gunthorpe @ 2025-04-10 17:57 UTC (permalink / raw)
To: Dan Williams
Cc: kernel test robot, oe-kbuild-all, Intel Wired LAN, Tony Nguyen,
linux-cxl
On Thu, Apr 10, 2025 at 10:48:00AM -0700, Dan Williams wrote:
> Jason Gunthorpe wrote:
> > On Wed, Apr 09, 2025 at 07:01:29PM -0700, Dan Williams wrote:
> >
> > > diff --git a/include/uapi/cxl/features.h b/include/uapi/cxl/features.h
> > > index dd8874860cec..06a1ae3f3fd0 100644
> > > --- a/include/uapi/cxl/features.h
> > > +++ b/include/uapi/cxl/features.h
> > > @@ -14,7 +14,8 @@ typedef unsigned char __uapi_uuid_t[16];
> > > #ifdef __KERNEL__
> > > #include <linux/uuid.h>
> > > static_assert(sizeof(__uapi_uuid_t) == sizeof(uuid_t) &&
> > > - __alignof__(__uapi_uuid_t) == __alignof__(uuid_t));
> > > + __alignof__(struct { __uapi_uuid_t uuid; }) ==
> > > + __alignof__(struct { uuid_t uuid; }));
> >
> > Really? I'm surprised that the struct wrapper increases the
> > alignment..
>
> I was also surprised that gcc has different rules for this alignment
> across compilers. Empirically this change solves the assertion, but I
> admit this was just the result of tinkering until the error goes away.
Hurm.
So the reason to have the align check is to ensure that when it is
embedded in the structs it doesn't change the layout of the struct.
The only use is this:
struct cxl_feat_entry {
uuid_t uuid;
__le16 id;
Which is fine, but if instead it was:
struct cxl_feat_entry {
__le16 id;
uuid_t uuid;
Then you have a problem as the align by 1 version will have no
padding while the align by 4 will have 2 bytes padding.
Wrapping in a struct for the static_assert does not prevent the above
issue..
So maybe the answer is to drop the alignof check entirely and add a
comment explaining that uuid must only be placed on 4 byte aligned
offsets and all structs must have explicit padding.
Jason
^ permalink raw reply [flat|nested] 12+ messages in thread* Re: [Intel-wired-lan] [tnguy-net-queue:dev-queue 2/12] include/linux/build_bug.h:78:41: error: static assertion failed: "sizeof(__uapi_uuid_t) == sizeof(uuid_t) && __alignof__(__uapi_uuid_t) == __alignof__(uuid_t)"
2025-04-10 17:57 ` Jason Gunthorpe
@ 2025-04-10 18:09 ` Dan Williams
-1 siblings, 0 replies; 12+ messages in thread
From: Dan Williams @ 2025-04-10 18:09 UTC (permalink / raw)
To: Jason Gunthorpe, Dan Williams
Cc: Tony Nguyen, Intel Wired LAN, linux-cxl, oe-kbuild-all
Jason Gunthorpe wrote:
> On Thu, Apr 10, 2025 at 10:48:00AM -0700, Dan Williams wrote:
> > Jason Gunthorpe wrote:
> > > On Wed, Apr 09, 2025 at 07:01:29PM -0700, Dan Williams wrote:
> > >
> > > > diff --git a/include/uapi/cxl/features.h b/include/uapi/cxl/features.h
> > > > index dd8874860cec..06a1ae3f3fd0 100644
> > > > --- a/include/uapi/cxl/features.h
> > > > +++ b/include/uapi/cxl/features.h
> > > > @@ -14,7 +14,8 @@ typedef unsigned char __uapi_uuid_t[16];
> > > > #ifdef __KERNEL__
> > > > #include <linux/uuid.h>
> > > > static_assert(sizeof(__uapi_uuid_t) == sizeof(uuid_t) &&
> > > > - __alignof__(__uapi_uuid_t) == __alignof__(uuid_t));
> > > > + __alignof__(struct { __uapi_uuid_t uuid; }) ==
> > > > + __alignof__(struct { uuid_t uuid; }));
> > >
> > > Really? I'm surprised that the struct wrapper increases the
> > > alignment..
> >
> > I was also surprised that gcc has different rules for this alignment
> > across compilers. Empirically this change solves the assertion, but I
> > admit this was just the result of tinkering until the error goes away.
>
> Hurm.
>
> So the reason to have the align check is to ensure that when it is
> embedded in the structs it doesn't change the layout of the struct.
>
> The only use is this:
>
> struct cxl_feat_entry {
> uuid_t uuid;
> __le16 id;
>
> Which is fine, but if instead it was:
>
> struct cxl_feat_entry {
> __le16 id;
> uuid_t uuid;
>
> Then you have a problem as the align by 1 version will have no
> padding while the align by 4 will have 2 bytes padding.
>
> Wrapping in a struct for the static_assert does not prevent the above
> issue..
>
> So maybe the answer is to drop the alignof check entirely and add a
> comment explaining that uuid must only be placed on 4 byte aligned
> offsets and all structs must have explicit padding.
Yeah, that's better. Ignore my v2, will respin with a v3.
The other mitigating factor is that all of the usage of __uapi_uuid_t in
the header is in __packed structures.
^ permalink raw reply [flat|nested] 12+ messages in thread* Re: [tnguy-net-queue:dev-queue 2/12] include/linux/build_bug.h:78:41: error: static assertion failed: "sizeof(__uapi_uuid_t) == sizeof(uuid_t) && __alignof__(__uapi_uuid_t) == __alignof__(uuid_t)"
@ 2025-04-10 18:09 ` Dan Williams
0 siblings, 0 replies; 12+ messages in thread
From: Dan Williams @ 2025-04-10 18:09 UTC (permalink / raw)
To: Jason Gunthorpe, Dan Williams
Cc: kernel test robot, oe-kbuild-all, Intel Wired LAN, Tony Nguyen,
linux-cxl
Jason Gunthorpe wrote:
> On Thu, Apr 10, 2025 at 10:48:00AM -0700, Dan Williams wrote:
> > Jason Gunthorpe wrote:
> > > On Wed, Apr 09, 2025 at 07:01:29PM -0700, Dan Williams wrote:
> > >
> > > > diff --git a/include/uapi/cxl/features.h b/include/uapi/cxl/features.h
> > > > index dd8874860cec..06a1ae3f3fd0 100644
> > > > --- a/include/uapi/cxl/features.h
> > > > +++ b/include/uapi/cxl/features.h
> > > > @@ -14,7 +14,8 @@ typedef unsigned char __uapi_uuid_t[16];
> > > > #ifdef __KERNEL__
> > > > #include <linux/uuid.h>
> > > > static_assert(sizeof(__uapi_uuid_t) == sizeof(uuid_t) &&
> > > > - __alignof__(__uapi_uuid_t) == __alignof__(uuid_t));
> > > > + __alignof__(struct { __uapi_uuid_t uuid; }) ==
> > > > + __alignof__(struct { uuid_t uuid; }));
> > >
> > > Really? I'm surprised that the struct wrapper increases the
> > > alignment..
> >
> > I was also surprised that gcc has different rules for this alignment
> > across compilers. Empirically this change solves the assertion, but I
> > admit this was just the result of tinkering until the error goes away.
>
> Hurm.
>
> So the reason to have the align check is to ensure that when it is
> embedded in the structs it doesn't change the layout of the struct.
>
> The only use is this:
>
> struct cxl_feat_entry {
> uuid_t uuid;
> __le16 id;
>
> Which is fine, but if instead it was:
>
> struct cxl_feat_entry {
> __le16 id;
> uuid_t uuid;
>
> Then you have a problem as the align by 1 version will have no
> padding while the align by 4 will have 2 bytes padding.
>
> Wrapping in a struct for the static_assert does not prevent the above
> issue..
>
> So maybe the answer is to drop the alignof check entirely and add a
> comment explaining that uuid must only be placed on 4 byte aligned
> offsets and all structs must have explicit padding.
Yeah, that's better. Ignore my v2, will respin with a v3.
The other mitigating factor is that all of the usage of __uapi_uuid_t in
the header is in __packed structures.
^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2025-04-10 18:10 UTC | newest]
Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-04-04 20:30 [Intel-wired-lan] [tnguy-net-queue:dev-queue 2/12] include/linux/build_bug.h:78:41: error: static assertion failed: "sizeof(__uapi_uuid_t) == sizeof(uuid_t) && __alignof__(__uapi_uuid_t) == __alignof__(uuid_t)" kernel test robot
2025-04-04 20:30 ` kernel test robot
2025-04-10 2:01 ` [Intel-wired-lan] " Dan Williams
2025-04-10 2:01 ` Dan Williams
2025-04-10 11:59 ` [Intel-wired-lan] " Jason Gunthorpe
2025-04-10 11:59 ` Jason Gunthorpe
2025-04-10 17:48 ` [Intel-wired-lan] " Dan Williams
2025-04-10 17:48 ` Dan Williams
2025-04-10 17:57 ` [Intel-wired-lan] " Jason Gunthorpe
2025-04-10 17:57 ` Jason Gunthorpe
2025-04-10 18:09 ` [Intel-wired-lan] " Dan Williams
2025-04-10 18:09 ` Dan Williams
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.