On 1/16/19 3:53 AM, Arnd Bergmann wrote:
> On Tue, Jan 15, 2019 at 3:56 AM Jens Axboe <[email protected]> wrote:
> 
>> diff --git a/include/linux/syscalls.h b/include/linux/syscalls.h
>> index 542757a4c898..e36c264d74e8 100644
>> --- a/include/linux/syscalls.h
>> +++ b/include/linux/syscalls.h
>> @@ -314,6 +314,8 @@ asmlinkage long sys_io_uring_setup(u32 entries,
>>                                 struct io_uring_params __user *p);
>>  asmlinkage long sys_io_uring_enter(unsigned int fd, u32 to_submit,
>>                                 u32 min_complete, u32 flags);
>> +asmlinkage long sys_io_uring_register(unsigned int fd, unsigned op,
>> +                               void __user *arg);
>>
> 
> Would it be possible to make this a typed pointer instead? If this needs to
> be extended later to pass a different structure, a new system call may
> be better for consistency than overloading the argument in various
> ways.

As you can see from the later patch for registering files, it'll be used
for other structs too. Feels a little silly to add an extra system call
for that. I agree the void * isn't the prettiest thing in the world, but
at least it allows us to extend the API without having to add even more
system calls down the line.

>> + * io_uring_register(2) opcodes and arguments
>> + */
>> +#define IORING_REGISTER_BUFFERS                0
>> +#define IORING_UNREGISTER_BUFFERS      1
>> +
>> +struct io_uring_register_buffers {
>> +       union {
>> +               struct iovec *iovecs;
>> +               __u64 pad;
>> +       };
>> +       __u32 nr_iovecs;
>> +};
> 
> As before, I'd suggest making this structure compatible between 32-bit
> and 64-bit architectectures, by avoiding pointer and implied padding
> fields.

I'll await an answer to my previous question on that.

-- 
Jens Axboe

Reply via email to