From: Alejandro Colomar <alx@kernel.org>
To: наб <nabijaczleweli@nabijaczleweli.xyz>
Cc: linux-man@vger.kernel.org
Subject: Re: [PATCH v9] futex_waitv.2: new page
Date: Sun, 15 Feb 2026 19:18:24 +0100 [thread overview]
Message-ID: <aZILB86QfGuXJng4@devuan> (raw)
In-Reply-To: <b2m66awhq3g7dsyccbawsqovfzw73ocqtbqmkpgpoje2jf6iiz@tarta.nabijaczleweli.xyz>
[-- Attachment #1: Type: text/plain, Size: 2837 bytes --]
Hi наб,
On 2026-02-14T21:48:01+0100, наб wrote:
[...]
> +static inline long
> +my_futex_wait_private(_Atomic uint32_t *uaddr, uint32_t val)
I just noticed this should be my_futex_wa{it => ke}_private().
Probably caused by my earlier confusion while reading these; sorry!
> +{
> + return syscall(SYS_futex, uaddr, FUTEX_WAKE_PRIVATE, val);
> +}
> +\&
> +static inline long
> +my_futex_waitv(unsigned int n;
> + struct futex_waitv waiters[n], unsigned int n,
> + unsigned int flags, const struct timespec *timeout,
> + clockid_t clockid)
> +{
> + return syscall(SYS_futex_waitv, waiters, n, flags, timeout, clockid);
> +}
> +\&
> +void *
> +worker(void *arg)
> +{
> + _Atomic uint32_t *futex = arg;
> +\&
> + usleep(*futex * 10000);
> + *futex *= 2;
> + my_futex_wait_private(futex, 1);
> + return NULL;
> +}
> +\&
> +int
> +main(void)
> +{
> + _Atomic uint32_t futexes[10];
> + uint8_t init[countof(futexes)];
> + struct futex_waitv waiters[countof(futexes)] = {};
> + int i;
> +\&
> + if (getentropy(init, sizeof(init)))
> + err(EXIT_FAILURE, "getentropy");
> + init[0] = init[1] = init[2];
> + for (i = 0; i < countof(futexes); ++i) {
> + printf("%" PRIu8 "\[rs]t", init[i]);
> + atomic_init(&futexes[i], init[i]);
> + pthread_create(&(pthread_t){}, NULL, worker, &futexes[i]);
> + }
> + putchar(\[aq]\[rs]n\[aq]);
> +\&
> + for (i = 0; i < countof(futexes); ++i) {
> + waiters[i].val = futexes[i];
> + waiters[i].uaddr = (uintptr_t) &futexes[i];
> + waiters[i].flags = FUTEX2_SIZE_U32 | FUTEX2_PRIVATE;
> + }
> + for (;;) {
> + struct timespec timeout;
> + int woke;
> +\&
> + clock_gettime(CLOCK_MONOTONIC, &timeout);
> + timeout.tv_sec += 1;
> +\&
> + woke = my_futex_waitv(waiters, countof(futexes), 0, &timeout, CLOCK_MONOTONIC);
> + if (woke == \-1 && (errno != EAGAIN && errno != EWOULDBLOCK))
> + err(EXIT_FAILURE, "my_futex_waitv");
> +\&
> + for (i = 0; i < countof(futexes); ++i) {
> + if (futexes[i] != waiters[i].val)
> + printf("%" PRIu32 "%s", futexes[i], i == woke ? "!" : "");
This line goes past the right margin, and could be trivially narrowed
by using the new (C23) fixed-width length modifiers:
alx@devuan:~/tmp$ cat pf.c
#include <stdint.h>
#include <stdio.h>
int
main(void)
{
int32_t i = 7;
printf("%w32d\n", i);
}
alx@devuan:~/tmp$ gcc -Wall -Wextra pf.c
alx@devuan:~/tmp$ ./a.out
7
So, the line would be:
printf("%w32d%s", futexes[i], i == woke ? "!" : "");
> + putchar(\[aq]\[rs]t\[aq]);
> + }
> + putchar(\[aq]\[rs]n\[aq]);
> +\&
> + for (i = 0; i < countof(futexes); ++i)
> + waiters[i].val = futexes[i];
> + }
> +}
Have a lovely night!
Alex
--
<https://www.alejandro-colomar.es>
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
next prev parent reply other threads:[~2026-02-15 18:18 UTC|newest]
Thread overview: 53+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-02-07 12:49 [PATCH] futex_waitv.2: new page наб
2026-02-07 18:57 ` Alejandro Colomar
2026-02-07 19:16 ` наб
2026-02-07 21:50 ` Alejandro Colomar
2026-02-07 22:00 ` [PATCH v2] " наб
2026-02-09 22:35 ` Alejandro Colomar
2026-02-10 14:17 ` наб
2026-02-10 14:30 ` Alejandro Colomar
2026-02-10 15:54 ` Kristoffer Haugsbakk
2026-02-10 18:39 ` Alejandro Colomar
2026-02-11 7:35 ` Jeff King
2026-02-11 8:15 ` Kristoffer Haugsbakk
2026-02-11 15:43 ` Junio C Hamano
2026-02-10 16:54 ` Junio C Hamano
2026-02-10 17:11 ` Kristoffer Haugsbakk
2026-02-10 18:44 ` Alejandro Colomar
2026-02-10 20:05 ` Alejandro Colomar
2026-02-10 20:32 ` [PATCH v3] " наб
2026-02-10 21:11 ` Alejandro Colomar
2026-02-11 4:00 ` [PATCH v4] " наб
2026-02-11 13:23 ` Alejandro Colomar
2026-02-11 13:51 ` [PATCH v5] " наб
2026-02-11 14:15 ` [PATCH v6] " наб
2026-02-11 14:31 ` Alejandro Colomar
2026-02-11 14:44 ` [PATCH v7] " наб
2026-02-11 14:55 ` Alejandro Colomar
2026-02-11 14:59 ` наб
2026-02-11 15:13 ` Alejandro Colomar
2026-02-14 17:32 ` Alejandro Colomar
2026-02-14 19:30 ` [PATCH v8] " наб
2026-02-14 20:03 ` Alejandro Colomar
2026-02-14 20:48 ` [PATCH v9] " наб
2026-02-15 18:18 ` Alejandro Colomar [this message]
2026-02-15 19:00 ` [PATCH v10] " наб
2026-02-16 0:32 ` Alejandro Colomar
2026-02-16 14:20 ` [PATCH v11] " наб
2026-02-16 14:50 ` Alejandro Colomar
2026-02-16 20:43 ` [PATCH v12] " наб
2026-02-17 13:07 ` Alejandro Colomar
2026-02-17 14:31 ` [PATCH v13] " наб
2026-02-17 15:46 ` Alejandro Colomar
2026-02-17 16:17 ` наб
2026-02-18 0:31 ` Alejandro Colomar
2026-02-11 14:28 ` [PATCH v5] " Alejandro Colomar
2026-02-18 0:41 ` [PATCH v1 0/1] futex_waitv.2: Move text to a new PARAMETERS section Alejandro Colomar
2026-02-18 0:41 ` [PATCH v1 1/1] man/man2/futex_waitv.2: " Alejandro Colomar
2026-02-18 20:16 ` [PATCH v1 0/1] futex_waitv.2: " наб
2026-02-18 20:26 ` Alejandro Colomar
2026-02-18 20:30 ` наб
2026-02-18 20:33 ` Alejandro Colomar
2026-02-18 20:40 ` G. Branden Robinson
2026-02-18 21:28 ` Alejandro Colomar
2026-02-18 22:04 ` Alejandro Colomar
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=aZILB86QfGuXJng4@devuan \
--to=alx@kernel.org \
--cc=linux-man@vger.kernel.org \
--cc=nabijaczleweli@nabijaczleweli.xyz \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.