Re: io_uring failure on parisc with VIPT caches

John David Anglin
2023-02-15T21:10:34Z

On 2023-02-15 3:37 p.m., Jens Axboe wrote:
>> System crashes running test buf-ring.t.
> Huh, what's the crash?
Not much info.  System log indicates an HPMC occurred. Unfortunately, recovery code doesn't work.
>
>> Running test buf-ring.t bad run 0/0 = -233
> THis one, and the similar -223 ones, you need to try and dig into that.
> It doesn't reproduce for me, and it very much seems like the test case
> having a different view of what -ENOBUFS looks like and hence it fails
> when the kernel passes down something that is -ENOBUFS internally, but
> doesn't match the app -ENOBUFS value. Are you running a 64-bit kernel?
> Would that cause any differences?
I'm running a 64-bit kernel (6.1.12).

I believe 32 and 64-bit kernels have same error codes.

I see three places in io_uring where -ENOBUFS is returned.  They have similar code:

retry_multishot:
if (io_do_buffer_select(req)) {
void __user *buf;
size_t len = sr->len;

buf = io_buffer_select(req, &len, issue_flags);
if (!buf)
return -ENOBUFS;
>
> I don't see this on qemu with the 32-bit kernel, nor does it happen on
> other platforms.

--
John David Anglin dave.anglin@bell.net