Message ID | 376843e024ffa73793e8ed99b72d299c6b239799.1723817900.git.christophe.leroy@csgroup.eu (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | Wire up getrandom() vDSO implementation on powerpc | expand |
Context | Check | Description |
---|---|---|
snowpatch_ozlabs/github-powerpc_kernel_qemu | fail | kernel (corenet64_smp_defconfig, korg-5.5.0) failed at step Build. |
snowpatch_ozlabs/github-powerpc_sparse | fail | sparse (ppc64, fedora-40, ppc64) failed at step Build. |
snowpatch_ozlabs/github-powerpc_selftests | success | Successfully ran 8 jobs. |
snowpatch_ozlabs/github-powerpc_ppctests | success | Successfully ran 8 jobs. |
snowpatch_ozlabs/github-powerpc_clang | fail | 2 of 5 jobs failed. |
Hi Christophe, kernel test robot noticed the following build warnings: [auto build test WARNING on powerpc/next] [also build test WARNING on powerpc/fixes shuah-kselftest/next shuah-kselftest/fixes linus/master v6.11-rc3] [cannot apply to crng-random/master next-20240816] [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/Christophe-Leroy/powerpc-vdso-Don-t-discard-rela-sections/20240816-223917 base: https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git next patch link: https://lore.kernel.org/r/376843e024ffa73793e8ed99b72d299c6b239799.1723817900.git.christophe.leroy%40csgroup.eu patch subject: [PATCH 9/9] selftests: [NOT TO BE MERGED] Modifications for testing VDSO getrandom implementation on PPC32 config: x86_64-randconfig-161-20240817 (https://download.01.org/0day-ci/archive/20240818/202408180121.HB9iN2PQ-lkp@intel.com/config) compiler: clang version 18.1.5 (https://github.com/llvm/llvm-project 617a15a9eac96088ae5e9134248d8236e34b91b1) 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/202408180121.HB9iN2PQ-lkp@intel.com/ smatch warnings: kernel/time/time.c:622 timespec64_to_jiffies() warn: always true condition '(sec >= ((((((((2147483647 >> 1) - 1) >> (32 - 10)) * ((1000000000 + 1000 / 2) / 1000)) / (1000000000)) << (1)) + (((((((2147483647 >> 1) - 1) >> (32 - 10)) * ((1000000000 + 1000 / 2) / 1000)) % (1000000000)) << (1)) + (1000000000) / 2) / (1000000000)) - 1)) => (0-u64max >= 0)' vim +622 kernel/time/time.c 8b9365d753d9870 kernel/time.c Ingo Molnar 2007-02-16 595 67b3f564cb1e769 kernel/time/time.c Randy Dunlap 2023-07-03 596 /** 67b3f564cb1e769 kernel/time/time.c Randy Dunlap 2023-07-03 597 * timespec64_to_jiffies - convert a timespec64 value to jiffies 67b3f564cb1e769 kernel/time/time.c Randy Dunlap 2023-07-03 598 * @value: pointer to &struct timespec64 67b3f564cb1e769 kernel/time/time.c Randy Dunlap 2023-07-03 599 * 8b9365d753d9870 kernel/time.c Ingo Molnar 2007-02-16 600 * The TICK_NSEC - 1 rounds up the value to the next resolution. Note 8b9365d753d9870 kernel/time.c Ingo Molnar 2007-02-16 601 * that a remainder subtract here would not do the right thing as the 4bf07f6562a01a4 kernel/time/time.c Ingo Molnar 2021-03-22 602 * resolution values don't fall on second boundaries. I.e. the line: 8b9365d753d9870 kernel/time.c Ingo Molnar 2007-02-16 603 * nsec -= nsec % TICK_NSEC; is NOT a correct resolution rounding. d78c9300c51d6ce kernel/time/time.c Andrew Hunter 2014-09-04 604 * Note that due to the small error in the multiplier here, this d78c9300c51d6ce kernel/time/time.c Andrew Hunter 2014-09-04 605 * rounding is incorrect for sufficiently large values of tv_nsec, but d78c9300c51d6ce kernel/time/time.c Andrew Hunter 2014-09-04 606 * well formed timespecs should have tv_nsec < NSEC_PER_SEC, so we're d78c9300c51d6ce kernel/time/time.c Andrew Hunter 2014-09-04 607 * OK. 8b9365d753d9870 kernel/time.c Ingo Molnar 2007-02-16 608 * 8b9365d753d9870 kernel/time.c Ingo Molnar 2007-02-16 609 * Rather, we just shift the bits off the right. 8b9365d753d9870 kernel/time.c Ingo Molnar 2007-02-16 610 * 8b9365d753d9870 kernel/time.c Ingo Molnar 2007-02-16 611 * The >> (NSEC_JIFFIE_SC - SEC_JIFFIE_SC) converts the scaled nsec 8b9365d753d9870 kernel/time.c Ingo Molnar 2007-02-16 612 * value to a scaled second value. 67b3f564cb1e769 kernel/time/time.c Randy Dunlap 2023-07-03 613 * 67b3f564cb1e769 kernel/time/time.c Randy Dunlap 2023-07-03 614 * Return: jiffies value 8b9365d753d9870 kernel/time.c Ingo Molnar 2007-02-16 615 */ 751addac78b6f20 kernel/time/time.c Arnd Bergmann 2019-10-24 616 unsigned long 751addac78b6f20 kernel/time/time.c Arnd Bergmann 2019-10-24 617 timespec64_to_jiffies(const struct timespec64 *value) 8b9365d753d9870 kernel/time.c Ingo Molnar 2007-02-16 618 { 751addac78b6f20 kernel/time/time.c Arnd Bergmann 2019-10-24 619 u64 sec = value->tv_sec; 751addac78b6f20 kernel/time/time.c Arnd Bergmann 2019-10-24 620 long nsec = value->tv_nsec + TICK_NSEC - 1; 8b9365d753d9870 kernel/time.c Ingo Molnar 2007-02-16 621 8b9365d753d9870 kernel/time.c Ingo Molnar 2007-02-16 @622 if (sec >= MAX_SEC_IN_JIFFIES){ 8b9365d753d9870 kernel/time.c Ingo Molnar 2007-02-16 623 sec = MAX_SEC_IN_JIFFIES; 8b9365d753d9870 kernel/time.c Ingo Molnar 2007-02-16 624 nsec = 0; 8b9365d753d9870 kernel/time.c Ingo Molnar 2007-02-16 625 } 9ca308506062fc4 kernel/time/time.c Baolin Wang 2015-07-29 626 return ((sec * SEC_CONVERSION) + 8b9365d753d9870 kernel/time.c Ingo Molnar 2007-02-16 627 (((u64)nsec * NSEC_CONVERSION) >> 8b9365d753d9870 kernel/time.c Ingo Molnar 2007-02-16 628 (NSEC_JIFFIE_SC - SEC_JIFFIE_SC))) >> SEC_JIFFIE_SC; 8b9365d753d9870 kernel/time.c Ingo Molnar 2007-02-16 629
diff --git a/include/vdso/limits.h b/include/vdso/limits.h index 0197888ad0e0..b0459332e45f 100644 --- a/include/vdso/limits.h +++ b/include/vdso/limits.h @@ -5,10 +5,10 @@ #define USHRT_MAX ((unsigned short)~0U) #define SHRT_MAX ((short)(USHRT_MAX >> 1)) #define SHRT_MIN ((short)(-SHRT_MAX - 1)) -#define INT_MAX ((int)(~0U >> 1)) +#define INT_MAX 2147483647 #define INT_MIN (-INT_MAX - 1) #define UINT_MAX (~0U) -#define LONG_MAX ((long)(~0UL >> 1)) +#define LONG_MAX 2147483647 #define LONG_MIN (-LONG_MAX - 1) #define ULONG_MAX (~0UL) #define LLONG_MAX ((long long)(~0ULL >> 1)) diff --git a/tools/testing/selftests/vDSO/Makefile b/tools/testing/selftests/vDSO/Makefile index 3de8e7e052ae..8010e7be66c6 100644 --- a/tools/testing/selftests/vDSO/Makefile +++ b/tools/testing/selftests/vDSO/Makefile @@ -40,7 +40,7 @@ $(OUTPUT)/vdso_test_getrandom: parse_vdso.c $(OUTPUT)/vdso_test_getrandom: CFLAGS += -isystem $(top_srcdir)/tools/include \ -isystem $(top_srcdir)/include/uapi -$(OUTPUT)/vdso_test_chacha: $(top_srcdir)/arch/$(ARCH)/entry/vdso/vgetrandom-chacha.S +$(OUTPUT)/vdso_test_chacha: $(top_srcdir)/arch/$(ARCH)/kernel/vdso/vgetrandom-chacha.S $(OUTPUT)/vdso_test_chacha: CFLAGS += -idirafter $(top_srcdir)/tools/include \ -isystem $(top_srcdir)/arch/$(ARCH)/include \ -isystem $(top_srcdir)/include \ diff --git a/tools/testing/selftests/vDSO/vdso_test_getrandom.c b/tools/testing/selftests/vDSO/vdso_test_getrandom.c index 05122425a873..f25301c9d46b 100644 --- a/tools/testing/selftests/vDSO/vdso_test_getrandom.c +++ b/tools/testing/selftests/vDSO/vdso_test_getrandom.c @@ -115,9 +115,9 @@ static void vgetrandom_init(void) exit(KSFT_SKIP); } vdso_init_from_sysinfo_ehdr(sysinfo_ehdr); - grnd_ctx.fn = (__typeof__(grnd_ctx.fn))vdso_sym("LINUX_2.6", "__vdso_getrandom"); + grnd_ctx.fn = (__typeof__(grnd_ctx.fn))vdso_sym("LINUX_2.6.15", "__kernel_getrandom"); if (!grnd_ctx.fn) { - printf("__vdso_getrandom is missing!\n"); + printf("__kernel_getrandom is missing!\n"); exit(KSFT_FAIL); } if (grnd_ctx.fn(NULL, 0, 0, &grnd_ctx.params, ~0UL) != 0) { @@ -146,7 +146,7 @@ static ssize_t vgetrandom(void *buf, size_t len, unsigned long flags) return grnd_ctx.fn(buf, len, flags, state, grnd_ctx.params.size_of_opaque_state); } -enum { TRIALS = 25000000, THREADS = 256 }; +enum { TRIALS = 2500000, THREADS = 256 }; static void *test_vdso_getrandom(void *) {
arch/.../entry/vdso/ is specific to x86. Every architecture has a different path. On powerpc it is in arch/.../kernel/vdso/ vdso_test_getrandom is a bit too long with 25000000. Something is wrong with macros INT_MAX ... : In file included from /home/chleroy/linux-powerpc/include/linux/limits.h:7, from /opt/powerpc64-e5500--glibc--stable-2024.02-1/powerpc64-buildroot-linux-gnu/sysroot/usr/include/bits/local_lim.h:38, from /opt/powerpc64-e5500--glibc--stable-2024.02-1/powerpc64-buildroot-linux-gnu/sysroot/usr/include/bits/posix1_lim.h:161, from /opt/powerpc64-e5500--glibc--stable-2024.02-1/powerpc64-buildroot-linux-gnu/sysroot/usr/include/limits.h:195, from /opt/powerpc64-e5500--glibc--stable-2024.02-1/lib/gcc/powerpc64-buildroot-linux-gnu/12.3.0/include-fixed/limits.h:203, from /opt/powerpc64-e5500--glibc--stable-2024.02-1/lib/gcc/powerpc64-buildroot-linux-gnu/12.3.0/include-fixed/syslimits.h:7, from /opt/powerpc64-e5500--glibc--stable-2024.02-1/lib/gcc/powerpc64-buildroot-linux-gnu/12.3.0/include-fixed/limits.h:34, from /tmp/sodium/usr/local/include/sodium/export.h:7, from /tmp/sodium/usr/local/include/sodium/crypto_stream_chacha20.h:14, from vdso_test_chacha.c:6: /opt/powerpc64-e5500--glibc--stable-2024.02-1/powerpc64-buildroot-linux-gnu/sysroot/usr/include/bits/xopen_lim.h:99:6: error: missing binary operator before token "(" 99 | # if INT_MAX == 32767 | ^~~~~~~ /opt/powerpc64-e5500--glibc--stable-2024.02-1/powerpc64-buildroot-linux-gnu/sysroot/usr/include/bits/xopen_lim.h:102:7: error: missing binary operator before token "(" 102 | # if INT_MAX == 2147483647 | ^~~~~~~ /opt/powerpc64-e5500--glibc--stable-2024.02-1/powerpc64-buildroot-linux-gnu/sysroot/usr/include/bits/xopen_lim.h:126:6: error: missing binary operator before token "(" 126 | # if LONG_MAX == 2147483647 | ^~~~~~~~ Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu> --- include/vdso/limits.h | 4 ++-- tools/testing/selftests/vDSO/Makefile | 2 +- tools/testing/selftests/vDSO/vdso_test_getrandom.c | 6 +++--- 3 files changed, 6 insertions(+), 6 deletions(-)