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 597F9C83F17 for ; Wed, 16 Jul 2025 02:30:03 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id E0EF26B00C0; Tue, 15 Jul 2025 22:30:02 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id D98716B00C2; Tue, 15 Jul 2025 22:30:02 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id C87F36B00C3; Tue, 15 Jul 2025 22:30:02 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id B41DF6B00C0 for ; Tue, 15 Jul 2025 22:30:02 -0400 (EDT) Received: from smtpin02.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id 3A70180232 for ; Wed, 16 Jul 2025 02:30:02 +0000 (UTC) X-FDA: 83668547844.02.5F86895 Received: from mail-pf1-f172.google.com (mail-pf1-f172.google.com [209.85.210.172]) by imf08.hostedemail.com (Postfix) with ESMTP id 52B03160002 for ; Wed, 16 Jul 2025 02:30:00 +0000 (UTC) Authentication-Results: imf08.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=L0+gz1PO; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf08.hostedemail.com: domain of alexei.starovoitov@gmail.com designates 209.85.210.172 as permitted sender) smtp.mailfrom=alexei.starovoitov@gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1752633000; a=rsa-sha256; cv=none; b=yHIzA1dei6KLhOYwy6lNGsRaqrP2Rf1cjaJclr85eAFpS/vOhQmF2KiDKZKTghPnCnGxAh PqJD7eHXbAmJBPSfGfssLDAoUzTTilvVqmN6XA+6Q0VnUHVvqwkViKZ+yOdF2VdetxtnYv uLRAFZdRV/tRU6gPxCE6jFlpTySC3IM= ARC-Authentication-Results: i=1; imf08.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=L0+gz1PO; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf08.hostedemail.com: domain of alexei.starovoitov@gmail.com designates 209.85.210.172 as permitted sender) smtp.mailfrom=alexei.starovoitov@gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1752633000; 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=6zjha9CozwWf99QW/X18MFNvUU8jW7FfnrLuKdO90KA=; b=gCLJV8UhcHQnsMlF4gjHO+cfzHslES95aO1QYdYIjhHKH2gA95ErkbyC1D9czkpDAILx+C t1KrJf1KQobt5KzQ7nLyJZbwN2EpQ0NpTt8nbX+WXgWcKBQvMwOl68GbnpvR71bXFWvpUj cNtB5ub22TcsL6HGHXpZy5yEQkl4p/Q= Received: by mail-pf1-f172.google.com with SMTP id d2e1a72fcca58-73c17c770a7so7436674b3a.2 for ; Tue, 15 Jul 2025 19:30:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1752632999; x=1753237799; 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=6zjha9CozwWf99QW/X18MFNvUU8jW7FfnrLuKdO90KA=; b=L0+gz1POMW9Y/kFA694Q5ba8OdR18KJoBctrbvNKtKdH/HI+SYaHkw7FfES99IvvsA YY8WHZO4AE/suWdsGwRnLC6GWpmB0xNAMje/XigIaHJeU8NxNLInFTHEcB2/JNyWmKM/ ZdUttdp5sYozBhtM+L4GxSaI0fsOgdlwN9TiD5CLq3+uG7ot6J3rVXhJHErxtvPxYf97 D2Fg6VR0n/AxoZBZE4F01NinVUud4klHORTuoLh+AvS2ALoVk3FbkXO8HDnOXwXROCcD iUn8f2AcQ4ICzig+Y1AK+PPdnfo+bCK0uJAZmv+b88cbJoWw3Ep7mY9kVSMTLS/YXToO hk6A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1752632999; x=1753237799; 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=6zjha9CozwWf99QW/X18MFNvUU8jW7FfnrLuKdO90KA=; b=ulKhxzPl02FLtjs6/JOM5vvz73zc9RXO4IzXCKtkr6mD72meTPWIVDX8KqH+lE95bL 8ZhbNGBjDyqn8cHKs91wc7mhSsOV9EYJ4WcoOZYOmOsiWUU/pJGtYPB+h55XciYmFdzt 07nqieZNfGN2BGAf1dMpShyTpcYvu8UWBzJKrW7SyttwI0zq3pRm6CjcLKrxBsyQ5J2H DzkeHDKl7p5dieT1Cy7xIBKkZ/mqZXL7igSPd/WGRGbXSg520dkaCFyXzzXbsqa4QfT6 U7sQxJrJ0kJiECbmfpRCF2YROiGAO7yU7HEeqFFzCv4JghIKZMlgKKGJsGm8Iu5WNsK/ eARw== X-Forwarded-Encrypted: i=1; AJvYcCViPiekqMsP3ekCQfELY9Vvex9QPFRcKoJ96LNXtXOxdT+Rv1uX21C7SLNZDXEtN8kOXibQkHuPsw==@kvack.org X-Gm-Message-State: AOJu0YzMH8cK7+5cVJB8QpjSQgIWdUeIPEyl54+qxXw0fj1K4Yg5BmgY lq34yurcy83R+L9knXAY/tLOLTYvQAnWmYLOMyTPXW4Nz0oGGXK17KCv X-Gm-Gg: ASbGncvjB3IlCXap8HFGn1c9mAfA5jss4DKB2CgCG/3Q7jyk3KmqzBbl6uFDx3eJBuj crnGUdnrFTIRwnm150kc5RNzFX9Kq/EsLuXUrk1WwdazOZYww4O0HJEqkx5SWZ8fkGG/yLzDPNy PvcLAPRXZyWtYnmnUBXx1QZ5r6lb6akFf18cX9GjX156jEHzFdQnLqJ5nPRUCYsKDuO7yDRSOzD tOGF+AQAWPxvAqzWkxFIWhrzgYpDllOOFdAyGbI3+ny2YOjRkhh/EGdhn+1Cil2kQv6+JvxxM3C Hz+FDpYnz03yn3jv+O916vewfAvwg9wbpwcRnWZcwSscsHf3/Q9sgxIO/B9boxHLysjO+Lq4DzI hZKta1zrQrq71DtvAaGfQYinHKvLsUrToxJxYgMSltMPeM85Gw7cnNcEPxCKwaPw= X-Google-Smtp-Source: AGHT+IFebfSowSgobZGLnQwXyibCp3VA/xpNxqs6gg8v0Nnk5RUzLeSiwD8t1MjjItmTM+35tQlghg== X-Received: by 2002:a05:6a00:98d:b0:755:9110:c00c with SMTP id d2e1a72fcca58-757250806bbmr1370126b3a.11.1752632999039; Tue, 15 Jul 2025 19:29:59 -0700 (PDT) Received: from localhost.localdomain ([2001:558:600a:7:a83d:600f:32cc:235a]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-74eb9dd603asm13511470b3a.12.2025.07.15.19.29.58 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Tue, 15 Jul 2025 19:29:58 -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 2/6] locking/local_lock: Introduce local_lock_is_locked(). Date: Tue, 15 Jul 2025 19:29:46 -0700 Message-Id: <20250716022950.69330-3-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-Rspamd-Server: rspam12 X-Rspamd-Queue-Id: 52B03160002 X-Stat-Signature: hx6r63mcio5rpea9kaxs8etrpgc94odp X-Rspam-User: X-HE-Tag: 1752633000-124919 X-HE-Meta: U2FsdGVkX19yz4FblMJa6REDf1SjpTwjKN/rYcDwAXvu7CHK0v8kD5C7YzbZrwhX3+vCQspa+MOX7k4sgYQU9x8TW8FqHjkYxKNZyjVbvoY1Jmz1K7aZ8yFGWW+4Ba1opAARJrJ91xVjcpIOBtb0efV0nsuoPhISZ51k5ojxaOhnB2Qxh/pbcKmMgDbDz8OaN4ui3c4Iau45PX8gFr1HQiRd/6H7ITpeCtNLW18zOAg8U1jeJSvReHwN3uLPx0/ECpXYKecaz96rZNl2PBxtoh9NUNAiWO6FUg4kAH7Dx+n3Mi63S6qknXDhNjQisGRTOf9B7PVcYAjb+jbdRMjHM+rjI+PhDMcZ7UEMIHy+V+jJ9Vm/Nhar/Bdb2ti+RBkedfuMYdJ2uRitswstW6pUsIqq0kN9Iqfh6j81qqIMFiMGBYFV2yOwe0k6CIoYc9pMtostqilK7M4f32jVoPFOQ9KbDnPDaOUGNDLQTX+X7Esp4X4Rcy/duE5BsQ1t1wNpqXR+CHLnZDRYGHH+aB6RkYdisM4U16s5xa6d/lCcW76O6x8UYnoX7rqBmzEK5w2VBCb5DzFQjjWdpOCjtWMi2YYPgA/mlIJBW2Kdnnswyn95FdwA/OyaJMhyz/WohRAX/6qgHhGeZJsJvm0AN28vAizuveaWJSBsSB63H8FH6Hbq79b7QqWRZw7Gdfy6a2C2yI6nKmhbaGlq0ad1MWRpJKqrh1/UEi1SceHB6l2U4VNUb+NABLFPu/Z/BlUCRzTAxVfe8fq/IB5azek6h943vy0ffc0+6EFdmgQYxA15boQ9s4uCQW8xg8SfaeG4xoycp30vRp7bdsNdP55qIDigCOfQXGovfO6f7+n3WVwYO9C8g4+tnHPTUNoKXCEkPZAiGu/w9ka0rrMgZDIcIbr8JV295wT6eR1QS8VHuyM0R+I71gLD2KwhYDU40UN5W/7dra/i8nWYwDOL/0Q7inI FsvxI1BU V4dTPRnrLouEErrDGiDug8Pzgj/tjy6jbF3JJH1bbbJI8e3ggP7lNSp83tIPVP/bn+L/HfdseyGoPuyg6wj1cQhrHC0G8mY9cRxlkoU0yRZSaBD6H/xplAekLcZzstAmsumupC5I6JAmYZ9dXRnFe2T709H/fdI5xcNlZjJKDkKIKruCe4hu6CgZYLoyCoQJQglgnbgy0qhc3bPPOatxrAEyHpY1Qhy9/LSq53RBP/vxMFvDZ5G8z8oqEGS3vACiMZnVSB3x5deE9NML4xx9h2xADKXh2+CvEgXWnslsxZc3KVopz3pH00QMw/PmQ87056hUrvqgo5VbNTBhCyfPhc40O6POv++L0F+Y13nxbeshMrYl+YZv3NOrY+kVAK+WYXhZEqLza/8CYkhzLwbaNzOMZyYqg5MtCLPUPuWc9wf9t9Ja8KZ5JGI2dlB1l8PKFCxjdRuqqvXUvdNGA4YuUYeUPaXf9BDBtIVRpUjQ57o25Ihs9s2lYqsx0W/cyMIVqvYPNBwZdcUqXUUgysh0RkWsmImX3cysn2BIEbKQsyJspqypsAmUjVQ3gcv3L/OjkBuip 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 Introduce local_lock_is_locked() that returns true when given local_lock is locked by current cpu (in !PREEMPT_RT) or by current task (in PREEMPT_RT). The goal is to detect a deadlock by the caller. Reviewed-by: Sebastian Andrzej Siewior Signed-off-by: Alexei Starovoitov --- include/linux/local_lock.h | 2 ++ include/linux/local_lock_internal.h | 7 +++++++ include/linux/rtmutex.h | 9 +++++++++ kernel/locking/rtmutex_common.h | 9 --------- 4 files changed, 18 insertions(+), 9 deletions(-) diff --git a/include/linux/local_lock.h b/include/linux/local_lock.h index 16a2ee4f8310..092ce89b162a 100644 --- a/include/linux/local_lock.h +++ b/include/linux/local_lock.h @@ -66,6 +66,8 @@ */ #define local_trylock(lock) __local_trylock(lock) +#define local_lock_is_locked(lock) __local_lock_is_locked(lock) + /** * local_trylock_irqsave - Try to acquire a per CPU local lock, save and disable * interrupts if acquired diff --git a/include/linux/local_lock_internal.h b/include/linux/local_lock_internal.h index 85c2e1b1af6b..db61409f040c 100644 --- a/include/linux/local_lock_internal.h +++ b/include/linux/local_lock_internal.h @@ -165,6 +165,9 @@ do { \ !!tl; \ }) +/* preemption or migration must be disabled before calling __local_lock_is_locked */ +#define __local_lock_is_locked(lock) READ_ONCE(this_cpu_ptr(lock)->acquired) + #define __local_lock_release(lock) \ do { \ local_trylock_t *tl; \ @@ -285,4 +288,8 @@ do { \ __local_trylock(lock); \ }) +/* migration must be disabled before calling __local_lock_is_locked */ +#define __local_lock_is_locked(__lock) \ + (rt_mutex_owner(&this_cpu_ptr(__lock)->lock) == current) + #endif /* CONFIG_PREEMPT_RT */ diff --git a/include/linux/rtmutex.h b/include/linux/rtmutex.h index 7d049883a08a..a8f2fe154487 100644 --- a/include/linux/rtmutex.h +++ b/include/linux/rtmutex.h @@ -44,6 +44,15 @@ static inline bool rt_mutex_base_is_locked(struct rt_mutex_base *lock) return READ_ONCE(lock->owner) != NULL; } +#define RT_MUTEX_HAS_WAITERS 1UL + +static inline struct task_struct *rt_mutex_owner(struct rt_mutex_base *lock) +{ + unsigned long owner = (unsigned long) READ_ONCE(lock->owner); + + return (struct task_struct *) (owner & ~RT_MUTEX_HAS_WAITERS); +} + extern void rt_mutex_base_init(struct rt_mutex_base *rtb); /** diff --git a/kernel/locking/rtmutex_common.h b/kernel/locking/rtmutex_common.h index 78dd3d8c6554..cf6ddd1b23a2 100644 --- a/kernel/locking/rtmutex_common.h +++ b/kernel/locking/rtmutex_common.h @@ -153,15 +153,6 @@ static inline struct rt_mutex_waiter *task_top_pi_waiter(struct task_struct *p) pi_tree.entry); } -#define RT_MUTEX_HAS_WAITERS 1UL - -static inline struct task_struct *rt_mutex_owner(struct rt_mutex_base *lock) -{ - unsigned long owner = (unsigned long) READ_ONCE(lock->owner); - - return (struct task_struct *) (owner & ~RT_MUTEX_HAS_WAITERS); -} - /* * Constants for rt mutex functions which have a selectable deadlock * detection. -- 2.47.1