[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <84bbc996-27c7-4f83-a8c2-4f88b439bd23@nvidia.com>
Date: Tue, 2 Sep 2025 14:06:55 -0700
From: Vlad Dumitrescu <vdumitrescu@...dia.com>
To: "Christoph Lameter (Ampere)" <cl@...two.org>
Cc: Dennis Zhou <dennis@...nel.org>, Tejun Heo <tj@...nel.org>,
Baoquan He <bhe@...hat.com>, Andrew Morton <akpm@...ux-foundation.org>,
linux-mm@...ck.org, linux-kernel@...r.kernel.org
Subject: Re: [PATCH] percpu: fix race on alloc failed warning limit
On 9/2/25 10:39, Christoph Lameter (Ampere) wrote:
> On Fri, 22 Aug 2025, Vlad Dumitrescu wrote:
>
>> + if (do_warn && atomic_read(&warn_limit) > 0) {
>> + int remaining = atomic_dec_return(&warn_limit);
>
>
> The code creates a race condition since another atomic_dec_return() can
> happen on another cpu between these two lines. warn_limit can go negative.
Yes, which is why I mentioned it in the description. But compared to before,
it should be benign.
> Use a single atomic operation instead?
Did you have something like this in mind?
- if (do_warn && atomic_read(&warn_limit) > 0) {
- int remaining = atomic_dec_return(&warn_limit);
+ if (do_warn) {
+ int remaining = atomic_dec_if_positive(&warn_limit);
Should end up with the same visible result, but w/o going negative.
Would you like me to send v2?Vlad
Powered by blists - more mailing lists