Message ID | 20210908204405.127665-4-deller@gmx.de (mailing list archive) |
---|---|
State | Accepted, archived |
Headers | show |
Series | [1/4] parisc: Drop strnlen_user() in favour of generic version | expand |
This change breaks signal delivery and causes various glibc tests to fail. commit 3e4a1aff2a97cb4fd7f0268e4b69e8c9d3641277: dave@atlas:~/gnu/glibc/objdir$ env GCONV_PATH=/home/dave/gnu/glibc/objdir/iconvdata LOCPATH=/home/dave/gnu/glibc/objdir/localedata LC_ALL=C /home/dave/gnu/glibc/objdir/elf/ld.so.1 --library-path /home/dave/gnu/glibc/objdir:/home/dave/gnu/glibc/objdir/math:/home/dave/gnu/glibc/objdir/elf:/home/dave/gnu/glibc/objdir/dlfcn:/home/dave/gnu/glibc/objdir/nss:/home/dave/gnu/glibc/objdir/nis:/home/dave/gnu/glibc/objdir/rt:/home/dave/gnu/glibc/objdir/resolv:/home/dave/gnu/glibc/objdir/mathvec:/home/dave/gnu/glibc/objdir/support:/home/dave/gnu/glibc/objdir/crypt:/home/dave/gnu/glibc/objdir/nptl /home/dave/gnu/glibc/objdir/nptl/tst-cancelx4 got size 4512 in-time cancel test of 'read' successful in-time cancel test of 'readv' successful in-time cancel test of 'select' successful in-time cancel test of 'pselect' successful in-time cancel test of 'poll' successful in-time cancel test of 'ppoll' successful in-time cancel test of 'write' successful in-time cancel test of 'writev' successful in-time cancel test of 'sleep' successful in-time cancel test of 'usleep' successful in-time cancel test of 'nanosleep' successful in-time cancel test of 'wait' successful in-time cancel test of 'waitid' successful in-time cancel test of 'waitpid' successful in-time cancel test of 'sigpause' successful in-time cancel test of 'sigsuspend' successful in-time cancel test of 'sigwait' successful in-time cancel test of 'sigwaitinfo' successful in-time cancel test of 'sigtimedwait' successful in-time cancel test of 'pause' successful in-time cancel test of 'accept' successful got size 4512 in-time cancel test of 'send' successful in-time cancel test of 'recv' successful in-time cancel test of 'recvfrom' successful in-time cancel test of 'recvmsg' successful in-time cancel test of 'msgrcv' successful early cancel test of 'read' successful early cancel test of 'readv' successful early cancel test of 'select' successful early cancel test of 'pselect' successful early cancel test of 'poll' successful early cancel test of 'ppoll' successful early cancel test of 'write' successful early cancel test of 'writev' successful early cancel test of 'sleep' successful early cancel test of 'usleep' successful early cancel test of 'nanosleep' successful early cancel test of 'wait' successful early cancel test of 'waitid' successful early cancel test of 'waitpid' successful early cancel test of 'sigpause' successful early cancel test of 'sigsuspend' successful early cancel test of 'sigwait' successful early cancel test of 'sigwaitinfo' successful early cancel test of 'sigtimedwait' successful early cancel test of 'pause' successful early cancel test of 'accept' successful got size 4512 early cancel test of 'send' successful early cancel test of 'recv' successful early cancel test of 'recvfrom' successful early cancel test of 'recvmsg' successful early cancel test of 'preadv' successful early cancel test of 'preadv2' successful early cancel test of 'pwritev' successful early cancel test of 'pwritev2' successful early cancel test of 'open' successful early cancel test of 'close' successful early cancel test of 'pread' successful early cancel test of 'pwrite' successful early cancel test of 'fsync' successful early cancel test of 'fdatasync' successful early cancel test of 'msync' successful got size 4512 early cancel test of 'sendto' successful early cancel test of 'sendmsg' successful early cancel test of 'creat' successful early cancel test of 'connect' successful early cancel test of 'tcdrain' successful early cancel test of 'msgrcv' successful early cancel test of 'msgsnd' successful dave@atlas:~/gnu/glibc/objdir$ echo $? 0 commit e4f2006f1287e7ea17660490569cff323772dac4: dave@atlas:~/gnu/glibc/objdir$ env GCONV_PATH=/home/dave/gnu/glibc/objdir/iconvdata LOCPATH=/home/dave/gnu/glibc/objdir/localedata LC_ALL=C /home/dave/gnu/glibc/objdir/elf/ld.so.1 --library-path /home/dave/gnu/glibc/objdir:/home/dave/gnu/glibc/objdir/math:/home/dave/gnu/glibc/objdir/elf:/home/dave/gnu/glibc/objdir/dlfcn:/home/dave/gnu/glibc/objdir/nss:/home/dave/gnu/glibc/objdir/nis:/home/dave/gnu/glibc/objdir/rt:/home/dave/gnu/glibc/objdir/resolv:/home/dave/gnu/glibc/objdir/mathvec:/home/dave/gnu/glibc/objdir/support:/home/dave/gnu/glibc/objdir/crypt:/home/dave/gnu/glibc/objdir/nptl /home/dave/gnu/glibc/objdir/nptl/tst-cancelx4 got size 4512 cleanup handler not called for 'read' cleanup handler not called for 'readv' cleanup handler not called for 'select' cleanup handler not called for 'pselect' cleanup handler not called for 'poll' cleanup handler not called for 'ppoll' cleanup handler not called for 'write' cleanup handler not called for 'writev' cleanup handler not called for 'sleep' cleanup handler not called for 'usleep' cleanup handler not called for 'nanosleep' cleanup handler not called for 'wait' cleanup handler not called for 'waitid' cleanup handler not called for 'waitpid' cleanup handler not called for 'sigpause' cleanup handler not called for 'sigsuspend' cleanup handler not called for 'sigwait' cleanup handler not called for 'sigwaitinfo' cleanup handler not called for 'sigtimedwait' cleanup handler not called for 'pause' cleanup handler not called for 'accept' got size 4512 cleanup handler not called for 'send' cleanup handler not called for 'recv' cleanup handler not called for 'recvfrom' cleanup handler not called for 'recvmsg' cleanup handler not called for 'msgrcv' early cancel test of 'read' successful early cancel test of 'readv' successful early cancel test of 'select' successful early cancel test of 'pselect' successful early cancel test of 'poll' successful early cancel test of 'ppoll' successful early cancel test of 'write' successful early cancel test of 'writev' successful early cancel test of 'sleep' successful early cancel test of 'usleep' successful early cancel test of 'nanosleep' successful early cancel test of 'wait' successful early cancel test of 'waitid' successful early cancel test of 'waitpid' successful early cancel test of 'sigpause' successful early cancel test of 'sigsuspend' successful early cancel test of 'sigwait' successful early cancel test of 'sigwaitinfo' successful early cancel test of 'sigtimedwait' successful early cancel test of 'pause' successful early cancel test of 'accept' successful got size 4512 early cancel test of 'send' successful early cancel test of 'recv' successful early cancel test of 'recvfrom' successful early cancel test of 'recvmsg' successful early cancel test of 'preadv' successful early cancel test of 'preadv2' successful early cancel test of 'pwritev' successful early cancel test of 'pwritev2' successful early cancel test of 'open' successful early cancel test of 'close' successful early cancel test of 'pread' successful early cancel test of 'pwrite' successful early cancel test of 'fsync' successful early cancel test of 'fdatasync' successful early cancel test of 'msync' successful got size 4512 early cancel test of 'sendto' successful early cancel test of 'sendmsg' successful early cancel test of 'creat' successful early cancel test of 'connect' successful early cancel test of 'tcdrain' successful early cancel test of 'msgrcv' successful early cancel test of 'msgsnd' successful dave@atlas:~/gnu/glibc/objdir$ echo $? 1 Dave On 2021-09-08 4:44 p.m., Helge Deller wrote: > We can move the INSN_LDI_R20 instruction into the branch delay slot. > > Signed-off-by: Helge Deller <deller@gmx.de> > --- > arch/parisc/include/asm/rt_sigframe.h | 2 +- > arch/parisc/kernel/signal.c | 13 ++++++------- > arch/parisc/kernel/signal32.h | 2 +- > 3 files changed, 8 insertions(+), 9 deletions(-) > > diff --git a/arch/parisc/include/asm/rt_sigframe.h b/arch/parisc/include/asm/rt_sigframe.h > index 2b3010ade00e..4b9e3d707571 100644 > --- a/arch/parisc/include/asm/rt_sigframe.h > +++ b/arch/parisc/include/asm/rt_sigframe.h > @@ -2,7 +2,7 @@ > #ifndef _ASM_PARISC_RT_SIGFRAME_H > #define _ASM_PARISC_RT_SIGFRAME_H > > -#define SIGRETURN_TRAMP 4 > +#define SIGRETURN_TRAMP 3 > #define SIGRESTARTBLOCK_TRAMP 5 > #define TRAMP_SIZE (SIGRETURN_TRAMP + SIGRESTARTBLOCK_TRAMP) > > diff --git a/arch/parisc/kernel/signal.c b/arch/parisc/kernel/signal.c > index 46b1050640b8..bbfe23c40c01 100644 > --- a/arch/parisc/kernel/signal.c > +++ b/arch/parisc/kernel/signal.c > @@ -288,22 +288,21 @@ setup_rt_frame(struct ksignal *ksig, sigset_t *set, struct pt_regs *regs, > already in userspace. The first words of tramp are used to > save the previous sigrestartblock trampoline that might be > on the stack. We start the sigreturn trampoline at > - SIGRESTARTBLOCK_TRAMP+X. */ > + SIGRESTARTBLOCK_TRAMP. */ > err |= __put_user(in_syscall ? INSN_LDI_R25_1 : INSN_LDI_R25_0, > &frame->tramp[SIGRESTARTBLOCK_TRAMP+0]); > - err |= __put_user(INSN_LDI_R20, > - &frame->tramp[SIGRESTARTBLOCK_TRAMP+1]); > err |= __put_user(INSN_BLE_SR2_R0, > + &frame->tramp[SIGRESTARTBLOCK_TRAMP+1]); > + err |= __put_user(INSN_LDI_R20, > &frame->tramp[SIGRESTARTBLOCK_TRAMP+2]); > - err |= __put_user(INSN_NOP, &frame->tramp[SIGRESTARTBLOCK_TRAMP+3]); > > - start = (unsigned long) &frame->tramp[0]; > - end = (unsigned long) &frame->tramp[TRAMP_SIZE]; > + start = (unsigned long) &frame->tramp[SIGRESTARTBLOCK_TRAMP+0]; > + end = (unsigned long) &frame->tramp[SIGRESTARTBLOCK_TRAMP+3]; > flush_user_dcache_range_asm(start, end); > flush_user_icache_range_asm(start, end); > > /* TRAMP Words 0-4, Length 5 = SIGRESTARTBLOCK_TRAMP > - * TRAMP Words 5-9, Length 4 = SIGRETURN_TRAMP > + * TRAMP Words 5-7, Length 3 = SIGRETURN_TRAMP > * So the SIGRETURN_TRAMP is at the end of SIGRESTARTBLOCK_TRAMP > */ > rp = (unsigned long) &frame->tramp[SIGRESTARTBLOCK_TRAMP]; > diff --git a/arch/parisc/kernel/signal32.h b/arch/parisc/kernel/signal32.h > index f166250f2d06..a5bdbb5678b7 100644 > --- a/arch/parisc/kernel/signal32.h > +++ b/arch/parisc/kernel/signal32.h > @@ -36,7 +36,7 @@ struct compat_regfile { > compat_int_t rf_sar; > }; > > -#define COMPAT_SIGRETURN_TRAMP 4 > +#define COMPAT_SIGRETURN_TRAMP 3 > #define COMPAT_SIGRESTARTBLOCK_TRAMP 5 > #define COMPAT_TRAMP_SIZE (COMPAT_SIGRETURN_TRAMP + \ > COMPAT_SIGRESTARTBLOCK_TRAMP) > -- > 2.31.1 >
Dave, Thanks for tracking this down! I wonder what's wrong with it. Based on the outcome I should either completely revert that patch or fix it. Helge On 11/15/21 23:25, John David Anglin wrote: > This change breaks signal delivery and causes various glibc tests to fail. > > commit 3e4a1aff2a97cb4fd7f0268e4b69e8c9d3641277: > dave@atlas:~/gnu/glibc/objdir$ env GCONV_PATH=/home/dave/gnu/glibc/objdir/iconvdata LOCPATH=/home/dave/gnu/glibc/objdir/localedata LC_ALL=C /home/dave/gnu/glibc/objdir/elf/ld.so.1 --library-path /home/dave/gnu/glibc/objdir:/home/dave/gnu/glibc/objdir/math:/home/dave/gnu/glibc/objdir/elf:/home/dave/gnu/glibc/objdir/dlfcn:/home/dave/gnu/glibc/objdir/nss:/home/dave/gnu/glibc/objdir/nis:/home/dave/gnu/glibc/objdir/rt:/home/dave/gnu/glibc/objdir/resolv:/home/dave/gnu/glibc/objdir/mathvec:/home/dave/gnu/glibc/objdir/support:/home/dave/gnu/glibc/objdir/crypt:/home/dave/gnu/glibc/objdir/nptl /home/dave/gnu/glibc/objdir/nptl/tst-cancelx4 > got size 4512 > in-time cancel test of 'read' successful > in-time cancel test of 'readv' successful > in-time cancel test of 'select' successful > in-time cancel test of 'pselect' successful > in-time cancel test of 'poll' successful > in-time cancel test of 'ppoll' successful > in-time cancel test of 'write' successful > in-time cancel test of 'writev' successful > in-time cancel test of 'sleep' successful > in-time cancel test of 'usleep' successful > in-time cancel test of 'nanosleep' successful > in-time cancel test of 'wait' successful > in-time cancel test of 'waitid' successful > in-time cancel test of 'waitpid' successful > in-time cancel test of 'sigpause' successful > in-time cancel test of 'sigsuspend' successful > in-time cancel test of 'sigwait' successful > in-time cancel test of 'sigwaitinfo' successful > in-time cancel test of 'sigtimedwait' successful > in-time cancel test of 'pause' successful > in-time cancel test of 'accept' successful > got size 4512 > in-time cancel test of 'send' successful > in-time cancel test of 'recv' successful > in-time cancel test of 'recvfrom' successful > in-time cancel test of 'recvmsg' successful > in-time cancel test of 'msgrcv' successful > early cancel test of 'read' successful > early cancel test of 'readv' successful > early cancel test of 'select' successful > early cancel test of 'pselect' successful > early cancel test of 'poll' successful > early cancel test of 'ppoll' successful > early cancel test of 'write' successful > early cancel test of 'writev' successful > early cancel test of 'sleep' successful > early cancel test of 'usleep' successful > early cancel test of 'nanosleep' successful > early cancel test of 'wait' successful > early cancel test of 'waitid' successful > early cancel test of 'waitpid' successful > early cancel test of 'sigpause' successful > early cancel test of 'sigsuspend' successful > early cancel test of 'sigwait' successful > early cancel test of 'sigwaitinfo' successful > early cancel test of 'sigtimedwait' successful > early cancel test of 'pause' successful > early cancel test of 'accept' successful > got size 4512 > early cancel test of 'send' successful > early cancel test of 'recv' successful > early cancel test of 'recvfrom' successful > early cancel test of 'recvmsg' successful > early cancel test of 'preadv' successful > early cancel test of 'preadv2' successful > early cancel test of 'pwritev' successful > early cancel test of 'pwritev2' successful > early cancel test of 'open' successful > early cancel test of 'close' successful > early cancel test of 'pread' successful > early cancel test of 'pwrite' successful > early cancel test of 'fsync' successful > early cancel test of 'fdatasync' successful > early cancel test of 'msync' successful > got size 4512 > early cancel test of 'sendto' successful > early cancel test of 'sendmsg' successful > early cancel test of 'creat' successful > early cancel test of 'connect' successful > early cancel test of 'tcdrain' successful > early cancel test of 'msgrcv' successful > early cancel test of 'msgsnd' successful > dave@atlas:~/gnu/glibc/objdir$ echo $? > 0 > > commit e4f2006f1287e7ea17660490569cff323772dac4: > dave@atlas:~/gnu/glibc/objdir$ env GCONV_PATH=/home/dave/gnu/glibc/objdir/iconvdata LOCPATH=/home/dave/gnu/glibc/objdir/localedata LC_ALL=C /home/dave/gnu/glibc/objdir/elf/ld.so.1 --library-path /home/dave/gnu/glibc/objdir:/home/dave/gnu/glibc/objdir/math:/home/dave/gnu/glibc/objdir/elf:/home/dave/gnu/glibc/objdir/dlfcn:/home/dave/gnu/glibc/objdir/nss:/home/dave/gnu/glibc/objdir/nis:/home/dave/gnu/glibc/objdir/rt:/home/dave/gnu/glibc/objdir/resolv:/home/dave/gnu/glibc/objdir/mathvec:/home/dave/gnu/glibc/objdir/support:/home/dave/gnu/glibc/objdir/crypt:/home/dave/gnu/glibc/objdir/nptl /home/dave/gnu/glibc/objdir/nptl/tst-cancelx4 > got size 4512 > cleanup handler not called for 'read' > cleanup handler not called for 'readv' > cleanup handler not called for 'select' > cleanup handler not called for 'pselect' > cleanup handler not called for 'poll' > cleanup handler not called for 'ppoll' > cleanup handler not called for 'write' > cleanup handler not called for 'writev' > cleanup handler not called for 'sleep' > cleanup handler not called for 'usleep' > cleanup handler not called for 'nanosleep' > cleanup handler not called for 'wait' > cleanup handler not called for 'waitid' > cleanup handler not called for 'waitpid' > cleanup handler not called for 'sigpause' > cleanup handler not called for 'sigsuspend' > cleanup handler not called for 'sigwait' > cleanup handler not called for 'sigwaitinfo' > cleanup handler not called for 'sigtimedwait' > cleanup handler not called for 'pause' > cleanup handler not called for 'accept' > got size 4512 > cleanup handler not called for 'send' > cleanup handler not called for 'recv' > cleanup handler not called for 'recvfrom' > cleanup handler not called for 'recvmsg' > cleanup handler not called for 'msgrcv' > early cancel test of 'read' successful > early cancel test of 'readv' successful > early cancel test of 'select' successful > early cancel test of 'pselect' successful > early cancel test of 'poll' successful > early cancel test of 'ppoll' successful > early cancel test of 'write' successful > early cancel test of 'writev' successful > early cancel test of 'sleep' successful > early cancel test of 'usleep' successful > early cancel test of 'nanosleep' successful > early cancel test of 'wait' successful > early cancel test of 'waitid' successful > early cancel test of 'waitpid' successful > early cancel test of 'sigpause' successful > early cancel test of 'sigsuspend' successful > early cancel test of 'sigwait' successful > early cancel test of 'sigwaitinfo' successful > early cancel test of 'sigtimedwait' successful > early cancel test of 'pause' successful > early cancel test of 'accept' successful > got size 4512 > early cancel test of 'send' successful > early cancel test of 'recv' successful > early cancel test of 'recvfrom' successful > early cancel test of 'recvmsg' successful > early cancel test of 'preadv' successful > early cancel test of 'preadv2' successful > early cancel test of 'pwritev' successful > early cancel test of 'pwritev2' successful > early cancel test of 'open' successful > early cancel test of 'close' successful > early cancel test of 'pread' successful > early cancel test of 'pwrite' successful > early cancel test of 'fsync' successful > early cancel test of 'fdatasync' successful > early cancel test of 'msync' successful > got size 4512 > early cancel test of 'sendto' successful > early cancel test of 'sendmsg' successful > early cancel test of 'creat' successful > early cancel test of 'connect' successful > early cancel test of 'tcdrain' successful > early cancel test of 'msgrcv' successful > early cancel test of 'msgsnd' successful > dave@atlas:~/gnu/glibc/objdir$ echo $? > 1 > > Dave > > On 2021-09-08 4:44 p.m., Helge Deller wrote: >> We can move the INSN_LDI_R20 instruction into the branch delay slot. >> >> Signed-off-by: Helge Deller <deller@gmx.de> >> --- >> arch/parisc/include/asm/rt_sigframe.h | 2 +- >> arch/parisc/kernel/signal.c | 13 ++++++------- >> arch/parisc/kernel/signal32.h | 2 +- >> 3 files changed, 8 insertions(+), 9 deletions(-) >> >> diff --git a/arch/parisc/include/asm/rt_sigframe.h b/arch/parisc/include/asm/rt_sigframe.h >> index 2b3010ade00e..4b9e3d707571 100644 >> --- a/arch/parisc/include/asm/rt_sigframe.h >> +++ b/arch/parisc/include/asm/rt_sigframe.h >> @@ -2,7 +2,7 @@ >> #ifndef _ASM_PARISC_RT_SIGFRAME_H >> #define _ASM_PARISC_RT_SIGFRAME_H >> >> -#define SIGRETURN_TRAMP 4 >> +#define SIGRETURN_TRAMP 3 >> #define SIGRESTARTBLOCK_TRAMP 5 >> #define TRAMP_SIZE (SIGRETURN_TRAMP + SIGRESTARTBLOCK_TRAMP) >> >> diff --git a/arch/parisc/kernel/signal.c b/arch/parisc/kernel/signal.c >> index 46b1050640b8..bbfe23c40c01 100644 >> --- a/arch/parisc/kernel/signal.c >> +++ b/arch/parisc/kernel/signal.c >> @@ -288,22 +288,21 @@ setup_rt_frame(struct ksignal *ksig, sigset_t *set, struct pt_regs *regs, >> already in userspace. The first words of tramp are used to >> save the previous sigrestartblock trampoline that might be >> on the stack. We start the sigreturn trampoline at >> - SIGRESTARTBLOCK_TRAMP+X. */ >> + SIGRESTARTBLOCK_TRAMP. */ >> err |= __put_user(in_syscall ? INSN_LDI_R25_1 : INSN_LDI_R25_0, >> &frame->tramp[SIGRESTARTBLOCK_TRAMP+0]); >> - err |= __put_user(INSN_LDI_R20, >> - &frame->tramp[SIGRESTARTBLOCK_TRAMP+1]); >> err |= __put_user(INSN_BLE_SR2_R0, >> + &frame->tramp[SIGRESTARTBLOCK_TRAMP+1]); >> + err |= __put_user(INSN_LDI_R20, >> &frame->tramp[SIGRESTARTBLOCK_TRAMP+2]); >> - err |= __put_user(INSN_NOP, &frame->tramp[SIGRESTARTBLOCK_TRAMP+3]); >> >> - start = (unsigned long) &frame->tramp[0]; >> - end = (unsigned long) &frame->tramp[TRAMP_SIZE]; >> + start = (unsigned long) &frame->tramp[SIGRESTARTBLOCK_TRAMP+0]; >> + end = (unsigned long) &frame->tramp[SIGRESTARTBLOCK_TRAMP+3]; >> flush_user_dcache_range_asm(start, end); >> flush_user_icache_range_asm(start, end); >> >> /* TRAMP Words 0-4, Length 5 = SIGRESTARTBLOCK_TRAMP >> - * TRAMP Words 5-9, Length 4 = SIGRETURN_TRAMP >> + * TRAMP Words 5-7, Length 3 = SIGRETURN_TRAMP >> * So the SIGRETURN_TRAMP is at the end of SIGRESTARTBLOCK_TRAMP >> */ >> rp = (unsigned long) &frame->tramp[SIGRESTARTBLOCK_TRAMP]; >> diff --git a/arch/parisc/kernel/signal32.h b/arch/parisc/kernel/signal32.h >> index f166250f2d06..a5bdbb5678b7 100644 >> --- a/arch/parisc/kernel/signal32.h >> +++ b/arch/parisc/kernel/signal32.h >> @@ -36,7 +36,7 @@ struct compat_regfile { >> compat_int_t rf_sar; >> }; >> >> -#define COMPAT_SIGRETURN_TRAMP 4 >> +#define COMPAT_SIGRETURN_TRAMP 3 >> #define COMPAT_SIGRESTARTBLOCK_TRAMP 5 >> #define COMPAT_TRAMP_SIZE (COMPAT_SIGRETURN_TRAMP + \ >> COMPAT_SIGRESTARTBLOCK_TRAMP) >> -- >> 2.31.1 >> > >
I found the change with a regression search. I don't know what's wrong with it. I have reverted it for now. Here are test results with 5.16.0-rc1+ #1 SMP Mon Nov 15 17:56:32 EST 2021 parisc64: XPASS: conform/UNIX98/ndbm.h/linknamespace XPASS: conform/XOPEN2K/ndbm.h/linknamespace XPASS: conform/XOPEN2K8/ndbm.h/linknamespace XPASS: conform/XPG42/ndbm.h/linknamespace FAIL: dirent/tst-readdir64-compat FAIL: elf/tst-audit2 UNSUPPORTED: io/tst-fallocate UNSUPPORTED: io/tst-fallocate64 UNSUPPORTED: misc/tst-adjtimex UNSUPPORTED: misc/tst-adjtimex-time64 UNSUPPORTED: misc/tst-clock_adjtime UNSUPPORTED: misc/tst-clock_adjtime-time64 UNSUPPORTED: misc/tst-ntp_adjtime UNSUPPORTED: misc/tst-ntp_adjtime-time64 UNSUPPORTED: misc/tst-pkey UNSUPPORTED: nptl/test-cond-printers UNSUPPORTED: nptl/test-condattr-printers UNSUPPORTED: nptl/test-mutex-printers UNSUPPORTED: nptl/test-mutexattr-printers UNSUPPORTED: nptl/test-rwlock-printers UNSUPPORTED: nptl/test-rwlockattr-printers FAIL: nptl/tst-cleanupx4 FAIL: nptl/tst-cond25 FAIL: signal/tst-minsigstksz-5 UNSUPPORTED: stdlib/test-bz22786 FAIL: stdlib/tst-setcontext2 FAIL: stdlib/tst-setcontext7 UNSUPPORTED: stdlib/tst-strtod-overflow UNSUPPORTED: string/tst-memmove-overflow UNSUPPORTED: time/tst-clock_settime UNSUPPORTED: time/tst-clock_settime-time64 UNSUPPORTED: time/tst-settimeofday UNSUPPORTED: time/tst-settimeofday-time64 UNSUPPORTED: time/tst-y2039 Summary of test results: 7 FAIL 4173 PASS 23 UNSUPPORTED 16 XFAIL 4 XPASS Probably, Iecho $? should investigate why nptl/tst-cleanupx4 fails. Might be another issue with signal delivery. Dave On 2021-11-16 8:54 a.m., Helge Deller wrote: > Dave, > > Thanks for tracking this down! > > I wonder what's wrong with it. > Based on the outcome I should either completely revert that patch or fix it. > > Helge > > On 11/15/21 23:25, John David Anglin wrote: >> This change breaks signal delivery and causes various glibc tests to fail. >> >> commit 3e4a1aff2a97cb4fd7f0268e4b69e8c9d3641277: >> dave@atlas:~/gnu/glibc/objdir$ env GCONV_PATH=/home/dave/gnu/glibc/objdir/iconvdata LOCPATH=/home/dave/gnu/glibc/objdir/localedata LC_ALL=C /home/dave/gnu/glibc/objdir/elf/ld.so.1 --library-path /home/dave/gnu/glibc/objdir:/home/dave/gnu/glibc/objdir/math:/home/dave/gnu/glibc/objdir/elf:/home/dave/gnu/glibc/objdir/dlfcn:/home/dave/gnu/glibc/objdir/nss:/home/dave/gnu/glibc/objdir/nis:/home/dave/gnu/glibc/objdir/rt:/home/dave/gnu/glibc/objdir/resolv:/home/dave/gnu/glibc/objdir/mathvec:/home/dave/gnu/glibc/objdir/support:/home/dave/gnu/glibc/objdir/crypt:/home/dave/gnu/glibc/objdir/nptl /home/dave/gnu/glibc/objdir/nptl/tst-cancelx4 >> got size 4512 >> in-time cancel test of 'read' successful >> in-time cancel test of 'readv' successful >> in-time cancel test of 'select' successful >> in-time cancel test of 'pselect' successful >> in-time cancel test of 'poll' successful >> in-time cancel test of 'ppoll' successful >> in-time cancel test of 'write' successful >> in-time cancel test of 'writev' successful >> in-time cancel test of 'sleep' successful >> in-time cancel test of 'usleep' successful >> in-time cancel test of 'nanosleep' successful >> in-time cancel test of 'wait' successful >> in-time cancel test of 'waitid' successful >> in-time cancel test of 'waitpid' successful >> in-time cancel test of 'sigpause' successful >> in-time cancel test of 'sigsuspend' successful >> in-time cancel test of 'sigwait' successful >> in-time cancel test of 'sigwaitinfo' successful >> in-time cancel test of 'sigtimedwait' successful >> in-time cancel test of 'pause' successful >> in-time cancel test of 'accept' successful >> got size 4512 >> in-time cancel test of 'send' successful >> in-time cancel test of 'recv' successful >> in-time cancel test of 'recvfrom' successful >> in-time cancel test of 'recvmsg' successful >> in-time cancel test of 'msgrcv' successful >> early cancel test of 'read' successful >> early cancel test of 'readv' successful >> early cancel test of 'select' successful >> early cancel test of 'pselect' successful >> early cancel test of 'poll' successful >> early cancel test of 'ppoll' successful >> early cancel test of 'write' successful >> early cancel test of 'writev' successful >> early cancel test of 'sleep' successful >> early cancel test of 'usleep' successful >> early cancel test of 'nanosleep' successful >> early cancel test of 'wait' successful >> early cancel test of 'waitid' successful >> early cancel test of 'waitpid' successful >> early cancel test of 'sigpause' successful >> early cancel test of 'sigsuspend' successful >> early cancel test of 'sigwait' successful >> early cancel test of 'sigwaitinfo' successful >> early cancel test of 'sigtimedwait' successful >> early cancel test of 'pause' successful >> early cancel test of 'accept' successful >> got size 4512 >> early cancel test of 'send' successful >> early cancel test of 'recv' successful >> early cancel test of 'recvfrom' successful >> early cancel test of 'recvmsg' successful >> early cancel test of 'preadv' successful >> early cancel test of 'preadv2' successful >> early cancel test of 'pwritev' successful >> early cancel test of 'pwritev2' successful >> early cancel test of 'open' successful >> early cancel test of 'close' successful >> early cancel test of 'pread' successful >> early cancel test of 'pwrite' successful >> early cancel test of 'fsync' successful >> early cancel test of 'fdatasync' successful >> early cancel test of 'msync' successful >> got size 4512 >> early cancel test of 'sendto' successful >> early cancel test of 'sendmsg' successful >> early cancel test of 'creat' successful >> early cancel test of 'connect' successful >> early cancel test of 'tcdrain' successful >> early cancel test of 'msgrcv' successful >> early cancel test of 'msgsnd' successful >> dave@atlas:~/gnu/glibc/objdir$ echo $? >> 0 >> >> commit e4f2006f1287e7ea17660490569cff323772dac4: >> dave@atlas:~/gnu/glibc/objdir$ env GCONV_PATH=/home/dave/gnu/glibc/objdir/iconvdata LOCPATH=/home/dave/gnu/glibc/objdir/localedata LC_ALL=C /home/dave/gnu/glibc/objdir/elf/ld.so.1 --library-path /home/dave/gnu/glibc/objdir:/home/dave/gnu/glibc/objdir/math:/home/dave/gnu/glibc/objdir/elf:/home/dave/gnu/glibc/objdir/dlfcn:/home/dave/gnu/glibc/objdir/nss:/home/dave/gnu/glibc/objdir/nis:/home/dave/gnu/glibc/objdir/rt:/home/dave/gnu/glibc/objdir/resolv:/home/dave/gnu/glibc/objdir/mathvec:/home/dave/gnu/glibc/objdir/support:/home/dave/gnu/glibc/objdir/crypt:/home/dave/gnu/glibc/objdir/nptl /home/dave/gnu/glibc/objdir/nptl/tst-cancelx4 >> got size 4512 >> cleanup handler not called for 'read' >> cleanup handler not called for 'readv' >> cleanup handler not called for 'select' >> cleanup handler not called for 'pselect' >> cleanup handler not called for 'poll' >> cleanup handler not called for 'ppoll' >> cleanup handler not called for 'write' >> cleanup handler not called for 'writev' >> cleanup handler not called for 'sleep' >> cleanup handler not called for 'usleep' >> cleanup handler not called for 'nanosleep' >> cleanup handler not called for 'wait' >> cleanup handler not called for 'waitid' >> cleanup handler not called for 'waitpid' >> cleanup handler not called for 'sigpause' >> cleanup handler not called for 'sigsuspend' >> cleanup handler not called for 'sigwait' >> cleanup handler not called for 'sigwaitinfo' >> cleanup handler not called for 'sigtimedwait' >> cleanup handler not called for 'pause' >> cleanup handler not called for 'accept' >> got size 4512 >> cleanup handler not called for 'send' >> cleanup handler not called for 'recv' >> cleanup handler not called for 'recvfrom' >> cleanup handler not called for 'recvmsg' >> cleanup handler not called for 'msgrcv' >> early cancel test of 'read' successful >> early cancel test of 'readv' successful >> early cancel test of 'select' successful >> early cancel test of 'pselect' successful >> early cancel test of 'poll' successful >> early cancel test of 'ppoll' successful >> early cancel test of 'write' successful >> early cancel test of 'writev' successful >> early cancel test of 'sleep' successful >> early cancel test of 'usleep' successful >> early cancel test of 'nanosleep' successful >> early cancel test of 'wait' successful >> early cancel test of 'waitid' successful >> early cancel test of 'waitpid' successful >> early cancel test of 'sigpause' successful >> early cancel test of 'sigsuspend' successful >> early cancel test of 'sigwait' successful >> early cancel test of 'sigwaitinfo' successful >> early cancel test of 'sigtimedwait' successful >> early cancel test of 'pause' successful >> early cancel test of 'accept' successful >> got size 4512 >> early cancel test of 'send' successful >> early cancel test of 'recv' successful >> early cancel test of 'recvfrom' successful >> early cancel test of 'recvmsg' successful >> early cancel test of 'preadv' successful >> early cancel test of 'preadv2' successful >> early cancel test of 'pwritev' successful >> early cancel test of 'pwritev2' successful >> early cancel test of 'open' successful >> early cancel test of 'close' successful >> early cancel test of 'pread' successful >> early cancel test of 'pwrite' successful >> early cancel test of 'fsync' successful >> early cancel test of 'fdatasync' successful >> early cancel test of 'msync' successful >> got size 4512 >> early cancel test of 'sendto' successful >> early cancel test of 'sendmsg' successful >> early cancel test of 'creat' successful >> early cancel test of 'connect' successful >> early cancel test of 'tcdrain' successful >> early cancel test of 'msgrcv' successful >> early cancel test of 'msgsnd' successful >> dave@atlas:~/gnu/glibc/objdir$ echo $? >> 1 >> >> Dave >> >> On 2021-09-08 4:44 p.m., Helge Deller wrote: >>> We can move the INSN_LDI_R20 instruction into the branch delay slot. >>> >>> Signed-off-by: Helge Deller <deller@gmx.de> >>> --- >>> arch/parisc/include/asm/rt_sigframe.h | 2 +- >>> arch/parisc/kernel/signal.c | 13 ++++++------- >>> arch/parisc/kernel/signal32.h | 2 +- >>> 3 files changed, 8 insertions(+), 9 deletions(-) >>> >>> diff --git a/arch/parisc/include/asm/rt_sigframe.h b/arch/parisc/include/asm/rt_sigframe.h >>> index 2b3010ade00e..4b9e3d707571 100644 >>> --- a/arch/parisc/include/asm/rt_sigframe.h >>> +++ b/arch/parisc/include/asm/rt_sigframe.h >>> @@ -2,7 +2,7 @@ >>> #ifndef _ASM_PARISC_RT_SIGFRAME_H >>> #define _ASM_PARISC_RT_SIGFRAME_H >>> >>> -#define SIGRETURN_TRAMP 4 >>> +#define SIGRETURN_TRAMP 3 >>> #define SIGRESTARTBLOCK_TRAMP 5 >>> #define TRAMP_SIZE (SIGRETURN_TRAMP + SIGRESTARTBLOCK_TRAMP) >>> >>> diff --git a/arch/parisc/kernel/signal.c b/arch/parisc/kernel/signal.c >>> index 46b1050640b8..bbfe23c40c01 100644 >>> --- a/arch/parisc/kernel/signal.c >>> +++ b/arch/parisc/kernel/signal.c >>> @@ -288,22 +288,21 @@ setup_rt_frame(struct ksignal *ksig, sigset_t *set, struct pt_regs *regs, >>> already in userspace. The first words of tramp are used to >>> save the previous sigrestartblock trampoline that might be >>> on the stack. We start the sigreturn trampoline at >>> - SIGRESTARTBLOCK_TRAMP+X. */ >>> + SIGRESTARTBLOCK_TRAMP. */ >>> err |= __put_user(in_syscall ? INSN_LDI_R25_1 : INSN_LDI_R25_0, >>> &frame->tramp[SIGRESTARTBLOCK_TRAMP+0]); >>> - err |= __put_user(INSN_LDI_R20, >>> - &frame->tramp[SIGRESTARTBLOCK_TRAMP+1]); >>> err |= __put_user(INSN_BLE_SR2_R0, >>> + &frame->tramp[SIGRESTARTBLOCK_TRAMP+1]); >>> + err |= __put_user(INSN_LDI_R20, >>> &frame->tramp[SIGRESTARTBLOCK_TRAMP+2]); >>> - err |= __put_user(INSN_NOP, &frame->tramp[SIGRESTARTBLOCK_TRAMP+3]); >>> >>> - start = (unsigned long) &frame->tramp[0]; >>> - end = (unsigned long) &frame->tramp[TRAMP_SIZE]; >>> + start = (unsigned long) &frame->tramp[SIGRESTARTBLOCK_TRAMP+0]; >>> + end = (unsigned long) &frame->tramp[SIGRESTARTBLOCK_TRAMP+3]; >>> flush_user_dcache_range_asm(start, end); >>> flush_user_icache_range_asm(start, end); >>> >>> /* TRAMP Words 0-4, Length 5 = SIGRESTARTBLOCK_TRAMP >>> - * TRAMP Words 5-9, Length 4 = SIGRETURN_TRAMP >>> + * TRAMP Words 5-7, Length 3 = SIGRETURN_TRAMP >>> * So the SIGRETURN_TRAMP is at the end of SIGRESTARTBLOCK_TRAMP >>> */ >>> rp = (unsigned long) &frame->tramp[SIGRESTARTBLOCK_TRAMP]; >>> diff --git a/arch/parisc/kernel/signal32.h b/arch/parisc/kernel/signal32.h >>> index f166250f2d06..a5bdbb5678b7 100644 >>> --- a/arch/parisc/kernel/signal32.h >>> +++ b/arch/parisc/kernel/signal32.h >>> @@ -36,7 +36,7 @@ struct compat_regfile { >>> compat_int_t rf_sar; >>> }; >>> >>> -#define COMPAT_SIGRETURN_TRAMP 4 >>> +#define COMPAT_SIGRETURN_TRAMP 3 >>> #define COMPAT_SIGRESTARTBLOCK_TRAMP 5 >>> #define COMPAT_TRAMP_SIZE (COMPAT_SIGRETURN_TRAMP + \ >>> COMPAT_SIGRESTARTBLOCK_TRAMP) >>> -- >>> 2.31.1 >>> >>
On 2021-11-16 10:31 a.m., John David Anglin wrote:
> I don't know what's wrong with it. I have reverted it for now.
I think problem must be with cache flush range.
Dave
On 11/16/21 18:08, John David Anglin wrote: > On 2021-11-16 10:31 a.m., John David Anglin wrote: >> I don't know what's wrong with it. I have reverted it for now. > I think problem must be with cache flush range. Not sure. Seems like reverting SIGRETURN_TRAMP back to 4 fixes it. Anyway, I'll revert the whole patch for now. Maybe we can fix it in v5.17. Helge
On 2021-11-16 2:02 p.m., Helge Deller wrote: > On 11/16/21 18:08, John David Anglin wrote: >> On 2021-11-16 10:31 a.m., John David Anglin wrote: >>> I don't know what's wrong with it. I have reverted it for now. >> I think problem must be with cache flush range. Didn't work
diff --git a/arch/parisc/include/asm/rt_sigframe.h b/arch/parisc/include/asm/rt_sigframe.h index 2b3010ade00e..4b9e3d707571 100644 --- a/arch/parisc/include/asm/rt_sigframe.h +++ b/arch/parisc/include/asm/rt_sigframe.h @@ -2,7 +2,7 @@ #ifndef _ASM_PARISC_RT_SIGFRAME_H #define _ASM_PARISC_RT_SIGFRAME_H -#define SIGRETURN_TRAMP 4 +#define SIGRETURN_TRAMP 3 #define SIGRESTARTBLOCK_TRAMP 5 #define TRAMP_SIZE (SIGRETURN_TRAMP + SIGRESTARTBLOCK_TRAMP) diff --git a/arch/parisc/kernel/signal.c b/arch/parisc/kernel/signal.c index 46b1050640b8..bbfe23c40c01 100644 --- a/arch/parisc/kernel/signal.c +++ b/arch/parisc/kernel/signal.c @@ -288,22 +288,21 @@ setup_rt_frame(struct ksignal *ksig, sigset_t *set, struct pt_regs *regs, already in userspace. The first words of tramp are used to save the previous sigrestartblock trampoline that might be on the stack. We start the sigreturn trampoline at - SIGRESTARTBLOCK_TRAMP+X. */ + SIGRESTARTBLOCK_TRAMP. */ err |= __put_user(in_syscall ? INSN_LDI_R25_1 : INSN_LDI_R25_0, &frame->tramp[SIGRESTARTBLOCK_TRAMP+0]); - err |= __put_user(INSN_LDI_R20, - &frame->tramp[SIGRESTARTBLOCK_TRAMP+1]); err |= __put_user(INSN_BLE_SR2_R0, + &frame->tramp[SIGRESTARTBLOCK_TRAMP+1]); + err |= __put_user(INSN_LDI_R20, &frame->tramp[SIGRESTARTBLOCK_TRAMP+2]); - err |= __put_user(INSN_NOP, &frame->tramp[SIGRESTARTBLOCK_TRAMP+3]); - start = (unsigned long) &frame->tramp[0]; - end = (unsigned long) &frame->tramp[TRAMP_SIZE]; + start = (unsigned long) &frame->tramp[SIGRESTARTBLOCK_TRAMP+0]; + end = (unsigned long) &frame->tramp[SIGRESTARTBLOCK_TRAMP+3]; flush_user_dcache_range_asm(start, end); flush_user_icache_range_asm(start, end); /* TRAMP Words 0-4, Length 5 = SIGRESTARTBLOCK_TRAMP - * TRAMP Words 5-9, Length 4 = SIGRETURN_TRAMP + * TRAMP Words 5-7, Length 3 = SIGRETURN_TRAMP * So the SIGRETURN_TRAMP is at the end of SIGRESTARTBLOCK_TRAMP */ rp = (unsigned long) &frame->tramp[SIGRESTARTBLOCK_TRAMP]; diff --git a/arch/parisc/kernel/signal32.h b/arch/parisc/kernel/signal32.h index f166250f2d06..a5bdbb5678b7 100644 --- a/arch/parisc/kernel/signal32.h +++ b/arch/parisc/kernel/signal32.h @@ -36,7 +36,7 @@ struct compat_regfile { compat_int_t rf_sar; }; -#define COMPAT_SIGRETURN_TRAMP 4 +#define COMPAT_SIGRETURN_TRAMP 3 #define COMPAT_SIGRESTARTBLOCK_TRAMP 5 #define COMPAT_TRAMP_SIZE (COMPAT_SIGRETURN_TRAMP + \ COMPAT_SIGRESTARTBLOCK_TRAMP)
We can move the INSN_LDI_R20 instruction into the branch delay slot. Signed-off-by: Helge Deller <deller@gmx.de> --- arch/parisc/include/asm/rt_sigframe.h | 2 +- arch/parisc/kernel/signal.c | 13 ++++++------- arch/parisc/kernel/signal32.h | 2 +- 3 files changed, 8 insertions(+), 9 deletions(-) -- 2.31.1