On 03/04/20(Fri) 19:26, Philip Guenther wrote: > On Fri, 3 Apr 2020, Martin Pieuchot wrote: > > Depending on the operation requested futex(2) might return the number of > > woken threads or an error. That means the following... > > > > mpv CALL > > futex(0xa58935899b0,0x82<FUTEX_WAKE|FUTEX_PRIVATE_FLAG>,1,0,0) > > mpv RET futex -1 errno 1 Operation not permitted > > > > ...is not an error but it indicates that 1 thread has been awoken. > > > > Diff below would have saved me quite some time looking in the wrong > > direction. > > > > ok? > > Isn't that just a complicated way to get the same effect as deleting the > "case SYS_futex:" line shortly above there?
Thanks! Updated below :) > The real problem is that futex(2) is actually 3 different syscalls wrapped > into one. It was split into three then kdump could properly report > futex_wake(2) and futex_requeue(2) as returning a count, while > futex_wait(2) returns an errno. The existing 'switch' in sys_futex() > would just move to userspace's futex(3), provided for linux compat. > > (And our syscalls would have proper prototypes and futex_wait() could take > a clockid_t, and....) I already heard this song many times by various people. I don't mind. But until now it has just been an idea :) Index: kdump.c =================================================================== RCS file: /cvs/src/usr.bin/kdump/kdump.c,v retrieving revision 1.141 diff -u -p -r1.141 kdump.c --- kdump.c 18 Jan 2020 23:56:31 -0000 1.141 +++ kdump.c 4 Apr 2020 07:06:20 -0000 @@ -1128,7 +1128,6 @@ doerr: /* syscalls that return errno values */ case SYS_getlogin_r: case SYS___thrsleep: - case SYS_futex: if ((error = ret) != 0) goto doerr; /* FALLTHROUGH */