On Thu, Oct 24, 2024, at 14:57, André Almeida wrote: > This new syscall allows to set multiple list to the same process. There > are two list types: 32 and 64 bit lists. > > It supports up to 10 lists per process (see ROBUST_LISTS_PER_TASK). The > lists are dynamically allocated on demand, as part of a linked list. > This is the proposed interface: > > long set_robust_list2(void *head, int index, unsigned int flags) > > Userspace can ask to set the head of a new list using (index = -1). > Kernel will allocate a new list, place in the linked list and return the > new index to userspace. > > Userspace can modify an existing head by using an index >= 0. If the > requested list doesn't exist, an error is returned. > > Userspace cannot remove a robust list. > > For now, flag is for the list type: > > enum robust_list_type { > ROBUST_LIST_32BIT, > ROBUST_LIST_64BIT, > }; > > Signed-off-by: André Almeida <andrealmeid@xxxxxxxxxx> Hi André, I have no opinion on the syscall itself, but I'll comment on the way you hook it up: > arch/arm/tools/syscall.tbl | 1 + > arch/x86/entry/syscalls/syscall_64.tbl | 1 + If we agree on the number, this should be added to all architectures at the same time. In particular, when you add it to 32-bit arm, it also needs to be in the corresponding arch/arm64/tools/syscall_32.tbl for compat mode. > include/uapi/asm-generic/unistd.h | 5 +- This reminds me that I need to send the patch to remove this file, nothing should use it any more, though we still have the copy in tools/include/uapi/asm-generic/unistd.h that still gets referenced until the scripts are changed to use the syscall.tbl format. > + if (unlikely(!list_empty(list2))) { > + list_for_each_entry_safe(curr, n, list2, list) { > + if (curr->head != NULL) { > + if (curr->list_type == ROBUST_LIST_64BIT) > + exit_robust_list(tsk, curr->head); > + else if (curr->list_type == ROBUST_LIST_32BIT) > + compat_exit_robust_list(tsk, curr->head); > + curr->head = NULL; > + } This looks like the behavior of a 32-bit task using ROBUST_LIST_64BIT is different on native 32-bit kernels compared to running on compat mode. Assuming we want them to behave the same way, did you intend ROBUST_LIST_64BIT to refer to 64-bit pointers on 32-bit tasks, or should they use normal word-size pointers? Arnd