From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 9DD9B40961F for ; Tue, 19 May 2026 16:29:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779208165; cv=none; b=nUHOGR8N8f1jJBjX0pj9Pmpte0TPeFczcpNp3sCe3hVXTN7MEWOVoEjFcFQXR8ybXuAzd5nXduGEOoNN4yUZhFjHaFGaS2YUw+d/ivrV+Bnsv2/1Niir7OjbwiIb+uvanLzST+4gcluSpEw9hBAiY4xV686LDhPcu9kY+AqYOPc= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779208165; c=relaxed/simple; bh=/wZH9gRWJQOHOFZelPCq1YimASmRHrQysUMSbYZTdvA=; h=Date:To:From:Subject:Message-Id; b=n5RcLADo1XIb3tAcVJzkTewdtzki1qTsDcZ1Yy9lnr/NdwYtCwCxc8sr5KfkfWacLE7TErPfjXM0dEw2VDw2WVZI5ir2Ic6WMqN47cqVbMZ4vY1sjPrZzFAGTeIi9Io/2GG7YzViJrElc+ZusdXS80pcajdWZzkNBYtkMKWRtGw= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux-foundation.org header.i=@linux-foundation.org header.b=ZCJZjQJf; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux-foundation.org header.i=@linux-foundation.org header.b="ZCJZjQJf" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 5235AC2BCB3; Tue, 19 May 2026 16:29:25 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linux-foundation.org; s=korg; t=1779208165; bh=/wZH9gRWJQOHOFZelPCq1YimASmRHrQysUMSbYZTdvA=; h=Date:To:From:Subject:From; b=ZCJZjQJfaTJdlmbMmSqIcc/an9W/e2Wheey8WU4740SDJq1z7JDzxj49v1un5PH4A EFwiIMUqf0vrMLoyY0/0lhoRG/MKOh0qCsFEgzuNr3AgrNoPNwJwOEPK6TWUYyoi5V LBBuSgYZL+jrLNqCAyfKG8IVaZ5Q2oTOTwtFjWOM= Date: Tue, 19 May 2026 09:29:24 -0700 To: mm-commits@vger.kernel.org,ankur.a.arora@oracle.com,akpm@linux-foundation.org From: Andrew Morton Subject: [to-be-updated] bpf-rqspinlock-switch-check_timeout-to-a-clock-interface.patch removed from -mm tree Message-Id: <20260519162925.5235AC2BCB3@smtp.kernel.org> Precedence: bulk X-Mailing-List: mm-commits@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: The quilt patch titled Subject: bpf/rqspinlock: switch check_timeout() to a clock interface has been removed from the -mm tree. Its filename was bpf-rqspinlock-switch-check_timeout-to-a-clock-interface.patch This patch was dropped because an updated version will be issued ------------------------------------------------------ From: Ankur Arora Subject: bpf/rqspinlock: switch check_timeout() to a clock interface Date: Wed, 8 Apr 2026 17:55:33 +0530 check_timeout() gets the current time value and depending on how much time has passed, checks for deadlock or times out, returning 0 or -errno on deadlock or timeout. Switch this out to a clock style interface, where it functions as a clock in the "lock-domain", returning the current time until a deadlock or timeout occurs. Once a deadlock or timeout has occurred, it stops functioning as a clock and returns error. Also adjust the RES_CHECK_TIMEOUT macro to discard the clock value when updating the explicit return status. Link: https://lore.kernel.org/20260408122538.3610871-10-ankur.a.arora@oracle.com Signed-off-by: Ankur Arora Acked-by: Kumar Kartikeya Dwivedi Cc: Kumar Kartikeya Dwivedi Cc: Alexei Starovoitov Cc: Arnd Bergmann Cc: Bjorn Andersson Cc: Boqun Feng Cc: Boqun Feng Cc: Catalin Marinas Cc: Christoph Lameter Cc: Daniel Lezcano Cc: David Gow Cc: Gary Guo Cc: Haris Okanovic Cc: Ingo Molnar Cc: Konrad Dybcio Cc: Mark Rutland Cc: Peter Zijlstra Cc: Rafael J. Wysocki (Intel) Cc: Will Deacon Signed-off-by: Andrew Morton --- kernel/bpf/rqspinlock.c | 45 +++++++++++++++++++++++++------------- 1 file changed, 30 insertions(+), 15 deletions(-) --- a/kernel/bpf/rqspinlock.c~bpf-rqspinlock-switch-check_timeout-to-a-clock-interface +++ a/kernel/bpf/rqspinlock.c @@ -196,8 +196,12 @@ static noinline int check_deadlock_ABBA( return 0; } -static noinline int check_timeout(rqspinlock_t *lock, u32 mask, - struct rqspinlock_timeout *ts) +/* + * Returns current monotonic time in ns on success or, negative errno + * value on failure due to timeout expiration or detection of deadlock. + */ +static noinline s64 clock_deadlock(rqspinlock_t *lock, u32 mask, + struct rqspinlock_timeout *ts) { u64 prev = ts->cur; u64 time; @@ -207,7 +211,7 @@ static noinline int check_timeout(rqspin return -EDEADLK; ts->cur = ktime_get_mono_fast_ns(); ts->timeout_end = ts->cur + ts->duration; - return 0; + return (s64)ts->cur; } time = ktime_get_mono_fast_ns(); @@ -219,11 +223,15 @@ static noinline int check_timeout(rqspin * checks. */ if (prev + NSEC_PER_MSEC < time) { + int ret; ts->cur = time; - return check_deadlock_ABBA(lock, mask); + ret = check_deadlock_ABBA(lock, mask); + if (ret) + return ret; + } - return 0; + return (s64)time; } /* @@ -231,15 +239,22 @@ static noinline int check_timeout(rqspin * as the macro does internal amortization for us. */ #ifndef res_smp_cond_load_acquire -#define RES_CHECK_TIMEOUT(ts, ret, mask) \ - ({ \ - if (!(ts).spin++) \ - (ret) = check_timeout((lock), (mask), &(ts)); \ - (ret); \ +#define RES_CHECK_TIMEOUT(ts, ret, mask) \ + ({ \ + s64 __timeval_err = 0; \ + if (!(ts).spin++) \ + __timeval_err = clock_deadlock((lock), (mask), &(ts)); \ + (ret) = __timeval_err < 0 ? __timeval_err : 0; \ + __timeval_err; \ }) #else -#define RES_CHECK_TIMEOUT(ts, ret, mask) \ - ({ (ret) = check_timeout((lock), (mask), &(ts)); }) +#define RES_CHECK_TIMEOUT(ts, ret, mask) \ + ({ \ + s64 __timeval_err; \ + __timeval_err = clock_deadlock((lock), (mask), &(ts)); \ + (ret) = __timeval_err < 0 ? __timeval_err : 0; \ + __timeval_err; \ + }) #endif /* @@ -281,7 +296,7 @@ retry: val = atomic_read(&lock->val); if (val || !atomic_try_cmpxchg(&lock->val, &val, 1)) { - if (RES_CHECK_TIMEOUT(ts, ret, ~0u)) + if (RES_CHECK_TIMEOUT(ts, ret, ~0u) < 0) goto out; cpu_relax(); goto retry; @@ -406,7 +421,7 @@ int __lockfunc resilient_queued_spin_loc */ if (val & _Q_LOCKED_MASK) { RES_RESET_TIMEOUT(ts, RES_DEF_TIMEOUT); - res_smp_cond_load_acquire(&lock->locked, !VAL || RES_CHECK_TIMEOUT(ts, ret, _Q_LOCKED_MASK)); + res_smp_cond_load_acquire(&lock->locked, !VAL || RES_CHECK_TIMEOUT(ts, ret, _Q_LOCKED_MASK) < 0); } if (ret) { @@ -568,7 +583,7 @@ queue: */ RES_RESET_TIMEOUT(ts, RES_DEF_TIMEOUT * 2); val = res_atomic_cond_read_acquire(&lock->val, !(VAL & _Q_LOCKED_PENDING_MASK) || - RES_CHECK_TIMEOUT(ts, ret, _Q_LOCKED_PENDING_MASK)); + RES_CHECK_TIMEOUT(ts, ret, _Q_LOCKED_PENDING_MASK) < 0); /* Disable queue destruction when we detect deadlocks. */ if (ret == -EDEADLK) { _ Patches currently in -mm which might be from ankur.a.arora@oracle.com are bpf-rqspinlock-use-smp_cond_load_acquire_timeout.patch sched-add-need-resched-timed-wait-interface.patch cpuidle-poll_state-wait-for-need-resched-via-tif_need_resched_relaxed_wait.patch kunit-enable-testing-smp_cond_load_relaxed_timeout.patch kunit-add-tests-for-smp_cond_load_relaxed_timeout.patch