From nobody Mon Feb 9 15:09:07 2026 Received: from mail-pl1-f175.google.com (mail-pl1-f175.google.com [209.85.214.175]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 131BB231A3B for ; Sun, 25 Jan 2026 16:41:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.175 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769359275; cv=none; b=Z3lO5CiUpIYw3zmzMaPKkPuoDp7xzbRU2ctd2C4xl9Xjfv8rXHH4axvxisuBG59+7xoX18w4id00cw0G7RVtG3fomOgqhYxuudkeFgra0WX6UC7rqyGnim3NxgSHhtnYCTpqL839MdMA4kTyp8kcurhhzLo46CpnQYuYdw5+NFU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769359275; c=relaxed/simple; bh=zcCGim+5U2vndKV29SEXYfA6msWpnbAVYdgjKGfRk9U=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=iWmtEK+ORedssgmD/BdTUtm4fZUse6sW4E/X00qwPM2U3mBysimRrGqWg+WmK2ZA8PxaQoTQU5ywsAjSljusqMGQ/wqahH0pBxbHDf53EEuzD5hSwvYyKvKGHEg1f/PTNxrUFVtO6tNdnfQpUjIZEf2vO/phbGuRaZla2y1Kcto= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=GQdXLXaW; arc=none smtp.client-ip=209.85.214.175 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="GQdXLXaW" Received: by mail-pl1-f175.google.com with SMTP id d9443c01a7336-2a09d981507so25111535ad.1 for ; Sun, 25 Jan 2026 08:41:13 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769359273; x=1769964073; darn=vger.kernel.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=bl6Fy3qkKjqqNdMdshjjsUDfUOfp45YX0OWM4M+0XLI=; b=GQdXLXaWT9HL1oRGo3MP3+gnIGzajumKHnsCwfnECtTbxJDF24E1OSVTwcNdGDI9oD cK9MwaMhXNS3rT4CNwPNpq/PsxKQKC/K/FndyJLAMutBvF12tgQkq8rKOJEYavkqYyNq ni9fQAM6qCFSDrrsRgsjxniaLZMPWYdT5jmTSnstoUCr/U0vlvNcPd6aztngl+QX9rPy /9ffnrnvFjPYTaZkg2Nnzscz7b4NPbLkkBX0NtWn+gpNSClDlPAEmvJxU0TuvQabNR9N h56Xo++ZkShVyP5HGGFt1Zzih2kWLkZ3wMpFDn7pKBSDLkwUyjb1nW5xOtIg/4sKMvc7 7Gyw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769359273; x=1769964073; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=bl6Fy3qkKjqqNdMdshjjsUDfUOfp45YX0OWM4M+0XLI=; b=okHVodQ/NzWJKOt4w6ETxy733uomb1GFnynaXDO8dLzXaHb6AuRPMcQUbepfIAkSJy KXGrXP3aN844Oz0D4p3QEmRl6oBI1shE6hueneLzoFKUo0AfN1VyMUH5apX8/c/ttxyf DUe+JxBy5//VFkTRZHYpYyiFEHbLKOtgGpUsHjfsaSWj/yK6WIRXc+U+aKOOVNE+rKb1 cX6xGy229YN6eNWXeZRQqkyuV8pWz6jZ5Q06dvA8qZ0R37YdDZUQIFKi4nwpc88y5eHL 1dddAbPJVN1N649lL7kH8tkDcrWB4ktKlAbaHN0gCHfxJuOq88Pwk6rtV1HFkZ+DsmF8 EzEg== X-Forwarded-Encrypted: i=1; AJvYcCWKkYwQtkt3bDQp0PCf3Qk3MTI91NvaOOOKm0S9zjCD9CzGLSsdAVH0PZlnac4WRQz72wN1MmShoZFfm10=@vger.kernel.org X-Gm-Message-State: AOJu0Yz9Tdvq72n4kj/PHo9xZD5ICwAwXKuDALrkFKdOgWs2voRnxhWE IkHNqtaHSuyRV8Wt+t31jKFSFkio5lDF3Bb+fpkDvKk0LagUhNH/7xtn X-Gm-Gg: AZuq6aJhi/kcZSYpyUmOZ4tzZ5O3XMMAx8kMyCRcRBS4CUGIBWQa6KXU0ibh+UtRhDI xTXeU3qYU52avY3KGQlUuZ5iYCKu1G40nPFPRLsPUCaUjnZIarn29F5hKTdDjgsMp4O0IOCOdmr U0NDOIMd2ujmzJ4HLVVBJ7yscJI4NTTkk357YjGctWXBY08gXZ5Zmz1Rlm3CNRq8o9S0zOUWkwM 2kOFccx/WBEMQKLIFBuTJthNfpOEMxhkq2+2K3zlC0jLNKeBPltmE8ZHgaJGJ3YtyEZJq/7fDt0 3lyQuz1HzAkG3a99JbmdBPLmSElodiiPgmD3CdZYR3Rpj+gSh9+CQGNzXHv0m3jLBuZaHtIgQzB STMDYysk7i0YeikKittH35gGK8YsYbMggTOgxX7NCk+cCjOGHQnVsBWOWrOX2sdSl09LfQZ8Ziw ZOjdC0pVYkbFjheOznEUtTA0wR4ktdmNw= X-Received: by 2002:a17:903:1cb:b0:2a7:77cd:2fef with SMTP id d9443c01a7336-2a845586aa7mr16454465ad.19.1769359273331; Sun, 25 Jan 2026 08:41:13 -0800 (PST) Received: from DESKTOP-3LEPQG8.localdomain ([119.28.20.50]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2a802f97667sm70633225ad.56.2026.01.25.08.41.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 25 Jan 2026 08:41:12 -0800 (PST) From: Xie Yuanbin To: linux@armlinux.org.uk, johannes@sipsolutions.net, masahiroy@kernel.org, jgross@suse.com, nsc@kernel.org, kees@kernel.org, tglx@kernel.org, mingo@kernel.org, frederic@kernel.org, paulmck@kernel.org, peterz@infradead.org, mathieu.desnoyers@efficios.com, luto@kernel.org, edumazet@google.com Cc: linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Xie Yuanbin Subject: [PATCH 3/9] ARM: entry: fix wrong lockdep hardirqs state Date: Mon, 26 Jan 2026 00:40:10 +0800 Message-ID: <20260125164016.331257-4-qq570070308@gmail.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260125164016.331257-1-qq570070308@gmail.com> References: <20260125164016.331257-1-qq570070308@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" When CONFIG_PROVE_LOCKING=3Dy, CONFIG_TRACE_IRQFLAGS=3Dy, CONFIG_NO_HZ_FULL= =3Dy, and nohz_full is correctly enabled, if a user program returns to user mode on the nohz_full CPUs, the following WARNING will be triggered: ```log [ 4.763050] ------------[ cut here ]------------ [ 4.763244] WARNING: kernel/context_tracking.c:450 at __ct_user_enter+0x= 180/0x184, CPU#0: bash/1 [ 4.764815] Modules linked in: [ 4.765386] CPU: 0 UID: 0 PID: 1 Comm: bash Not tainted 6.19.0-rc6-next-= 20260123 #1 VOLUNTARY [ 4.765761] Hardware name: Generic DT based system [ 4.766105] Call trace: [ 4.766151] unwind_backtrace from show_stack+0x10/0x14 [ 4.766686] show_stack from dump_stack_lvl+0x68/0x80 [ 4.766919] dump_stack_lvl from __warn+0xf0/0x270 [ 4.767140] __warn from warn_slowpath_fmt+0xc0/0x194 [ 4.767542] warn_slowpath_fmt from __ct_user_enter+0x180/0x184 [ 4.767792] __ct_user_enter from user_enter_callable+0x64/0x6c [ 4.768105] user_enter_callable from no_work_pending+0x8/0x4c [ 4.768415] Exception stack(0xf0849fb0 to 0xf0849ff8) [ 4.768816] 9fa0: 00000000 00000000 = 00000000 00000000 [ 4.769060] 9fc0: 00000000 00000000 00000000 00000000 00000000 00000000 = 00000000 00000000 [ 4.769335] 9fe0: 00000000 beaf2ef0 00000000 b6f10dec 00000010 00000000 [ 4.769669] irq event stamp: 211021 [ 4.770932] hardirqs last enabled at (211021): [] no_work_pen= ding+0x4/0x4c [ 4.771687] hardirqs last disabled at (211020): [] do_work_pen= ding+0x48/0xa4 [ 4.772290] softirqs last enabled at (210994): [] handle_soft= irqs+0x434/0x4dc [ 4.772902] softirqs last disabled at (210987): [] __irq_exit_= rcu+0xd0/0x204 [ 4.773359] ---[ end trace 0000000000000000 ]--- ``` In ret_to_user() and ret_fast_syscall(), disable_irq_notrace() is called, which skips trace_hardirqs_off(). On the other hand, asm_trace_hardirqs_on() is called prematurely before user_enter(). This causes lockdep's hardirqs to be recorded as enabled when user_enter() is called, even if interrupts are disabled. 1. Do not skip the tracing when enabling/disabling interrupts before returning to user mode, just like what other architectures do. 2. Call asm_trace_hardirqs_on() after user_enter(). Fixes: b04db8e19fc2 ("rcu: Use lockdep to assert IRQs are disabled/enabled") Signed-off-by: Xie Yuanbin --- arch/arm/kernel/entry-common.S | 14 ++++++-------- arch/arm/kernel/signal.c | 7 +------ 2 files changed, 7 insertions(+), 14 deletions(-) diff --git a/arch/arm/kernel/entry-common.S b/arch/arm/kernel/entry-common.S index f579770fab71..0e462bbede2f 100644 --- a/arch/arm/kernel/entry-common.S +++ b/arch/arm/kernel/entry-common.S @@ -71,7 +71,7 @@ __ret_fast_syscall: mov r0, sp @ 'regs' bl do_rseq_syscall #endif - disable_irq_notrace @ disable interrupts + disable_irq save =3D 0 @ disable interrupts ldr r1, [tsk, #TI_FLAGS] @ re-check for syscall tracing movs r1, r1, lsl #16 beq no_work_pending @@ -97,30 +97,28 @@ ENDPROC(ret_fast_syscall) =20 /* * "slow" syscall return path. "why" tells us if this was a real syscall. - * IRQs may be enabled here, so always disable them. Note that we use the - * "notrace" version to avoid calling into the tracing code unnecessarily. - * do_work_pending() will update this state if necessary. + * IRQs may be enabled here, so always disable them. */ ENTRY(ret_to_user) ret_slow_syscall: #if IS_ENABLED(CONFIG_DEBUG_RSEQ) /* do_rseq_syscall needs interrupts enabled. */ - enable_irq_notrace @ enable interrupts + enable_irq save =3D 0 @ enable interrupts mov r0, sp @ 'regs' bl do_rseq_syscall #endif - disable_irq_notrace @ disable interrupts + disable_irq save =3D 0 @ disable interrupts ENTRY(ret_to_user_from_irq) ldr r1, [tsk, #TI_FLAGS] movs r1, r1, lsl #16 bne slow_work_pending no_work_pending: - asm_trace_hardirqs_on save =3D 0 - #ifdef CONFIG_CONTEXT_TRACKING_USER bl user_enter_callable #endif =20 + asm_trace_hardirqs_on save =3D 0 + #ifdef CONFIG_KSTACK_ERASE bl stackleak_erase_on_task_stack #endif diff --git a/arch/arm/kernel/signal.c b/arch/arm/kernel/signal.c index 79a6730fa0eb..93e0a7637c81 100644 --- a/arch/arm/kernel/signal.c +++ b/arch/arm/kernel/signal.c @@ -601,12 +601,7 @@ static int do_signal(struct pt_regs *regs, int syscall) asmlinkage int do_work_pending(struct pt_regs *regs, unsigned int thread_flags, int sysca= ll) { - /* - * The assembly code enters us with IRQs off, but it hasn't - * informed the tracing code of that for efficiency reasons. - * Update the trace code with the current status. - */ - trace_hardirqs_off(); + /* The assembly code enters us with IRQs off. */ do { if (likely(thread_flags & _TIF_NEED_RESCHED)) { schedule(); --=20 2.51.0