From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from YT3PR01CU008.outbound.protection.outlook.com (mail-canadacentralazon11020128.outbound.protection.outlook.com [52.101.189.128]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id F0341365A0D for ; Sun, 15 Mar 2026 22:00:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.189.128 ARC-Seal:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773612013; cv=fail; b=bvScKQ/ObUMg9GPYI0b+LyNxQk6RYOYqD0fAyzOfYW2j3UzYoYRFzGJFGt7rk8XSUNK2hJf97mt83pG5AWURQcwg7TYFluhLH1yyyMRaFd7NvUjGfrV9dl7AKH5Pzm7junAr4DRIqVJdUTqMMr8fSGpFPWmEVjgHREOv6jlBYLo= ARC-Message-Signature:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773612013; c=relaxed/simple; bh=mq+2j8rRqqmWVttUVY+zKffnUxvf8xaIIqg2KBXSXjU=; h=Message-ID:Date:Subject:To:Cc:References:From:In-Reply-To: Content-Type:MIME-Version; b=NjDswlBozzzjoNuL7Ayaf4miIibRLK7NE0a7eoQi0txJg4wWz8Rq63efQMFfR+LJeS8sDojXcY0wp2CarFVMnRyKSdKjmk4JTaL/8p+xA+ExBxC/y0S3s7snamjhhD7vDpHgImxAQDgBVVYCYDyJy3Fh2SjuUHRR4MxtwCR++rw= ARC-Authentication-Results:i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=efficios.com; spf=pass smtp.mailfrom=efficios.com; dkim=pass (2048-bit key) header.d=efficios.com header.i=@efficios.com header.b=QVcrxh5x; arc=fail smtp.client-ip=52.101.189.128 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=efficios.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=efficios.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=efficios.com header.i=@efficios.com header.b="QVcrxh5x" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=r5oOfncNum8DPaFs917bNly+0FkO+ddvxVYN1IceRAljn8/91Pw4d+iX+OTZZAkPb4a9iqwh3LiU79VzwTKKkM4BbAK0KoZqZQz9yiZcUy9hjrHMJWhqZyfSuL8GaoJiedwn1RtfOx8mkIQTO7vA0KNZu+G4MhvSj5HR0OPmUxP0CIhsBGJYHcEqZsyBIftSFqKv54baYNTe8UsbrlK7mb+bXZq18B8i0Szk+MwGDlSGwXhwruGkQ9HCAtiNnWElYDvLeZYjqHthH/nafLCmKNkrQqSXhqJLPPapeBuauQhLRdCxGjHW9BpAFOEWNV/igzP2dZW5CdXHRE6uTa6m5g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=gPLqgvK1L143cLoWkc65hwGUVZCgq8Z1EtNRpOy/SME=; b=MB+vK5OxsWglYcNxljjQJ25f7ZqcCrny7bh57aXu6GaonovkEFlIzrlr4H6zR1CejP+UkXncmv6IDD+9Fq9J2wy06yqBUIwXxic40QxyxyKZmZkUtWa7tZSIH6zt8Oauqwh2tiU/BM0b2orjHWLRhkD3ieoC8vp/Ei/qgtvGjBM+DPQXngnBFAnL82lrEOrCrOQFkV4Nar8DPiXiCVX5papCI+HCtOL5F35kKh1WAK4qAsi8Fj2DbDTnwOUALVdVr90lIRoIk2x3uEKG2L/vhHqHTcGeXUJ/tX7LKM7wc6jmR5AGd6Q1Wq3JskBMt2SX9Bh9mr4VfPPb83kUUyH1/A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=efficios.com; dmarc=pass action=none header.from=efficios.com; dkim=pass header.d=efficios.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=efficios.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=gPLqgvK1L143cLoWkc65hwGUVZCgq8Z1EtNRpOy/SME=; b=QVcrxh5xPeUI9sYdJ2yQ11xY+54wT9rQrKSoy0rwvUgaTXjOnvS1/0M+R9wxI/hYAVBIr/U0qWFMrUHgBo5wL9WobO1tUD1Dia+hbrymLp856Daf3qIyPpKplPBf0/P3GE8pLXwqHRzeiMzM+LcJf26pbld43AcRLCSh2SuAKLIu5vzv5N9IB4WIJRrBXpLXGYioXTRNKndXnaHGp95x3ILG1qW3/gLR5/w8Uu4LE2l9RhHBZvNFHc36aokYCj0ra4e56Impyd9CEtlZTJmrYOZZnMO8JM9ejpwce7jD/QcgJ8C4lnLbl01GbeuWo9M25qm/SV5FeiprMRqWR4FnmQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=efficios.com; Received: from YT2PR01MB9175.CANPRD01.PROD.OUTLOOK.COM (2603:10b6:b01:be::5) by YT2PR01MB8581.CANPRD01.PROD.OUTLOOK.COM (2603:10b6:b01:b4::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9700.22; Sun, 15 Mar 2026 22:00:03 +0000 Received: from YT2PR01MB9175.CANPRD01.PROD.OUTLOOK.COM ([fe80::6004:a862:d45d:90c1]) by YT2PR01MB9175.CANPRD01.PROD.OUTLOOK.COM ([fe80::6004:a862:d45d:90c1%3]) with mapi id 15.20.9700.021; Sun, 15 Mar 2026 22:00:00 +0000 Message-ID: Date: Sun, 15 Mar 2026 18:00:05 -0400 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH] lib: fix compare_delta parameter order in percpu_counter_tree To: Andrew Morton , David Carlier Cc: Josh Law , Dennis Zhou , linux-kernel@vger.kernel.org References: <20260313175424.132735-1-devnexen@gmail.com> <20260314144508.ba3504b4338eb1ae84017028@linux-foundation.org> From: Mathieu Desnoyers Content-Language: en-US In-Reply-To: <20260314144508.ba3504b4338eb1ae84017028@linux-foundation.org> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-ClientProxiedBy: YQBP288CA0032.CANP288.PROD.OUTLOOK.COM (2603:10b6:c01:9d::17) To YT2PR01MB9175.CANPRD01.PROD.OUTLOOK.COM (2603:10b6:b01:be::5) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: YT2PR01MB9175:EE_|YT2PR01MB8581:EE_ X-MS-Office365-Filtering-Correlation-Id: 33a74cd3-859c-4d18-54c5-08de82de3421 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|10070799003|376014|366016|56012099003|18002099003|22082099003; X-Microsoft-Antispam-Message-Info: RF9/IcBv2/AFZwJBK8Is+mbOiCRTqcCN1mwafdzBcJ3IpjDdFA6vH368RWPSyb9qYi5YHUkE9XiN44LzWYKOeA7ocAAKZCrX18bYMy6jSaqF8NS/rDKgt0BvZUqMxR8KpqlRPSUSlSPawpY+azpprOyieK5Lso9ea84BY7kVgHyyxQ037ut8GqYiNzd1bhMds6iNTBxIzLtQ+NIlmOKD65pHvouZRu7gxSoG+oAMKNzMJOynKJ6G7J0Y3H9exs0+TyOhK8lp+o+OUPVn1NOoGbgRecT/zx/rEbrtcFOQX1o9jnFr5Y21ucf4O56UIwlrQug8HTZ7gIpOQPzO8qCaXzF4BOVHQVek6ZkkAlMROL5BzkJxOdnJo+IaRd6+rAF6BeyJi8/B54A4FUY/d8A8xZaACeCL3jkG6satFWtzSdaB/ngqC0fGQeb/aYO5l1JmQP4+JsEtoojgso9pwuMtwrxrwamGwD/ePOu30Ejcme1AwJ2n+Z8n0Wo9mfxgM1BIG6l38+w4d4KZl/pQqYZGVscgNROyNzdqBklJTdbmqNDFuieLk88DR/xthS4t92wFukuDRgxf6MKlOeV/OeZ/2jKhflwqjfg+kE+D0rhWyDSaS5rWUb03ecU1vPh2xHz066eveuoinohduzWIouy156j1c6SMoXkaO4DPtO4Jyx0IFKSQB4OOccSssSqUE3Kz X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:YT2PR01MB9175.CANPRD01.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(10070799003)(376014)(366016)(56012099003)(18002099003)(22082099003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?ak5QMlZoN1dueGQ4VktqWjlaVUhHT2tkWEJjck92b2c4RWpjSTlIUXprMzNk?= =?utf-8?B?RlYrRUY4ZkdnS2pZeFp1WHhUREVtaTF4RUUzY3YzT2loVTFMU0UxNE9VcWl4?= =?utf-8?B?eEZBVkxvV2NlUHcvSzdiMW9tTTR6WEJaYkZMb2FyYmlxZDRQQjdJaFBITjVO?= =?utf-8?B?blRwMFNFczFSb2RNcDNTQkRMVExONHhUdys0eHIxcVVxYW1zYk50dSs1V0Vw?= =?utf-8?B?cTNNclBMWE9Kam1RVlpBS1N0QmNaUWhGUDF3dENOK3dicXo5R25jbFcxSXI5?= =?utf-8?B?UzVhWlhqRk1jZU53UDlxd1V4ck00ajVGVUhqRThqMG05dkFCbzFRKzdIU2hR?= =?utf-8?B?ckRqazRwcHJESE1QK2V0OHdrNXVkR2xZbXRHZGdzV0lVcDVRWExYNDQ3T3hO?= =?utf-8?B?a2g0dm9sR2FsZUZoVmRHenlRNkJUOFF3bElOM2MrK1hqdnFaQ3h0dHozMkVO?= =?utf-8?B?NDBHWjU5dTQwUnp6NFhoOWh5Mml2UzlGdytGOUxEL1BGdDlSU0tneHczejgw?= =?utf-8?B?VVhsNTRIdTZtcndxTGR6djhhc2RYdmt0VE5KN2h5ckwrUjJSQWdyWFN1U3d5?= =?utf-8?B?d1ZyYWp0dW92dXo2QlR5c2M5THFiTFR6YytFVGd1ODJGTjRVUSswMUpEMC8y?= =?utf-8?B?bXBsSHprNnJQNEs3NjY3WHNjYUU5UHFPOExWdDJOS2RQZ2JwOCtmOGhmUThI?= =?utf-8?B?Z1lBM1doMldVbHZDeTBCbm4yQWtVRmlHUFhMWUlzUXVtUDNTazJnQmFoRGZL?= =?utf-8?B?TmltRll4VENMcUN4WGNrbjBjdTAwa2ZhN0tEVWlXT2UvbnJvTGRMM3pnRmRl?= =?utf-8?B?Wk1Fd0xkekJGL1RWeWZQSTdIMkVoQmNwbXRpMEs0SHFVQkJOZEhUTU8zMDIx?= =?utf-8?B?Um82OEZxR1cvSllja25mREVwK0hEanVWSHBhcTJ6bmVwTExoak5IbjluMjBE?= =?utf-8?B?bzdWSktXTVRIejdHZUlJVkhsQ0Q4ektMb3ozQlRLcG9oeHlVM2J4WVUvTUNV?= =?utf-8?B?SElaT1hYVFV1anc1Ny9UdkFkVmNoQXc0eDU2N083U2NWVWRWcWNXK2RjNFBn?= =?utf-8?B?VXdCV2dMMC9SaEZkSG9RYlZXSTBoOXRLTmpxUUhVNnhhdldQRnJJb0VEQnNr?= =?utf-8?B?R0FVQVppa0R0Z2pvVkh5aFRja2NLVUh3bUtoZjFDc3ovTnFWNkRRaUY5cG5I?= =?utf-8?B?dW53VUFXR091ZU1NUG1HYXVBKzdqVEg4bEVkUGN2ZnVkdExWeEJjK2tGSzNo?= =?utf-8?B?UDA3cDJmUkI5b1ZQUldGZjl4MUFlYVhYS0g3MmptTWFBWW1WUTRlbmlJZlMr?= =?utf-8?B?SFkzT0NRem96dDhVUXltV3NySnVvTmZBU2NBZ2k3WTBDNlhkSDh0dUdYaFNC?= =?utf-8?B?cURpMWYyT3phUURadU13RitSblVYeEJJdDVnalQyR2piNDh3MmFNUXRiWnZo?= =?utf-8?B?RGV0RjFic0tqcDBqaWNZZ2ZJQXVvM2cvenVzYjZvVUpnU0xaUURsWTE0Q205?= =?utf-8?B?QXZWMzdPckRoWW14czdaTlp6YkF5MExtSzJlV05OVnZ0bWJiY0ZQTjFRdTlU?= =?utf-8?B?eEY0VUhBdEpnYmlNSTJlWGhYU1EySkpETU1lem9FOTFLVmd1SzJpSjJKU2lB?= =?utf-8?B?Rm1yeXQ0eExPUTNIczlpQm5zMmQyNE1kcDBwdzdjYzNPTW1XV2U3MWVBenMw?= =?utf-8?B?ZVB0Qjl4L1h1WEo1cFAybElaYkN6T0ZIWnorUEFsTXphdkxMd2tZTkx3K0VF?= =?utf-8?B?VHNFWjFCbkU3Yi9iSGZDRHlZUDNZU0JSZlBuMkQ2Q2xGR3N3V0tEY0dmb3VS?= =?utf-8?B?cXFJUkJvSWpoZU1iTzlHMDU3dkdJR1dyY0NiNElyVmRMeFVBaUxNSXp3SlBk?= =?utf-8?B?MGlPS205LzJBd0svYnRZMzVlcWk0Zkt2MFRJemhGWDdyNElqRVltL3BpZlFS?= =?utf-8?B?R0VNd1A0VDJncU9yalI5S0x3dE1lbzQ2TnVjK1RmWm1PV3B4WnJET0FuTTF5?= =?utf-8?B?K25qWXYwV0VPbm4wR0Q5Q2JSL05yYll2T0JqWGFieURxeVdsTTJlbklsWW1U?= =?utf-8?B?V2tvV1NRc3ZySFEwL3pZZk96QXo1Snl1Qno3VHladVlYS0tla3NOVTJ6SUQv?= =?utf-8?B?RU1vLy9GMkRxWkhOS3REbDM4WU5qc2FsWW83SmhKRTFtRTNrOWJYYkZ1U3Y1?= =?utf-8?B?VzF4cjBJZ29hOEJNYmxCVkhBZldrbzg1eXJQTG1wNjVQb3lSSDViclhQT0Zl?= =?utf-8?B?OVVQbWVVQ2RQdmZ2ZXBFVFpDem8zL3lXWk1icDByUjRiaUJKNVE0ektoUUlq?= =?utf-8?B?VS8zVnJzeFJXeWxpWDluZHlqRy9qeFd5ZlhZZjdieVBwMXJRY1VvT2doR255?= =?utf-8?Q?VvEx9TQVjViOq49wlo+CnvghNcunr+Ld0M9pfTsx6UsrT?= X-MS-Exchange-AntiSpam-MessageData-1: hV4H8zfANdZUD82ige0mIkHoTuc1lxbifxA= X-OriginatorOrg: efficios.com X-MS-Exchange-CrossTenant-Network-Message-Id: 33a74cd3-859c-4d18-54c5-08de82de3421 X-MS-Exchange-CrossTenant-AuthSource: YT2PR01MB9175.CANPRD01.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Mar 2026 22:00:00.3598 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 4f278736-4ab6-415c-957e-1f55336bd31e X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: JpQwA3/q107NS67390X8S6iI53bUOztwnuJFgmwHwEEE8Tix2nnbYWrhQ1z1Ks7JnYJORNeY7GmxnBCv5LUx1pStmI+lMRiWo9N/ztfnNRg= X-MS-Exchange-Transport-CrossTenantHeadersStamped: YT2PR01MB8581 On 2026-03-14 17:45, Andrew Morton wrote: > On Fri, 13 Mar 2026 17:54:24 +0000 David Carlier wrote: > Thanks Andrew for CCing me on this. >> The compare_delta() helper takes (delta, accuracy_neg, accuracy_pos), >> but every call site passes (delta, accuracy_pos, accuracy_neg) — the >> last two arguments are consistently swapped. >> >> The documented invariant (include/linux/percpu_counter_tree.h) is: >> >> (precise_sum - under) <= approx_sum <= (precise_sum + over) >> >> Which means precise_sum is in [approx_sum - over, approx_sum + under]. Yes, as also documented in the comment above percpu_counter_tree_approximate_min_max_range(). >> >> For a positive delta (v - approx_sum >= 0), accuracy_pos must be >> "under" (the maximum amount precise_sum can exceed approx_sum). >> For a negative delta, accuracy_neg must be "over". Right, I mistakenly swapped the logic there. I did not consider that we have "approximated value" as input and wish to compare precise ranges. >> Since under > over >> always (batch_size * M vs (batch_size - 1) * M), swapping them causes >> false definitive results: the functions return 1 ("v > counter") when >> the correct answer is 0 (indeterminate). >> >> This affects all comparison functions: >> - percpu_counter_tree_approximate_compare_value() >> - percpu_counter_tree_approximate_compare() >> - percpu_counter_tree_precise_compare_value() >> - percpu_counter_tree_precise_compare() >> >> The precise variants are also affected because their approximate >> fast-path can short-circuit with a wrong result, skipping the precise >> sum computation. Yes. >> >> Fix by swapping the parameter order in compare_delta() itself, since >> all call sites are consistently swapped. That seems like a simple fix for that problem indeed. Did you run the kunit tests on the fixed code ? Any thought on how to extend the kunit test to cover this ? > > This affects mm-unstable's "lib: introduce hierarchical per-cpu > counters", so let's cc Mathieu. Thanks! Reviewed-by: Mathieu Desnoyers > >> --- a/lib/percpu_counter_tree.c >> +++ b/lib/percpu_counter_tree.c >> @@ -458,7 +458,7 @@ long percpu_counter_tree_precise_sum(struct percpu_counter_tree *counter) >> EXPORT_SYMBOL_GPL(percpu_counter_tree_precise_sum); >> >> static >> -int compare_delta(long delta, unsigned long accuracy_neg, unsigned long accuracy_pos) >> +int compare_delta(long delta, unsigned long accuracy_pos, unsigned long accuracy_neg) >> { >> if (delta >= 0) { >> if (delta <= accuracy_pos) > -- Mathieu Desnoyers EfficiOS Inc. https://www.efficios.com