* Re: [PATCH v3 1/3] vdso: Switch get/put unaligned from packed struct to memcpy [not found] <20250626054826.433453-2-irogers@google.com> @ 2025-07-05 0:05 ` kernel test robot 2025-07-22 15:56 ` Thomas Gleixner 0 siblings, 1 reply; 6+ messages in thread From: kernel test robot @ 2025-07-05 0:05 UTC (permalink / raw) To: Ian Rogers, Eric Biggers, Yuzhuo Jing, Andy Lutomirski, Thomas Gleixner, Vincenzo Frascino, Arnaldo Carvalho de Melo, Al Viro, Christophe Leroy, Jason A. Donenfeld, linux-kernel, linux-perf-users Cc: llvm, oe-kbuild-all, Ian Rogers Hi Ian, kernel test robot noticed the following build warnings: [auto build test WARNING on linus/master] [also build test WARNING on tip/timers/vdso v6.16-rc4 next-20250704] [cannot apply to acme/perf/core] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch#_base_tree_information] url: https://github.com/intel-lab-lkp/linux/commits/Ian-Rogers/vdso-Switch-get-put-unaligned-from-packed-struct-to-memcpy/20250626-135005 base: linus/master patch link: https://lore.kernel.org/r/20250626054826.433453-2-irogers%40google.com patch subject: [PATCH v3 1/3] vdso: Switch get/put unaligned from packed struct to memcpy config: s390-randconfig-002-20250705 (https://download.01.org/0day-ci/archive/20250705/202507050736.b4hX0Xks-lkp@intel.com/config) compiler: clang version 21.0.0git (https://github.com/llvm/llvm-project 61529d9e36fa86782a2458e6bdeedf7f376ef4b5) reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250705/202507050736.b4hX0Xks-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/202507050736.b4hX0Xks-lkp@intel.com/ All warnings (new ones prefixed by >>): In file included from arch/s390/boot/decompressor.c:48: In file included from arch/s390/include/uapi/../../../../lib/decompress_unlz4.c:10: In file included from arch/s390/include/uapi/../../../../lib/lz4/lz4_decompress.c:36: >> arch/s390/include/uapi/../../../../lib/lz4/lz4defs.h:109:9: warning: default initialization of an object of type 'typeof (*((const U16 *)ptr))' (aka 'const unsigned short') leaves the object uninitialized [-Wdefault-const-init-var-unsafe] 109 | return get_unaligned((const U16 *)ptr); | ^ include/linux/unaligned.h:13:28: note: expanded from macro 'get_unaligned' 13 | #define get_unaligned(ptr) __get_unaligned_t(typeof(*(ptr)), (ptr)) | ^ include/vdso/unaligned.h:19:7: note: expanded from macro '__get_unaligned_t' 19 | type __get_unaligned_ctrl_type __always_unused; \ | ^ In file included from arch/s390/boot/decompressor.c:48: In file included from arch/s390/include/uapi/../../../../lib/decompress_unlz4.c:10: In file included from arch/s390/include/uapi/../../../../lib/lz4/lz4_decompress.c:36: >> arch/s390/include/uapi/../../../../lib/lz4/lz4defs.h:114:9: warning: default initialization of an object of type 'typeof (*((const U32 *)ptr))' (aka 'const unsigned int') leaves the object uninitialized [-Wdefault-const-init-var-unsafe] 114 | return get_unaligned((const U32 *)ptr); | ^ include/linux/unaligned.h:13:28: note: expanded from macro 'get_unaligned' 13 | #define get_unaligned(ptr) __get_unaligned_t(typeof(*(ptr)), (ptr)) | ^ include/vdso/unaligned.h:19:7: note: expanded from macro '__get_unaligned_t' 19 | type __get_unaligned_ctrl_type __always_unused; \ | ^ In file included from arch/s390/boot/decompressor.c:48: In file included from arch/s390/include/uapi/../../../../lib/decompress_unlz4.c:10: In file included from arch/s390/include/uapi/../../../../lib/lz4/lz4_decompress.c:36: >> arch/s390/include/uapi/../../../../lib/lz4/lz4defs.h:119:9: warning: default initialization of an object of type 'typeof (*((const size_t *)ptr))' (aka 'const unsigned long') leaves the object uninitialized [-Wdefault-const-init-var-unsafe] 119 | return get_unaligned((const size_t *)ptr); | ^ include/linux/unaligned.h:13:28: note: expanded from macro 'get_unaligned' 13 | #define get_unaligned(ptr) __get_unaligned_t(typeof(*(ptr)), (ptr)) | ^ include/vdso/unaligned.h:19:7: note: expanded from macro '__get_unaligned_t' 19 | type __get_unaligned_ctrl_type __always_unused; \ | ^ In file included from arch/s390/boot/decompressor.c:48: In file included from arch/s390/include/uapi/../../../../lib/decompress_unlz4.c:10: In file included from arch/s390/include/uapi/../../../../lib/lz4/lz4_decompress.c:36: >> arch/s390/include/uapi/../../../../lib/lz4/lz4defs.h:156:10: warning: default initialization of an object of type 'typeof (*((const U64 *)src))' (aka 'const unsigned long long') leaves the object uninitialized [-Wdefault-const-init-var-unsafe] 156 | U64 a = get_unaligned((const U64 *)src); | ^ include/linux/unaligned.h:13:28: note: expanded from macro 'get_unaligned' 13 | #define get_unaligned(ptr) __get_unaligned_t(typeof(*(ptr)), (ptr)) | ^ include/vdso/unaligned.h:19:7: note: expanded from macro '__get_unaligned_t' 19 | type __get_unaligned_ctrl_type __always_unused; \ | ^ In file included from arch/s390/boot/decompressor.c:48: arch/s390/include/uapi/../../../../lib/decompress_unlz4.c:160:29: warning: passing 'u8 *' (aka 'unsigned char *') to parameter of type 'const char *' converts between pointers to integer types where one is of the unique plain 'char' type and the other is not [-Wpointer-sign] 160 | ret = LZ4_decompress_fast(inp, outp, dest_len); | ^~~ arch/s390/include/uapi/../../../../lib/lz4/lz4_decompress.c:477:37: note: passing argument to parameter 'source' here 477 | int LZ4_decompress_fast(const char *source, char *dest, int originalSize) | ^ In file included from arch/s390/boot/decompressor.c:48: arch/s390/include/uapi/../../../../lib/decompress_unlz4.c:160:34: warning: passing 'u8 *' (aka 'unsigned char *') to parameter of type 'char *' converts between pointers to integer types where one is of the unique plain 'char' type and the other is not [-Wpointer-sign] 160 | ret = LZ4_decompress_fast(inp, outp, dest_len); | ^~~~ arch/s390/include/uapi/../../../../lib/lz4/lz4_decompress.c:477:51: note: passing argument to parameter 'dest' here 477 | int LZ4_decompress_fast(const char *source, char *dest, int originalSize) | ^ 6 warnings generated. vim +109 arch/s390/include/uapi/../../../../lib/lz4/lz4defs.h 4e1a33b105ddf2 Sven Schmidt 2017-02-24 103 4e1a33b105ddf2 Sven Schmidt 2017-02-24 104 /*-************************************ 4e1a33b105ddf2 Sven Schmidt 2017-02-24 105 * Reading and writing into memory 4e1a33b105ddf2 Sven Schmidt 2017-02-24 106 **************************************/ 4e1a33b105ddf2 Sven Schmidt 2017-02-24 107 static FORCE_INLINE U16 LZ4_read16(const void *ptr) 4e1a33b105ddf2 Sven Schmidt 2017-02-24 108 { 4e1a33b105ddf2 Sven Schmidt 2017-02-24 @109 return get_unaligned((const U16 *)ptr); 4e1a33b105ddf2 Sven Schmidt 2017-02-24 110 } 4e1a33b105ddf2 Sven Schmidt 2017-02-24 111 4e1a33b105ddf2 Sven Schmidt 2017-02-24 112 static FORCE_INLINE U32 LZ4_read32(const void *ptr) 4e1a33b105ddf2 Sven Schmidt 2017-02-24 113 { 4e1a33b105ddf2 Sven Schmidt 2017-02-24 @114 return get_unaligned((const U32 *)ptr); 4e1a33b105ddf2 Sven Schmidt 2017-02-24 115 } 4e1a33b105ddf2 Sven Schmidt 2017-02-24 116 4e1a33b105ddf2 Sven Schmidt 2017-02-24 117 static FORCE_INLINE size_t LZ4_read_ARCH(const void *ptr) 4e1a33b105ddf2 Sven Schmidt 2017-02-24 118 { 4e1a33b105ddf2 Sven Schmidt 2017-02-24 @119 return get_unaligned((const size_t *)ptr); 4e1a33b105ddf2 Sven Schmidt 2017-02-24 120 } 4e1a33b105ddf2 Sven Schmidt 2017-02-24 121 4e1a33b105ddf2 Sven Schmidt 2017-02-24 122 static FORCE_INLINE void LZ4_write16(void *memPtr, U16 value) 4e1a33b105ddf2 Sven Schmidt 2017-02-24 123 { 4e1a33b105ddf2 Sven Schmidt 2017-02-24 124 put_unaligned(value, (U16 *)memPtr); 4e1a33b105ddf2 Sven Schmidt 2017-02-24 125 } 4e1a33b105ddf2 Sven Schmidt 2017-02-24 126 4e1a33b105ddf2 Sven Schmidt 2017-02-24 127 static FORCE_INLINE void LZ4_write32(void *memPtr, U32 value) 4e1a33b105ddf2 Sven Schmidt 2017-02-24 128 { 4e1a33b105ddf2 Sven Schmidt 2017-02-24 129 put_unaligned(value, (U32 *)memPtr); 4e1a33b105ddf2 Sven Schmidt 2017-02-24 130 } 4e1a33b105ddf2 Sven Schmidt 2017-02-24 131 4e1a33b105ddf2 Sven Schmidt 2017-02-24 132 static FORCE_INLINE U16 LZ4_readLE16(const void *memPtr) 4e1a33b105ddf2 Sven Schmidt 2017-02-24 133 { 4e1a33b105ddf2 Sven Schmidt 2017-02-24 134 return get_unaligned_le16(memPtr); 4e1a33b105ddf2 Sven Schmidt 2017-02-24 135 } 4e1a33b105ddf2 Sven Schmidt 2017-02-24 136 4e1a33b105ddf2 Sven Schmidt 2017-02-24 137 static FORCE_INLINE void LZ4_writeLE16(void *memPtr, U16 value) 4e1a33b105ddf2 Sven Schmidt 2017-02-24 138 { 4e1a33b105ddf2 Sven Schmidt 2017-02-24 139 return put_unaligned_le16(value, memPtr); 4e1a33b105ddf2 Sven Schmidt 2017-02-24 140 } 4e1a33b105ddf2 Sven Schmidt 2017-02-24 141 b1a3e75e466d96 Nick Terrell 2020-08-14 142 /* b1a3e75e466d96 Nick Terrell 2020-08-14 143 * LZ4 relies on memcpy with a constant size being inlined. In freestanding b1a3e75e466d96 Nick Terrell 2020-08-14 144 * environments, the compiler can't assume the implementation of memcpy() is b1a3e75e466d96 Nick Terrell 2020-08-14 145 * standard compliant, so apply its specialized memcpy() inlining logic. When b1a3e75e466d96 Nick Terrell 2020-08-14 146 * possible, use __builtin_memcpy() to tell the compiler to analyze memcpy() b1a3e75e466d96 Nick Terrell 2020-08-14 147 * as-if it were standard compliant, so it can inline it in freestanding b1a3e75e466d96 Nick Terrell 2020-08-14 148 * environments. This is needed when decompressing the Linux Kernel, for example. b1a3e75e466d96 Nick Terrell 2020-08-14 149 */ b1a3e75e466d96 Nick Terrell 2020-08-14 150 #define LZ4_memcpy(dst, src, size) __builtin_memcpy(dst, src, size) 89b158635ad795 Gao Xiang 2020-12-15 151 #define LZ4_memmove(dst, src, size) __builtin_memmove(dst, src, size) b1a3e75e466d96 Nick Terrell 2020-08-14 152 4e1a33b105ddf2 Sven Schmidt 2017-02-24 153 static FORCE_INLINE void LZ4_copy8(void *dst, const void *src) 4e1a33b105ddf2 Sven Schmidt 2017-02-24 154 { 4e1a33b105ddf2 Sven Schmidt 2017-02-24 155 #if LZ4_ARCH64 4e1a33b105ddf2 Sven Schmidt 2017-02-24 @156 U64 a = get_unaligned((const U64 *)src); 4e1a33b105ddf2 Sven Schmidt 2017-02-24 157 4e1a33b105ddf2 Sven Schmidt 2017-02-24 158 put_unaligned(a, (U64 *)dst); c72ac7a1a926db Chanho Min 2013-07-08 159 #else 4e1a33b105ddf2 Sven Schmidt 2017-02-24 160 U32 a = get_unaligned((const U32 *)src); 4e1a33b105ddf2 Sven Schmidt 2017-02-24 161 U32 b = get_unaligned((const U32 *)src + 1); 4e1a33b105ddf2 Sven Schmidt 2017-02-24 162 4e1a33b105ddf2 Sven Schmidt 2017-02-24 163 put_unaligned(a, (U32 *)dst); 4e1a33b105ddf2 Sven Schmidt 2017-02-24 164 put_unaligned(b, (U32 *)dst + 1); c72ac7a1a926db Chanho Min 2013-07-08 165 #endif 4e1a33b105ddf2 Sven Schmidt 2017-02-24 166 } cffb78b0e0b3a3 Kyungsik Lee 2013-07-08 167 -- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests/wiki ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH v3 1/3] vdso: Switch get/put unaligned from packed struct to memcpy 2025-07-05 0:05 ` [PATCH v3 1/3] vdso: Switch get/put unaligned from packed struct to memcpy kernel test robot @ 2025-07-22 15:56 ` Thomas Gleixner 2025-07-22 16:44 ` Ian Rogers 0 siblings, 1 reply; 6+ messages in thread From: Thomas Gleixner @ 2025-07-22 15:56 UTC (permalink / raw) To: kernel test robot, Ian Rogers, Eric Biggers, Yuzhuo Jing, Andy Lutomirski, Vincenzo Frascino, Arnaldo Carvalho de Melo, Al Viro, Christophe Leroy, Jason A. Donenfeld, linux-kernel, linux-perf-users Cc: llvm, oe-kbuild-all, Ian Rogers Ian! On Sat, Jul 05 2025 at 08:05, kernel test robot wrote: > kernel test robot noticed the following build warnings: > > [auto build test WARNING on linus/master] > [also build test WARNING on tip/timers/vdso v6.16-rc4 next-20250704] > [cannot apply to acme/perf/core] > [If your patch is applied to the wrong git tree, kindly drop us a note. > And when submitting patch, we suggest to use '--base' as documented in > https://git-scm.com/docs/git-format-patch#_base_tree_information] > > url: https://github.com/intel-lab-lkp/linux/commits/Ian-Rogers/vdso-Switch-get-put-unaligned-from-packed-struct-to-memcpy/20250626-135005 > base: linus/master > patch link: https://lore.kernel.org/r/20250626054826.433453-2-irogers%40google.com > patch subject: [PATCH v3 1/3] vdso: Switch get/put unaligned from packed struct to memcpy > config: s390-randconfig-002-20250705 (https://download.01.org/0day-ci/archive/20250705/202507050736.b4hX0Xks-lkp@intel.com/config) > compiler: clang version 21.0.0git (https://github.com/llvm/llvm-project 61529d9e36fa86782a2458e6bdeedf7f376ef4b5) > reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250705/202507050736.b4hX0Xks-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/202507050736.b4hX0Xks-lkp@intel.com/ > > All warnings (new ones prefixed by >>): > > In file included from arch/s390/boot/decompressor.c:48: > In file included from arch/s390/include/uapi/../../../../lib/decompress_unlz4.c:10: > In file included from arch/s390/include/uapi/../../../../lib/lz4/lz4_decompress.c:36: >>> arch/s390/include/uapi/../../../../lib/lz4/lz4defs.h:109:9: warning: default initialization of an object of type 'typeof (*((const U16 *)ptr))' (aka 'const unsigned short') leaves the object uninitialized [-Wdefault-const-init-var-unsafe] > 109 | return get_unaligned((const U16 *)ptr); > | ^ Any update on this one? ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH v3 1/3] vdso: Switch get/put unaligned from packed struct to memcpy 2025-07-22 15:56 ` Thomas Gleixner @ 2025-07-22 16:44 ` Ian Rogers 2025-07-22 17:00 ` Ian Rogers 0 siblings, 1 reply; 6+ messages in thread From: Ian Rogers @ 2025-07-22 16:44 UTC (permalink / raw) To: Thomas Gleixner Cc: kernel test robot, Eric Biggers, Yuzhuo Jing, Andy Lutomirski, Vincenzo Frascino, Arnaldo Carvalho de Melo, Al Viro, Christophe Leroy, Jason A. Donenfeld, linux-kernel, linux-perf-users, llvm, oe-kbuild-all On Tue, Jul 22, 2025 at 8:56 AM Thomas Gleixner <tglx@linutronix.de> wrote: > > Ian! > > On Sat, Jul 05 2025 at 08:05, kernel test robot wrote: > > kernel test robot noticed the following build warnings: > > > > [auto build test WARNING on linus/master] > > [also build test WARNING on tip/timers/vdso v6.16-rc4 next-20250704] > > [cannot apply to acme/perf/core] > > [If your patch is applied to the wrong git tree, kindly drop us a note. > > And when submitting patch, we suggest to use '--base' as documented in > > https://git-scm.com/docs/git-format-patch#_base_tree_information] > > > > url: https://github.com/intel-lab-lkp/linux/commits/Ian-Rogers/vdso-Switch-get-put-unaligned-from-packed-struct-to-memcpy/20250626-135005 > > base: linus/master > > patch link: https://lore.kernel.org/r/20250626054826.433453-2-irogers%40google.com > > patch subject: [PATCH v3 1/3] vdso: Switch get/put unaligned from packed struct to memcpy > > config: s390-randconfig-002-20250705 (https://download.01.org/0day-ci/archive/20250705/202507050736.b4hX0Xks-lkp@intel.com/config) > > compiler: clang version 21.0.0git (https://github.com/llvm/llvm-project 61529d9e36fa86782a2458e6bdeedf7f376ef4b5) > > reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250705/202507050736.b4hX0Xks-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/202507050736.b4hX0Xks-lkp@intel.com/ > > > > All warnings (new ones prefixed by >>): > > > > In file included from arch/s390/boot/decompressor.c:48: > > In file included from arch/s390/include/uapi/../../../../lib/decompress_unlz4.c:10: > > In file included from arch/s390/include/uapi/../../../../lib/lz4/lz4_decompress.c:36: > >>> arch/s390/include/uapi/../../../../lib/lz4/lz4defs.h:109:9: warning: default initialization of an object of type 'typeof (*((const U16 *)ptr))' (aka 'const unsigned short') leaves the object uninitialized [-Wdefault-const-init-var-unsafe] > > 109 | return get_unaligned((const U16 *)ptr); > > | ^ > > Any update on this one? Hi Thomas! Thanks for the interest. I'm not sure how to resolve this. Basically the story in the code is: get_unaligned((const U16 *)ptr); is being expanded by: #define get_unaligned(ptr) __get_unaligned_t(typeof(*(ptr)), (ptr)) #define __get_unaligned_t(type, ptr) ({ \ type __get_unaligned_ctrl_type __always_unused; \ __unqual_scalar_typeof(__get_unaligned_ctrl_type) __get_unaligned_val; \ __builtin_memcpy(&__get_unaligned_val, (void *)(ptr), \ sizeof(__get_unaligned_val)); \ __get_unaligned_val; \ }) to: ({ const U16 __get_unaligned_ctrl_type __always_unused; __unqual_scalar_typeof(__get_unaligned_ctrl_type) __get_unaligned_val; __builtin_memcpy(&__get_unaligned_val, (void *)(ptr), sizeof(__get_unaligned_val)); __get_unaligned_val; }) which is then expanded to: ({ const U16 __get_unaligned_ctrl_type __always_unused; U16 __get_unaligned_val; __builtin_memcpy(&__get_unaligned_val, (void *)(ptr), sizeof(__get_unaligned_val)); __get_unaligned_val; }) so the analysis is correct that __get_unaligned_ctrl_type is unused, however, I've also put __always_unused on the variable. The purpose of that variable is for __unqual_scalar_typeof that passes the value to _Generic. I truly don't care about that variable but I care about it causing _Generic to get the correct type for __get_unaligned_val (that value can't be const as it is the destination of the memcpy). Why even declare __get_unaligned_ctrl_type? Well we want the result of __get_unaligned_t to match its type argument which needn't match the dereference of its pointer argument (*ptr) - I accept that in many cases it will. The value passed to _Generic is an expression and not a type, so declaring the variable and using the variable for _Generic allows this. My feeling is that my patch is correct and I'm not clear how to improve upon it. I believe it is a weakness in the analysis that the __always_unused isn't having an effect. Should adding new warnings for analysis on the code base be allowed for this patch? Well the upside to the patch is getting closer to not requiring -fno-strict-aliasing, or not introducing requiring that flag for things in the tools directory. I think the upside is good, I don't know how to mitigate the downside with poor analysis by certain tools. Thanks, Ian ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH v3 1/3] vdso: Switch get/put unaligned from packed struct to memcpy 2025-07-22 16:44 ` Ian Rogers @ 2025-07-22 17:00 ` Ian Rogers 2025-07-23 22:14 ` David Laight 2025-08-18 16:03 ` Ian Rogers 0 siblings, 2 replies; 6+ messages in thread From: Ian Rogers @ 2025-07-22 17:00 UTC (permalink / raw) To: Thomas Gleixner Cc: kernel test robot, Eric Biggers, Yuzhuo Jing, Andy Lutomirski, Vincenzo Frascino, Arnaldo Carvalho de Melo, Al Viro, Christophe Leroy, Jason A. Donenfeld, linux-kernel, linux-perf-users, llvm, oe-kbuild-all On Tue, Jul 22, 2025 at 9:44 AM Ian Rogers <irogers@google.com> wrote: > > On Tue, Jul 22, 2025 at 8:56 AM Thomas Gleixner <tglx@linutronix.de> wrote: > > > > Ian! > > > > On Sat, Jul 05 2025 at 08:05, kernel test robot wrote: > > > kernel test robot noticed the following build warnings: > > > > > > [auto build test WARNING on linus/master] > > > [also build test WARNING on tip/timers/vdso v6.16-rc4 next-20250704] > > > [cannot apply to acme/perf/core] > > > [If your patch is applied to the wrong git tree, kindly drop us a note. > > > And when submitting patch, we suggest to use '--base' as documented in > > > https://git-scm.com/docs/git-format-patch#_base_tree_information] > > > > > > url: https://github.com/intel-lab-lkp/linux/commits/Ian-Rogers/vdso-Switch-get-put-unaligned-from-packed-struct-to-memcpy/20250626-135005 > > > base: linus/master > > > patch link: https://lore.kernel.org/r/20250626054826.433453-2-irogers%40google.com > > > patch subject: [PATCH v3 1/3] vdso: Switch get/put unaligned from packed struct to memcpy > > > config: s390-randconfig-002-20250705 (https://download.01.org/0day-ci/archive/20250705/202507050736.b4hX0Xks-lkp@intel.com/config) > > > compiler: clang version 21.0.0git (https://github.com/llvm/llvm-project 61529d9e36fa86782a2458e6bdeedf7f376ef4b5) > > > reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250705/202507050736.b4hX0Xks-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/202507050736.b4hX0Xks-lkp@intel.com/ > > > > > > All warnings (new ones prefixed by >>): > > > > > > In file included from arch/s390/boot/decompressor.c:48: > > > In file included from arch/s390/include/uapi/../../../../lib/decompress_unlz4.c:10: > > > In file included from arch/s390/include/uapi/../../../../lib/lz4/lz4_decompress.c:36: > > >>> arch/s390/include/uapi/../../../../lib/lz4/lz4defs.h:109:9: warning: default initialization of an object of type 'typeof (*((const U16 *)ptr))' (aka 'const unsigned short') leaves the object uninitialized [-Wdefault-const-init-var-unsafe] > > > 109 | return get_unaligned((const U16 *)ptr); > > > | ^ > > > > Any update on this one? > > Hi Thomas! > > Thanks for the interest. I'm not sure how to resolve this. > Basically the story in the code is: > > get_unaligned((const U16 *)ptr); > > is being expanded by: > > #define get_unaligned(ptr) __get_unaligned_t(typeof(*(ptr)), (ptr)) > #define __get_unaligned_t(type, ptr) ({ > \ > type __get_unaligned_ctrl_type __always_unused; \ > __unqual_scalar_typeof(__get_unaligned_ctrl_type) __get_unaligned_val; \ > __builtin_memcpy(&__get_unaligned_val, (void *)(ptr), \ > sizeof(__get_unaligned_val)); \ > __get_unaligned_val; \ > }) > > to: > > ({ > const U16 __get_unaligned_ctrl_type __always_unused; > __unqual_scalar_typeof(__get_unaligned_ctrl_type) __get_unaligned_val; > __builtin_memcpy(&__get_unaligned_val, (void *)(ptr), > sizeof(__get_unaligned_val)); > __get_unaligned_val; > }) > > which is then expanded to: > > ({ > const U16 __get_unaligned_ctrl_type __always_unused; > U16 __get_unaligned_val; > __builtin_memcpy(&__get_unaligned_val, (void *)(ptr), > sizeof(__get_unaligned_val)); > __get_unaligned_val; > }) > > so the analysis is correct that __get_unaligned_ctrl_type is > unused, however, I've also put __always_unused on the variable. > The purpose of that variable is for __unqual_scalar_typeof that > passes the value to _Generic. I truly don't care about that > variable but I care about it causing _Generic to get the correct > type for __get_unaligned_val (that value can't be const as it is > the destination of the memcpy). Why even declare > __get_unaligned_ctrl_type? Well we want the result of __get_unaligned_t to > match its type argument which needn't match the dereference of > its pointer argument (*ptr) - I accept that in many cases it > will. The value passed to _Generic is an expression and not a > type, so declaring the variable and using the variable for > _Generic allows this. > > My feeling is that my patch is correct and I'm not clear how to > improve upon it. I believe it is a weakness in the analysis that > the __always_unused isn't having an effect. > > Should adding new warnings for analysis on the code base be > allowed for this patch? Well the upside to the patch is getting > closer to not requiring -fno-strict-aliasing, or not introducing > requiring that flag for things in the tools directory. I think > the upside is good, I don't know how to mitigate the downside > with poor analysis by certain tools. Oh, the actual warning is "leaves the object uninitialized". It is possible to silence this by changing: const U16 __get_unaligned_ctrl_type __always_unused; to something like: const U16 __get_unaligned_ctrl_type __always_unused = 0; You then get complained at that the code is using 0 instead of NULL when instead of U16 the type of the __get_unaligned_t is a pointer. Basically I've entered into an analysis tool wac-a-mole and I don't have a combination to make them all happy. Thanks, Ian ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH v3 1/3] vdso: Switch get/put unaligned from packed struct to memcpy 2025-07-22 17:00 ` Ian Rogers @ 2025-07-23 22:14 ` David Laight 2025-08-18 16:03 ` Ian Rogers 1 sibling, 0 replies; 6+ messages in thread From: David Laight @ 2025-07-23 22:14 UTC (permalink / raw) To: Ian Rogers Cc: Thomas Gleixner, kernel test robot, Eric Biggers, Yuzhuo Jing, Andy Lutomirski, Vincenzo Frascino, Arnaldo Carvalho de Melo, Al Viro, Christophe Leroy, Jason A. Donenfeld, linux-kernel, linux-perf-users, llvm, oe-kbuild-all On Tue, 22 Jul 2025 10:00:51 -0700 Ian Rogers <irogers@google.com> wrote: ... > Oh, the actual warning is "leaves the object uninitialized". It is > possible to silence this by changing: > > const U16 __get_unaligned_ctrl_type __always_unused; > > to something like: > > const U16 __get_unaligned_ctrl_type __always_unused = 0; > > You then get complained at that the code is using 0 instead of NULL > when instead of U16 the type of the __get_unaligned_t is a pointer. > Basically I've entered into an analysis tool wac-a-mole and I don't > have a combination to make them all happy. Can you embed the variable inside a struct and then initialise with {} ? Does this code actually work all the time? There have always been 'problems' because gcc remembers the alignment of pointers through (void *) casts. So if your misaligned pointer has a type that should be aligned them memcpy(&dest, (void *)misaligned_int_ptr, 4) will still do an aligned read. You also really need the compiler to optimise the memcpy into two memory reads, some shifts, masks and ors, and a single write to a register. I'm not at all sure that is going to happen. (Especially since I've never seen it optimised to only two reads even when reading 'packed' variables. David > > Thanks, > Ian > ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH v3 1/3] vdso: Switch get/put unaligned from packed struct to memcpy 2025-07-22 17:00 ` Ian Rogers 2025-07-23 22:14 ` David Laight @ 2025-08-18 16:03 ` Ian Rogers 1 sibling, 0 replies; 6+ messages in thread From: Ian Rogers @ 2025-08-18 16:03 UTC (permalink / raw) To: Thomas Gleixner Cc: kernel test robot, Eric Biggers, Yuzhuo Jing, Andy Lutomirski, Vincenzo Frascino, Arnaldo Carvalho de Melo, Al Viro, Christophe Leroy, Jason A. Donenfeld, linux-kernel, linux-perf-users, llvm, oe-kbuild-all On Tue, Jul 22, 2025 at 10:00 AM Ian Rogers <irogers@google.com> wrote: > > On Tue, Jul 22, 2025 at 9:44 AM Ian Rogers <irogers@google.com> wrote: > > > > On Tue, Jul 22, 2025 at 8:56 AM Thomas Gleixner <tglx@linutronix.de> wrote: > > > > > > Ian! > > > > > > On Sat, Jul 05 2025 at 08:05, kernel test robot wrote: > > > > kernel test robot noticed the following build warnings: > > > > > > > > [auto build test WARNING on linus/master] > > > > [also build test WARNING on tip/timers/vdso v6.16-rc4 next-20250704] > > > > [cannot apply to acme/perf/core] > > > > [If your patch is applied to the wrong git tree, kindly drop us a note. > > > > And when submitting patch, we suggest to use '--base' as documented in > > > > https://git-scm.com/docs/git-format-patch#_base_tree_information] > > > > > > > > url: https://github.com/intel-lab-lkp/linux/commits/Ian-Rogers/vdso-Switch-get-put-unaligned-from-packed-struct-to-memcpy/20250626-135005 > > > > base: linus/master > > > > patch link: https://lore.kernel.org/r/20250626054826.433453-2-irogers%40google.com > > > > patch subject: [PATCH v3 1/3] vdso: Switch get/put unaligned from packed struct to memcpy > > > > config: s390-randconfig-002-20250705 (https://download.01.org/0day-ci/archive/20250705/202507050736.b4hX0Xks-lkp@intel.com/config) > > > > compiler: clang version 21.0.0git (https://github.com/llvm/llvm-project 61529d9e36fa86782a2458e6bdeedf7f376ef4b5) > > > > reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250705/202507050736.b4hX0Xks-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/202507050736.b4hX0Xks-lkp@intel.com/ > > > > > > > > All warnings (new ones prefixed by >>): > > > > > > > > In file included from arch/s390/boot/decompressor.c:48: > > > > In file included from arch/s390/include/uapi/../../../../lib/decompress_unlz4.c:10: > > > > In file included from arch/s390/include/uapi/../../../../lib/lz4/lz4_decompress.c:36: > > > >>> arch/s390/include/uapi/../../../../lib/lz4/lz4defs.h:109:9: warning: default initialization of an object of type 'typeof (*((const U16 *)ptr))' (aka 'const unsigned short') leaves the object uninitialized [-Wdefault-const-init-var-unsafe] > > > > 109 | return get_unaligned((const U16 *)ptr); > > > > | ^ > > > > > > Any update on this one? Hi Thomas, I sent out a v4 patch set: https://lore.kernel.org/lkml/20250722215754.672330-1-irogers@google.com/ which has no bot complaints but also no reviews. It side stepped some of the challenges by always operating on pointer types. If people could PTAL it would be appreciated as then we can pick up the changes in tools and drop: https://web.git.kernel.org/pub/scm/linux/kernel/git/perf/perf-tools-next.git/commit/tools/perf/Makefile.config?h=perf-tools-next&id=55a18d2f3ff79c9082225f44e0abbaea6286bf99 Thanks, Ian ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2025-08-18 16:03 UTC | newest] Thread overview: 6+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- [not found] <20250626054826.433453-2-irogers@google.com> 2025-07-05 0:05 ` [PATCH v3 1/3] vdso: Switch get/put unaligned from packed struct to memcpy kernel test robot 2025-07-22 15:56 ` Thomas Gleixner 2025-07-22 16:44 ` Ian Rogers 2025-07-22 17:00 ` Ian Rogers 2025-07-23 22:14 ` David Laight 2025-08-18 16:03 ` Ian Rogers
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).