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 6986AC83F27 for ; Wed, 16 Jul 2025 02:30:16 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id C88B56B00C8; Tue, 15 Jul 2025 22:30:13 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id C39876B00CA; Tue, 15 Jul 2025 22:30:13 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id B00996B00CB; Tue, 15 Jul 2025 22:30:13 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id 9CC146B00C8 for ; Tue, 15 Jul 2025 22:30:13 -0400 (EDT) Received: from smtpin12.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id 7219B1CEE6E for ; Wed, 16 Jul 2025 02:30:13 +0000 (UTC) X-FDA: 83668548306.12.B901C7B Received: from mail-pf1-f179.google.com (mail-pf1-f179.google.com [209.85.210.179]) by imf06.hostedemail.com (Postfix) with ESMTP id 90FCE180008 for ; Wed, 16 Jul 2025 02:30:11 +0000 (UTC) Authentication-Results: imf06.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=nMy+zAiZ; spf=pass (imf06.hostedemail.com: domain of alexei.starovoitov@gmail.com designates 209.85.210.179 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=1752633011; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=IEQTfrtiJP5hL9ewk3ogQOxqHXPRDQklPst/jRYzXXc=; b=i9rqC+eIn+S2PpIuY6CreFFTWw7znXK3FRBQYIM1GpHLieeG8Pf62jiQMKyof6wY1zJgWK iIAxO8BiloT6UzakfFYdEnyNBCH15tf2JGtUbiM+Zb7+7ekL/nZ+C9Usi8bks/1+K4iZIK BJNAXXxvEfY2vBjnnfamDbir4wAISS4= ARC-Authentication-Results: i=1; imf06.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=nMy+zAiZ; spf=pass (imf06.hostedemail.com: domain of alexei.starovoitov@gmail.com designates 209.85.210.179 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=1752633011; a=rsa-sha256; cv=none; b=gg/ehP2Uxkzqqaf8zluo9Cv/1q6g0DHMS2oJ3IfN8m+FCjw15T2AYXWwPzWoNdIBVIaCO9 9BRWpgTDhZNmf3wsrjeGvwaEaqLVYL9l8kIXVVzuevSLg5SQ6VBJtx9xwN358aBUuDIOPQ TUORBIvvCQnvoOYxkc2DPkFbDRvveU8= Received: by mail-pf1-f179.google.com with SMTP id d2e1a72fcca58-7494999de5cso3850323b3a.3 for ; Tue, 15 Jul 2025 19:30:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1752633010; x=1753237810; darn=kvack.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=IEQTfrtiJP5hL9ewk3ogQOxqHXPRDQklPst/jRYzXXc=; b=nMy+zAiZOfGVnvppwTifiyQoDPS8GdUKd767jMKSjBqu+A6uERHC9UbePz3yk9aMZV QQjs7SMbphfVF/n59go3qC5x+KmKjGE1GSppB8YeEIAXtr/zk58JsfVkNmDSieJk3rCu 4MhhC39SQiX/P3PdDZaopUYOizEufhpmHvkVvGbD+U1ehLNpxXZ5VYCmu8pCVeQntUSS fz7FTnBDo+y2cYQL5JiL8lquG7gtiFyKouiY0wPHMwvNf179b91hJ3ECT2ty8dLTx2Xx oDgKA02uoX9jN3L41YHlftK7rTsY3cFccUVrYonD5oWC8OGLIfz/tPth2cnW11GHYkIc wZBA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1752633010; x=1753237810; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=IEQTfrtiJP5hL9ewk3ogQOxqHXPRDQklPst/jRYzXXc=; b=VPENMaDP3PwNE3+Ed19xbp7FJ4YHJb86y/hHaq5hcS3RPK6mtNLAYipiF/ObS7R3hR GYmXJ91OgWem3lN2QQ7ZSJ7xkhCgDmbT41Uh2A0QCnrArTM1Ga/p4x0eltxcjEO1vQMc IpK51cxfgez2bdPkA6kO76t1qSxhypjYHG3dYGu4nXmxwzjoPVKaOno6m/biV8bx7Axv wH9+9S0Q13OJn+6EQtANjCRcrPC0agTobYtLXwWF7bE6vM28SnfTMQQ6yYzBWUK8poD/ mfTfrTkfDf2wQMOWuf5l4+RPl4sR6RJT4GmenRrtoowkldULnVrC/UAFQH5wn3UiwwnM Kr5Q== X-Forwarded-Encrypted: i=1; AJvYcCX8AFgfHoqtGfz6Fuw1kYMCALyaWXdLRz+aglmFi2rSEhiOs8zAVZlwFYHlhjjIjArlqjreZNdsaw==@kvack.org X-Gm-Message-State: AOJu0Yx7Tl/5EgnZABrfhEtxn3ITcvlLX84VulrqVPNNwN/oF+y5Cqwv TtRQvHiKKRVWy0RttfDf+GJ4cf6Q43FMf+k39qoVByI46wcq7CIbzI1y X-Gm-Gg: ASbGncswSztfSEfXzbDPm/9beUrGJEwvvQ4Fz6NtBp9mYqzgbJnO7SOxbUUuNLMbZ2g MkGiAasdIqBGpKc7LjsHMilxxJzB/zFngup8yuw9EYrOLAt3LcEZvIkXl67mAo1HqvCaxD2HjMf nUUVtSekX/6Oj905mLU+JaiLrxb6oIABbOz1S45oSiLQZq4SPpEZpHcMetZuXOkjrcLzsvV5zA4 ox4eRvHOPIL1L1FtPqsQ/4HWJhK2v/8yXniY4VAYF0SxpDTGmY/6qdfqNUfM0bwj5LlW3fL/7nk WjSZjMnJr33Qk8z3HQ4pKpqZjD2Y1mW5tM79dcUOSqYyO0t7/XwWXZaLxE8/pjEtoRYDuZK0d8o cIQHmu5m2W34v7V0J4UNOPzGi4cXByKj+sBAxziXeg3Pcw9gXEg+KNa/kz0aIXTw= X-Google-Smtp-Source: AGHT+IEZ4Wjamq4/sEeNP8QyuJywAlTxuEb8nMnNqCpdq+3ecGRYT7Q6RA8xh6SvWLQy1HeLNVKG0w== X-Received: by 2002:a05:6a21:a919:b0:238:3519:ee6a with SMTP id adf61e73a8af0-2383519f114mr732514637.45.1752633010324; Tue, 15 Jul 2025 19:30:10 -0700 (PDT) Received: from localhost.localdomain ([2001:558:600a:7:a83d:600f:32cc:235a]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-74eb9f1b2f6sm13766669b3a.99.2025.07.15.19.30.09 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Tue, 15 Jul 2025 19:30:09 -0700 (PDT) From: Alexei Starovoitov To: bpf@vger.kernel.org, linux-mm@kvack.org Cc: vbabka@suse.cz, harry.yoo@oracle.com, shakeel.butt@linux.dev, mhocko@suse.com, bigeasy@linutronix.de, andrii@kernel.org, memxor@gmail.com, akpm@linux-foundation.org, peterz@infradead.org, rostedt@goodmis.org, hannes@cmpxchg.org Subject: [PATCH v3 6/6] slab: Make slub local_trylock_t more precise for LOCKDEP Date: Tue, 15 Jul 2025 19:29:50 -0700 Message-Id: <20250716022950.69330-7-alexei.starovoitov@gmail.com> X-Mailer: git-send-email 2.39.5 (Apple Git-154) In-Reply-To: <20250716022950.69330-1-alexei.starovoitov@gmail.com> References: <20250716022950.69330-1-alexei.starovoitov@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Rspam-User: X-Rspamd-Queue-Id: 90FCE180008 X-Rspamd-Server: rspam06 X-Stat-Signature: hsdk3pkfmijc8j4wg8iff3fdaz73uo8b X-HE-Tag: 1752633011-15984 X-HE-Meta: U2FsdGVkX1/7eTFp0EDKJZIj4YxrZ5B22+sQxBB1TBXdRyD7depvNaSZzIQ1YP4uGJwugRvdO32ZlKluH4/S+6MMRmg82WxWpnr5vspKzCY/YDbu6GzQBqKzVXPzpGuA0dp0QBvMA6Z97iDLIVe5DpNaNyYRYav4c/wrpoXdQU2kQnBvQeyvzbQb3f0aInhCfIL9pQ5g3FW00yxWM5EA45VRxZgbyAQC8DRZar0gUHrXLyDes3mgdFlt38gQkS2xJxs/oUvoc9l59s38P+7PFHwu5pMAFbjPM/buychdT0HdtMkZBa7834T8Fm7j8ejeGnKUj1Q6SYpi8cE7o6eKOl6acFFRvczjfjKdNrXua6vCPsuhf43lQWHAWW4LNSH5VblOKKA1h4JHzCBwj7TXhIVLBzbgn5S/SGxj7azltykh1HWhdjxlKnKbbCCwVpQ31y3IoWw+m8/4V3Zy4GDkjym7m2h22u5djJkzimXnUtScedNEQSTdLcrZ9wKAYNWOddi/buXHpYxEgU8cvPSMGSZ4LV/eIry6e5IZzXq7x3ueD+3loiB2FIySG+CTzywMv2jDkXSa4B1wIyP0V/t8mihSHtsNM1+hY6gji/ofIYIbxW/qRCpmG3zIpczBVddCLWZ9kwOvYh2m0ZnsRAwjdywTy9Fd3UR3BsMOhtrm9zyjBxuWx1+tpi/UnwQyApg2C/C1cLyCPtpKfzMVYYAMBhRZ1Wt2BeOEDy5SAjAdb1VGfrXYoqbQlQy2Sqm+QevTIjoc7AnzM/6RAWdZCmsAHaBs+6kNRxPNPnMh98ZveqrYHJtHFMXYiQqkX2/q4AuyJrSaj1zppMNHBs9SFyHtU/2j2XqApsI3mCtmDZtUaF7ArxmO3nrlKWiinWAK3ZF+cPf+l+6mXXllPIV15y8cDQ1sUA17JtfYJ27MWkV0XyhZDweCz5Fg6C85WduikbV/XSzfDZbq5U9oxQ1RUqV Ze+kd2J5 APykkwhfvWTsZfAikEQVccjVveTbJ7VK2wtN5itUmHm/deYv5P5ZKRqQEmxTJ0MnZoQwte4yFKt6c8gTGTCK5fsK+rWevScG4c1Z0DmEDuNA51H2pmXl5U3WL5MXwjoT3MqJeuYOVa6Bu7BidFcrQBeW1DTZ/iPzhdvS6PjClymoG+qN8NQpy/v61xwy3W8FTy0PLwZcOV5Dh0X0zMQcHdMygzKqc7IA0jFb6HI5OhYJ7ciVOhJBMuT09zKbBron1uZFjOpMRSzB2Cnu6yxwI0CRk4buaSomwwdayciq13ACsGu5HhSFgDyH1susXXaYUJwBXRRqWyQlyvKgI48AoH7ZxsiY4p3QkWU2SU9r8AZnGNfZTnuIWH9dLXJQjJA204rR3jQgXLBXWi/OdUpLMC303R9gH9yoJOZCVuq/ZeAhxyOq2fwCEtYKmpH+1p3Ixbm5JnY7YMQpsWyhwZ58jNgrLQHDVn1ev5DpWJWA5t+g7RIdCst6Saj7lv8f69/gFjq09DplOR5SBByd+KhNsB3yxdd8prIm2tcFldVbVGQNq7U7twarm0+wBDmhxOZKWO5vO 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: From: Alexei Starovoitov Since kmalloc_nolock() can be called from any context the ___slab_alloc() can acquire local_trylock_t (which is rt_spin_lock in PREEMPT_RT) and attempt to acquire a different local_trylock_t while in the same task context. The calling sequence might look like: kmalloc() -> tracepoint -> bpf -> kmalloc_nolock() or more precisely: __lock_acquire+0x12ad/0x2590 lock_acquire+0x133/0x2d0 rt_spin_lock+0x6f/0x250 ___slab_alloc+0xb7/0xec0 kmalloc_nolock_noprof+0x15a/0x430 my_debug_callback+0x20e/0x390 [testmod] ___slab_alloc+0x256/0xec0 __kmalloc_cache_noprof+0xd6/0x3b0 Make LOCKDEP understand that local_trylock_t-s protect different kmem_caches. In order to do that add lock_class_key for each kmem_cache and use that key in local_trylock_t. This stack trace is possible on both PREEMPT_RT and !PREEMPT_RT, but teach lockdep about it only for PREEMP_RT, since in !PREEMPT_RT the code is using local_trylock_irqsave() only. Signed-off-by: Alexei Starovoitov --- mm/slab.h | 1 + mm/slub.c | 17 +++++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/mm/slab.h b/mm/slab.h index 65f4616b41de..165737accb20 100644 --- a/mm/slab.h +++ b/mm/slab.h @@ -262,6 +262,7 @@ struct kmem_cache_order_objects { struct kmem_cache { #ifndef CONFIG_SLUB_TINY struct kmem_cache_cpu __percpu *cpu_slab; + struct lock_class_key lock_key; #endif /* Used for retrieving partial slabs, etc. */ slab_flags_t flags; diff --git a/mm/slub.c b/mm/slub.c index c92703d367d7..526296778247 100644 --- a/mm/slub.c +++ b/mm/slub.c @@ -3089,12 +3089,26 @@ static inline void note_cmpxchg_failure(const char *n, static void init_kmem_cache_cpus(struct kmem_cache *s) { +#ifdef CONFIG_PREEMPT_RT + /* Register lockdep key for non-boot kmem caches */ + bool finegrain_lockdep = !init_section_contains(s, 1); +#else + /* + * Don't bother with different lockdep classes for each + * kmem_cache, since we only use local_trylock_irqsave(). + */ + bool finegrain_lockdep = false; +#endif int cpu; struct kmem_cache_cpu *c; + if (finegrain_lockdep) + lockdep_register_key(&s->lock_key); for_each_possible_cpu(cpu) { c = per_cpu_ptr(s->cpu_slab, cpu); local_trylock_init(&c->lock); + if (finegrain_lockdep) + lockdep_set_class(&c->lock, &s->lock_key); c->tid = init_tid(cpu); } } @@ -5976,6 +5990,9 @@ void __kmem_cache_release(struct kmem_cache *s) { cache_random_seq_destroy(s); #ifndef CONFIG_SLUB_TINY +#ifdef CONFIG_PREEMPT_RT + lockdep_unregister_key(&s->lock_key); +#endif free_percpu(s->cpu_slab); #endif free_kmem_cache_nodes(s); -- 2.47.1