From: Thomas Gleixner <tglx@linutronix.de>
To: Eric Dumazet <edumazet@google.com>,
Anna-Maria Behnsen <anna-maria@linutronix.de>,
Frederic Weisbecker <frederic@kernel.org>
Cc: linux-kernel <linux-kernel@vger.kernel.org>,
Benjamin Segall <bsegall@google.com>,
Eric Dumazet <eric.dumazet@gmail.com>,
Eric Dumazet <edumazet@google.com>,
Andrey Vagin <avagin@openvz.org>,
Pavel Tikhomirov <ptikhomirov@virtuozzo.com>,
Peter Zijlstra <peterz@infradead.org>
Subject: Re: [PATCH 2/2] posix-timers: Use RCU in posix_timer_add()
Date: Tue, 18 Feb 2025 15:16:09 +0100 [thread overview]
Message-ID: <87zfijibiu.ffs@tglx> (raw)
In-Reply-To: <87o6z0jrx6.ffs@tglx>
On Mon, Feb 17 2025 at 20:24, Thomas Gleixner wrote:
> On Fri, Feb 14 2025 at 13:59, Eric Dumazet wrote:
>> @@ -112,7 +112,19 @@ static int posix_timer_add(struct k_itimer *timer)
>>
>> head = &posix_timers_hashtable[hash(sig, id)];
>>
>> + rcu_read_lock();
>> + if (__posix_timers_find(head, sig, id)) {
>> + rcu_read_unlock();
>> + cond_resched();
>> + continue;
>> + }
>> + rcu_read_unlock();
>> spin_lock(&hash_lock);
>> + /*
>> + * We must perform the lookup under hash_lock protection
>> + * because another thread could have used the same id.
>
> Hmm, that won't help and is broken already today as timer->id is set at
> the call site after releasing hash_lock.
>
>> + * This is very unlikely, but possible.
>
> Only if the process is able to install INT_MAX - 1 timers and the stupid
> search wraps around (INT_MAX loops) on the other thread and ends up at
> the same number again. But yes, theoretically it's possible. :)
>
> So the timer ID must be set _before_ adding it to the hash list, but
> that wants to be a seperate patch.
It's even worse. __posix_timers_find() checks for both timer->it_id and
timer->it_signal, but the latter is only set when the timer is about to
go live. I have an idea, but that might be a bad one :)
Thanks,
tglx
prev parent reply other threads:[~2025-02-18 14:16 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-02-14 13:59 [PATCH 0/2] posix-timers: Reduce spinlock contention Eric Dumazet
2025-02-14 13:59 ` [PATCH 1/2] posix-timers: Make next_posix_timer_id an atomic_t Eric Dumazet
2025-02-14 13:59 ` [PATCH 2/2] posix-timers: Use RCU in posix_timer_add() Eric Dumazet
2025-02-14 16:59 ` David Laight
2025-02-14 17:48 ` Eric Dumazet
2025-02-17 19:25 ` Thomas Gleixner
2025-02-17 19:24 ` Thomas Gleixner
2025-02-18 14:16 ` Thomas Gleixner [this message]
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=87zfijibiu.ffs@tglx \
--to=tglx@linutronix.de \
--cc=anna-maria@linutronix.de \
--cc=avagin@openvz.org \
--cc=bsegall@google.com \
--cc=edumazet@google.com \
--cc=eric.dumazet@gmail.com \
--cc=frederic@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=peterz@infradead.org \
--cc=ptikhomirov@virtuozzo.com \
/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.