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 11E28C77B7F for ; Tue, 24 Jun 2025 17:14:05 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 729846B009A; Tue, 24 Jun 2025 13:14:05 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 6D97A6B009D; Tue, 24 Jun 2025 13:14:05 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 5A20C6B009E; Tue, 24 Jun 2025 13:14:05 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0016.hostedemail.com [216.40.44.16]) by kanga.kvack.org (Postfix) with ESMTP id 467656B009A for ; Tue, 24 Jun 2025 13:14:05 -0400 (EDT) Received: from smtpin03.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id D2B5A10508F for ; Tue, 24 Jun 2025 17:14:04 +0000 (UTC) X-FDA: 83590942008.03.23C085F Received: from mail-wm1-f44.google.com (mail-wm1-f44.google.com [209.85.128.44]) by imf04.hostedemail.com (Postfix) with ESMTP id E11EF40008 for ; Tue, 24 Jun 2025 17:14:02 +0000 (UTC) Authentication-Results: imf04.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=E9FCd1Om; spf=pass (imf04.hostedemail.com: domain of alexei.starovoitov@gmail.com designates 209.85.128.44 as permitted sender) smtp.mailfrom=alexei.starovoitov@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1750785243; 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=O05s4575vBbTgSIwvGmuswCqY0U3XoMpvRBXMQaPmpg=; b=rgMGku51uy8wbdO7FaRDy2p0qbiK50pXMhYLV2g22e4CVGT8PkxPqUM4ueleWnM+KEH5T6 0Bxuc3noVMo7fza2CIxJGwqmACp2VWHCxaJBaaBsL1fGRzKA5wuaxnH6CFOpxEHyx5oqhY zvrxOB3YcFefSRjt8wojPu06knb+cx0= ARC-Authentication-Results: i=1; imf04.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=E9FCd1Om; spf=pass (imf04.hostedemail.com: domain of alexei.starovoitov@gmail.com designates 209.85.128.44 as permitted sender) smtp.mailfrom=alexei.starovoitov@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1750785243; a=rsa-sha256; cv=none; b=U54xAg0zBrMnXSbhOPUzOVS9BRVQLoBK8cU2S6vz43UtQW8JOKiBnfNtsy2m2K4hfyvstz PZW1cXU6zgtflQgouSg0kZe5WDmerFtF9+p3iziaPc/dJX+sj/q/eYUKRnz9cLOfP4iWaA hqkKJqHFNbgAPeneyRozJTC6lWKLw1g= Received: by mail-wm1-f44.google.com with SMTP id 5b1f17b1804b1-4537fdec39fso3049515e9.0 for ; Tue, 24 Jun 2025 10:14:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1750785241; x=1751390041; darn=kvack.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=O05s4575vBbTgSIwvGmuswCqY0U3XoMpvRBXMQaPmpg=; b=E9FCd1OmX9SuzcxiiE1hMa7mtBBjcVtMSRJZE4jQHhX/GRpcF3HY/Ndf4mcZMpHo1T UpPEC/r4v7t3IQIXHklYr/7pdIxYtTS0kVajGm0eL/tf+yqenhLG6WVkkPD2cRWjULla mnUMhVhI0Qdt5rSq7jwAvCMkBBpqOBdWy7QAPdws+aegbBKals6tLo8Vh28JKVzsoOb9 PmzcRGmPVhAYXF/xFRpjPq2eGMXdI2TFrCh5CK/8WDg3pucliWcNQBIgp+lgun4tV9Zw UMU0xdJvik7b1GDWPdICehz6T4yC7IcCvfciYEoj/I9T/QteQsaJYSeGbxrMSv/0KMdy FeRg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1750785241; x=1751390041; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=O05s4575vBbTgSIwvGmuswCqY0U3XoMpvRBXMQaPmpg=; b=A1TvhKYwjyNbypxG1ocaBJ31QVDy57l0ix2P/Fbo+9mLxyRKBsQuiC/cv1UvXlDmJf W1fu3Wg7V42QMg298HWQRBWeLch5BS8BWHnERTrgspaEylA+p2EKsr9CTmQaRnZepzm7 JCKThSVEnRv+kxTxKnir+PTcLSo+tZPSh0PXGzDQJ1PqaeqLItqotKAYSIgV3UXnva2X ofuORRTq/8t/Bb/gN+QF6i0wMq72Skmj5L8inuVZKXXGjD6v5sa4aZ40U/LZrkvoz0mx WmEopcpVLjX2PIaOG7qoqL2h2N7+gzFH4QA6io+F6mqCdCMQAbyAsgTPNFpaO7Gj4cT8 +jpA== X-Forwarded-Encrypted: i=1; AJvYcCW4JFCxxInY/ymUaJzktt7/yyAV4uVXkTqe+jzcXh+rP3rJ7FP/S8IYDR0zQtlDEQ5VM8z4Ds1A/w==@kvack.org X-Gm-Message-State: AOJu0Yw+Y2z+hiPHwy5+6uS8gplAZnTkvek7KHQjGyUpfUwsH8zLLzT+ 9vHDnhcwIu84nzOfs15xk/CXaZnirOqhGbIX3SnOziVURQN7SFKs6AV3aK8xT4ceJA2Eixq0fDo SW0NscGSfcXFVtfWRPj9OL5fJmhZ6tjY= X-Gm-Gg: ASbGncvUmme3JpD2OF1Rtj+SYJ5NnanJa/nIwrFBN+cFm/JI0xvIbrlwtFhVAew9FE8 oIBJu1tQThrjeDY7udSbKMumydXvZPHi4DFOGEslMUIPdbdE8/VlmpJ7AECpj+BaAMbfs1Pxmky jXZdDJpy+bEJcOhV8ycpXLUbkWuLNTYU2lk/aPaPLvneHTvMni4S2VSxNJs8U= X-Google-Smtp-Source: AGHT+IHpwXqn25MjRJJ+HK6d3j76DB4ejMnh7zmsER9R493vaK71nT56UgyeM9k+XIrMu5FMCHiF0fOAVLJXYRLD0Eg= X-Received: by 2002:a05:600c:3b15:b0:43d:26e3:f2f6 with SMTP id 5b1f17b1804b1-453659c3b8cmr151708275e9.5.1750785240860; Tue, 24 Jun 2025 10:14:00 -0700 (PDT) MIME-Version: 1.0 References: <20250501032718.65476-1-alexei.starovoitov@gmail.com> <20250501032718.65476-7-alexei.starovoitov@gmail.com> In-Reply-To: From: Alexei Starovoitov Date: Tue, 24 Jun 2025 10:13:49 -0700 X-Gm-Features: Ac12FXxK3oDOHzZ3IPosIrFcZDleZ2SVgraCT-lhd77AXqMkzOnJ6FS5gXXSYsk Message-ID: Subject: SLAB_NO_CMPXCHG was:: [PATCH 6/6] slab: Introduce kmalloc_nolock() and kfree_nolock(). To: Harry Yoo Cc: bpf , linux-mm , Vlastimil Babka , Shakeel Butt , Michal Hocko , Sebastian Sewior , Andrii Nakryiko , Kumar Kartikeya Dwivedi , Andrew Morton , Peter Zijlstra , Steven Rostedt , Johannes Weiner , Matthew Wilcox Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Rspam-User: X-Rspamd-Server: rspam04 X-Rspamd-Queue-Id: E11EF40008 X-Stat-Signature: keb4awkmpuui1xc9ieqjuwachhd614sn X-HE-Tag: 1750785242-530602 X-HE-Meta: U2FsdGVkX19Uc6rdCqsawTkjttHY4dlLatwxwXX2+Ign/PNsLEfkjkIVblI5rOvDUyuHYEZh/7RgujTThxBCaaloXXU0jhskafNn7nKrCZrS/P+r5bwtd/9EOX6NDceLS0uEz1pfu07Q9CFn8gukiMCgM9JPccGU2OC6VsJy961Ba9uzW+Rrx3egj38BVBKKHMeeu0PI6ApuF1msSNNB2uRsFW8pLUiuV4eAEZQYRKJO66Q5wCzetNP9+dv/oqgos2nm2uVVWQzgLN42Z9JyAhBGQUKAB7lBMh+rYGBvKMS3yRYxPBFaxjFETTvA2LkeW6UsY2T4p0Vz/qu4lRbmleDHEMektNlX4LURB/H4M/4QpiXH/WK4Zr4wMJ/Yh7ccjJG5knUVVtiULDETkxiWt6p0cwOoKqy0aYoFaKc8inp0bbsvw9lFv3u/pHFcVMWmsJcVDD+jGoEVbr8B4RK21ZI+oBCTVPmM4TUxhxfO4raDvSfAJkZRjEaat3c7ZEecWv9P0yQUi/HG6CFu9TLIA9rJU+ca/lVw8oDnnVb4ZOaniXYTcd2SsChSXSdYoFNziHuaX6rgajEu/DCk9d9ezkDe/H6DLuS8zxX28N/Amhmn5AlWLQC7VKbvwKlcVro/06F6cwkeCTbXPNprsmBlD+4FucCdPBLC5UaCwH0jNhVtnyouGxVr0sMsIAh6Ho17rFwIp3B55drL/pC4qct3rfNIOkCaTUpcPPu/Eg6dQkyveMA0p6L42QfMACr7YCxdq4l9EKfV541qtlsg79BVoeR6Lwo1Yo9Xoj7IehgWFOf4ovo7YTqSRqSU2T2nANX5Nla1SVWrU+1CKX4JkaE1z6fOESeinR6IUfyf5tKyC8/0ggMQJL/aPVwl9Vedy9o/5+FHEmclYlo5mXHvgvpmpoi52MP5NwPaAvPL60npO7HzgjYtl32P0JX05OwKclwVL/qFg39qrrrShug0j6l gbsdXkem 3p2ggV/JEza9FsCOT9AfHAvyKr+uK674ylPlDRiEPePBBzx4Z8n+1kuIZOGke1rYoEyEV/QZmlrf0ESyIURWCtWVNv2UqZyn9YNlCCKW7vTnGTdBV3Abzq9oARUQfgZEmSryYPbNu1vYXFmASZ5WsZwcPqdCHw3MhGl7dx/BLZDqsUjpZSh/0+o0YtX2LP0ILazTfzMipaZyQ+BuuYly8gExPGbE5aKkRb2tSGJWKWGNJEgdCthNvAFp1+wJOJ2ss6Pncpfp7/J3hRg6P0uUaQhaXpDujQW/btnFTIeHCvqFRx8fvTq3e4FVa4r5nIHUGfeZd3fzpmOF/Hbnkanq4EV3OKC1kJT+kuTszwc4uA19jobpllp6Q/vNi8boCwAilGZ1YhxAMnG8cBy+JP3kiEMfATb0BjRi2711c6tvn1qWiy6hzjEeGhSCDI00TqGNf+6WUNfMya+m86Bs= 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 Thu, May 8, 2025 at 6:03=E2=80=AFPM Harry Yoo wro= te: > > + s =3D kmalloc_slab(size, NULL, alloc_gfp, _RET_IP_); > > + > > + if (!(s->flags & __CMPXCHG_DOUBLE)) > > + /* > > + * kmalloc_nolock() is not supported on architectures tha= t > > + * don't implement cmpxchg16b. > > + */ > > + return NULL; > > Hmm when someone uses slab debugging flags (e.g., passing boot > parameter slab_debug=3DFPZ as a hardening option on production [1], or > just for debugging), __CMPXCHG_DOUBLE is not set even when the arch > supports it. > > Is it okay to fail all kmalloc_nolock() calls in such cases? I studied the code and the git history. Looks like slub doesn't have to disable cmpxchg mode when slab_debug is on. The commit 41bec7c33f37 ("mm/slub: remove slab_lock() usage for debug operations") removed slab_lock from debug validation checks. So right now slab_lock() only serializes slab->freelist/counter update. It's still necessary on arch-s that don't have cmpxchg, but that's it. Only __update_freelist_slow() is using it. folio_lock() is the same lock, but PG_locked is there for different reasons. 10+ years ago PG_locked bit was reused for slab serialization. Today it's unnecessary to do so. Abusing the same bit for freelist/counter updates doesn't provide any better slab debugging. The comment next to SLAB_NO_CMPXCHG is obsolete as well. It's been there since days that slab_lock() was taken during consistency checks. Removing misuse of PG_locked is a good thing on its own. I think the following diff is appropriate: diff --git a/mm/slub.c b/mm/slub.c index 044e43ee3373..9d615cfd1b6f 100644 --- a/mm/slub.c +++ b/mm/slub.c @@ -286,14 +286,6 @@ static inline bool kmem_cache_has_cpu_partial(struct kmem_cache *s) #define DEBUG_DEFAULT_FLAGS (SLAB_CONSISTENCY_CHECKS | SLAB_RED_ZONE | \ SLAB_POISON | SLAB_STORE_USER) -/* - * These debug flags cannot use CMPXCHG because there might be consistency - * issues when checking or reading debug information - */ -#define SLAB_NO_CMPXCHG (SLAB_CONSISTENCY_CHECKS | SLAB_STORE_USER | \ - SLAB_TRACE) - - /* * Debugging flags that require metadata to be stored in the slab. These = get * disabled when slab_debug=3DO is used and a cache's min order increases = with @@ -6654,7 +6646,7 @@ int do_kmem_cache_create(struct kmem_cache *s, const char *name, } #ifdef system_has_freelist_aba - if (system_has_freelist_aba() && !(s->flags & SLAB_NO_CMPXCHG)) { + if (system_has_freelist_aba()) { /* Enable fast mode */ s->flags |=3D __CMPXCHG_DOUBLE; } It survived my stress tests. Thoughts?