Commit fe2f4fe1 authored by Johan Hovold's avatar Johan Hovold Committed by Jessica Yu

params: use type alignment for kernel parameters

Specify type alignment for kernel parameters instead of sizeof(void *).

The alignment attribute is used to prevent gcc from increasing the
alignment of objects with static extent as an optimisation, something
which would mess up the __param array stride.

Using __alignof__(struct kernel_param) rather than sizeof(void *) is
preferred since it better indicates why it is there and doesn't break
should the type size or alignment change.

Note that on m68k the alignment of struct kernel_param is actually two
and that adding a 1- or 2-byte field to the 20-byte struct would cause a
breakage with the current 4-byte alignment.

Link: https://lore.kernel.org/lkml/20201103175711.10731-1-johan@kernel.orgSigned-off-by: default avatarJohan Hovold <johan@kernel.org>
Signed-off-by: default avatarJessica Yu <jeyu@kernel.org>
parent 8d6615f1
...@@ -288,8 +288,8 @@ struct kparam_array ...@@ -288,8 +288,8 @@ struct kparam_array
/* Default value instead of permissions? */ \ /* Default value instead of permissions? */ \
static const char __param_str_##name[] = prefix #name; \ static const char __param_str_##name[] = prefix #name; \
static struct kernel_param __moduleparam_const __param_##name \ static struct kernel_param __moduleparam_const __param_##name \
__used \ __used __section("__param") \
__section("__param") __attribute__ ((aligned(sizeof(void *)))) \ __aligned(__alignof__(struct kernel_param)) \
= { __param_str_##name, THIS_MODULE, ops, \ = { __param_str_##name, THIS_MODULE, ops, \
VERIFY_OCTAL_PERMISSIONS(perm), level, flags, { arg } } VERIFY_OCTAL_PERMISSIONS(perm), level, flags, { arg } }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment