On Tue, Jan 29, 2019 at 5:28 PM Jens Axboe <axboe@xxxxxxxxx> wrote: > > On 1/29/19 9:26 AM, Arnd Bergmann wrote: > > On Tue, Jan 29, 2019 at 5:19 PM Jens Axboe <axboe@xxxxxxxxx> wrote: > >> On 1/29/19 9:18 AM, Arnd Bergmann wrote: > >>> On Tue, Jan 29, 2019 at 4:20 PM Jens Axboe <axboe@xxxxxxxxx> wrote: > >>>> That's good info. I am currently using set_user_sigmask() for it. > >>>> I'd really like to avoid having to pass in a sigset_t size for the > >>>> system call, however. > >>> > >>> I really wouldn't do it, given that all other signal handling interfaces > >>> are prepared for longer signal masks. You /could/ probably extend > >>> it later with a flags bit to signify a longer mask instead of using > >>> the entire register to hold the bit length, it just seems really > >>> inconsistent with all other system calls. > >> > >> Damnit! OK, I'll keep what I currently have then. > > > > As long as you stay within the 6-argument syscall contraints, > > the cost of passing the length is basically free, right? > > > > Is there anything else you are worried about? > > My main worry is not the extra argument, more that we're at capacity > for the system call. If we wanted to add a timeout parameter, then we'd > need to bundle them up, which sucks. Ok, got it. If it turns out that we do need the timeout argument after all, you could avoid one indirection level by grouping the sigset_t with min_complete, timeout_ns and/or sigset_size, as long as the sigset_t comes last (similar to struct sigaction). Another (also awkward) trick might be to combine min_complete and sigset_size into a 32-bit integer argument, as each of them can fit into 16 bits. Arnd