From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 05295C3ABBF for ; Wed, 7 May 2025 00:10:56 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 1FD586B000A; Tue, 6 May 2025 20:10:54 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 1AD196B0083; Tue, 6 May 2025 20:10:54 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 073896B0085; Tue, 6 May 2025 20:10:54 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id DC3D06B000A for ; Tue, 6 May 2025 20:10:53 -0400 (EDT) Received: from smtpin18.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id A6172B9808 for ; Wed, 7 May 2025 00:10:55 +0000 (UTC) X-FDA: 83414181270.18.C8A0220 Received: from sea.source.kernel.org (sea.source.kernel.org [172.234.252.31]) by imf11.hostedemail.com (Postfix) with ESMTP id DE2114000B for ; Wed, 7 May 2025 00:10:53 +0000 (UTC) Authentication-Results: imf11.hostedemail.com; dkim=pass header.d=linux-foundation.org header.s=korg header.b=hnj8VECe; spf=pass (imf11.hostedemail.com: domain of akpm@linux-foundation.org designates 172.234.252.31 as permitted sender) smtp.mailfrom=akpm@linux-foundation.org; dmarc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1746576654; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=6xqJc914v++BjuZX5McYwpnFkBvRvOh/a1QOP8mgFYI=; b=mcRAZj/+QRr8AGug8l/S8W92rhPD+xJFXEQu9f4kkKWlzhvROiPEFooYQU8nqgeOxGQxxC tzS3ayBpZuNEDm99o0ZVgoV3K2dixCNFduKpWfjQF8Z76FhIFbt5937DGzvNNwgVIY5qCC 53SMhmmadKm/zdIHXNEgjyjy5owVDOc= ARC-Authentication-Results: i=1; imf11.hostedemail.com; dkim=pass header.d=linux-foundation.org header.s=korg header.b=hnj8VECe; spf=pass (imf11.hostedemail.com: domain of akpm@linux-foundation.org designates 172.234.252.31 as permitted sender) smtp.mailfrom=akpm@linux-foundation.org; dmarc=none ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1746576654; a=rsa-sha256; cv=none; b=QGTBNz/HJ2lD3gfEMnZpVeQ4beELsxalmDdd2tFKipE7UsnyqVl+Xlr2WQPnoEJj1zUvRg x1yhokxY4ZcVXlg9KZmK/DReBP5bkSmqIdD4gzwAD3rUM4RkyVq5XZ5u4feBbnaOT8J3Yr NdPpD5s8MSg+VLrpfIPG1dTeLpf4akk= Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by sea.source.kernel.org (Postfix) with ESMTP id D08EC4A988; Wed, 7 May 2025 00:10:52 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 6F5BAC4CEEF; Wed, 7 May 2025 00:10:52 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linux-foundation.org; s=korg; t=1746576652; bh=oDgUPGKFsW8595GnJVa8eZKTK3chh79fOciO/uFQHB4=; h=Date:From:To:Cc:Subject:In-Reply-To:References:From; b=hnj8VECe4xXdTXUtsonYBFVRdLaxLjTkmR9vS66O8ksAzzdUQem+loVccHfei+w2Y qkeZZZKzFyYO+nTnXjTc6NeZ4PsyljtbLmd0EBIdGNo2nrKohrooeTnnQemvOYZFZW 39HnUMdK7FFFtWn/W7NgTML0z9B4gtme8lA0kNLk= Date: Tue, 6 May 2025 17:10:51 -0700 From: Andrew Morton To: Mateusz Guzik Cc: Jeongjun Park , dennis@kernel.org, tj@kernel.org, cl@linux.com, jack@suse.cz, hughd@google.com, linux-mm@kvack.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH] lib/percpu_counter: fix data race in __percpu_counter_limited_add() Message-Id: <20250506171051.7c9a4bed6ff799e8060ca0d7@linux-foundation.org> In-Reply-To: References: <20250506102402.88141-1-aha310510@gmail.com> X-Mailer: Sylpheed 3.8.0beta1 (GTK+ 2.24.33; x86_64-pc-linux-gnu) Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit X-Rspam-User: X-Rspamd-Server: rspam09 X-Rspamd-Queue-Id: DE2114000B X-Stat-Signature: 8omp8ag4sauc3rkduok379kdy4sggqbu X-HE-Tag: 1746576653-434703 X-HE-Meta: U2FsdGVkX18P9BQSfipk2nlguU1rXPn0UjxPXf+/SHZEMjbU2iUxh0Wv7/GXM8elT/dbtcD9qaTI/pL7ercLa/EMkwNi7CQ3kh/s/ZwR/OGF/eTPMiAOaCJUglpN1kdPVwJKbR7DGm6U8eTaccQb6aaRhI9lHlgfu4w8ir9EqOUIRU02ZDhJqvRY7RoegFirnnRD8/Tb0M4XtjWYUvlw7lQlEhEH7EtLfnPsNkotPfoDzCRFX2LRrn6gxfEr6Ap+L4v8Jk9tXYXKqS0egIoDL54r28HQ6bDi1vvvpKR7Cuai1ZFe+sbilhuxOSM5dJPONLzPqG7ijvXgRtJojip9hlbY8xHvH02H6uFiaTJUkXY9BFdlA/joO0QGn7s8OJREY46imH7aJT3DVJVxboqzo2kD69mTd+B+JYLcpDAchVok1MuTbQNUgEheH9NgCwIO6mUPNr4mhElcQPbLJeHHAT/SKkSEOfR5fI5Z8aFegs+xa5A1EqTysQIWda2q4WIuEafV7Y6kFNC2BCsrnAwMQGIlZ66LPxf1FaRV28r3kTar6JOHp97W7uJEB1knLrNWxgjcyb+k6sPLiT89yRQvnkJKs4pfdv+v88Ff5d3Khu5APnBCbQ/UcXq3PSz2T/uxcRBuAhFssBv8pXfnLJ0v6X6g+LwmUD2D42lLAJdktw+JwRRBFlgq8jzXTOBOv8K9ezwG0CyEAuRtSymT9crP+6ZtQjLJE9uyYZhChiWVviDibj6+GhNZSDe4XyILo560rdqHboD3J3byY0eKbRwSn97YBZMJDQKxULxokyDeh07rttfjwUK1hrn1Yvsyw5XZvqKRUgZ6kShWQFNSiuvZ6iVKIfiaztlxLMJ7u4gsnJ2coSLEUJEiafv9HXCPfhI6NPdBrRMwX/qmKEjgrWIVbDszRl9CnEc0Mm6CuSx6iVhlYxjzC53byRygvhOnK3SqsnYxTabc4tMtCVTF3fT tESUTEZo LBP74/7H6/E7/djazkYuhSN1Qlj0j6mSdc1Len7A/g8kqEMOVng21WJKMKDdqdaioSU/mBEfqT4mZxjDQNAkFYW5Fpi2tM6pEv6kEL3z8tzU4cACvKV3yoKvET0RzPyO9Rhc+HDPM1enHpVb4prEofro/QtOhASRtNMANUBzF5tA3tETTb2GKW1IymCov76ZCPIc7uPItWrOsg4HSU7dvoM1o94WhiBNF6/Tce439kOBa8GqpRZ3vTypSj4I4V6oWFUpMwRPNgmcR1KVQuhwvDRzDP/OLQhG6hNjKVuOKtB4E6Tr4BVTEoiS8Dz7C7TnkPHAxx3VeSphvnNzqroi4L6I7Nw== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: On Tue, 6 May 2025 13:56:13 +0200 Mateusz Guzik wrote: > > unknown = batch * num_online_cpus(); > > count = __this_cpu_read(*fbc->counters); > > > > @@ -344,11 +345,10 @@ bool __percpu_counter_limited_add(struct percpu_counter *fbc, > > ((amount > 0 && fbc->count + unknown <= limit) || > > (amount < 0 && fbc->count - unknown >= limit))) { > > this_cpu_add(*fbc->counters, amount); > > - local_irq_restore(flags); > > - return true; > > + good = true; > > + goto out; > > } > > > > - raw_spin_lock(&fbc->lock); > > count = fbc->count + amount; > > > > /* Skip percpu_counter_sum() when safe */ > > -- > > > > As this always takes the centralized lock in the fast path this defeats > the point of using a per-cpu counter in the first place. Well. It partially "defeats the point" if the client code actually uses percpu_counter_limited_add(). Only shmem.c does that. > I noted this thing is buggy almost a year ago: > https://lore.kernel.org/linux-mm/5eemkb4lo5eefp7ijgncgogwmadyzmvjfjmmmvfiki6cwdskfs@hi2z4drqeuz6/ > > per the e-mail I don't believe existence of this routine is warranted. > > shmem is still the only consumer. Totally. It would be better to remove percpu_counter_limited_add() and to implement its intended effect within shmem.c