Re: Possible io_uring bug in PA-RISC kernel 6.1.46

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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




[Index of Archives]     [Linux SoC]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux