Hello Vidra, On 8/27/23 13:25, Vidra.Jonas@xxxxxxxxx wrote:
on my C8000 workstation, I'm getting libuv aborts connected to io_uring usage. I'm not sure whether this is a libuv bug or a kernel one, but since libuv is pretty well tested on other archs, it's probably a PA-RISC issue.
I'd assume it's a problem in libuv. I'm not saying libuv is doing stuff wrong, but probably not the way it needs to be to fulfill cache requirements on parisc.
I've encountered the problem in kernel versions 6.1.41 and 6.1.46. 6.1.4 seemed fine, but I updated other system packages in the meantime, so I can't be sure.
Maybe you could try kernel git head (or 6.4.stable) too? Those have some more io_uring and parisc patches...
The issue is that a call to `io_uring_enter(fd, 2, 2, IORING_ENTER_GETEVENTS)` returns 0, and libuv reacts to that by aborting, probably on this line: https://github.com/libuv/libuv/blob/65dc822d6c20a9130fa100c7b46d751f8cf4d233/src/unix/linux.c#L1252 (I'm saying probably, because gdb seems to be buggy on my machine and I don't really trust its output, so I rely on strace instead, but that doesn't support backtraces on the PA-RISC.)
I have not yet looked into this problem, but if the io_uring syscalls return 0, it's often an issue that the kernel doesn't see the same memory (due to cache aliasing) as the userspace. The memory regions allocated with mmap() need to be done by the kernel. The https://github.com/axboe/liburing library should do it right, but it seems libuv does everything itself.
Since min_complete is 2 here and IORING_SETUP_IOPOLL was not specified during setup (the only flags that can be passed to io_uring_setup are 0 and IORING_SETUP_SQPOLL), the call should (if I understand the docs correctly) block instead of returning. The bug manifests as aborts in CMake when compiling KDE packages, as any call of `cmake -E cmake_autogen ...` fails. Is this a known issue? I've seen a number of io_uring patches on the ML, but none seem relevant.
The best thing would be to have a small reproducer. Do you think you can come up with something? Helge