From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-ed1-f53.google.com (mail-ed1-f53.google.com [209.85.208.53]) (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 5854E1F0E54 for ; Tue, 7 Jan 2025 09:42:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.53 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1736242925; cv=none; b=PmbIzq865+eP0lY9k+f7alqSy66ODlU9i1eSPWIkcp/NYVHYYtqW35H+dnkYacXI2T3mzWvqxV0wSk9F0W8d5fJeMYaSpUp+j6n1f53WGrQET5g3W/eSFK8cQJqZlo/oM3gQ3Dd7pil21LrBzTaD3dv0HtKXn/sZlG1WXrGjJ8k= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1736242925; c=relaxed/simple; bh=FOGtLPC5a7UZyr9BXM9/Olw6+K/keosymGZPBRsJSyw=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=nrDCof7k2V6Hx9khqWUEIJ2EBkp6vgER9yrUhLtXUT0BKtNWFPDp6XOA6NYBG1MzG6yMpAAd6aUbv9g6cUyMyGjV4BiVPLPtwLGxLAmo5laxuqMLdJqvsito6J5YgjXTvS/HqWwgM+RMbvUU4L3QPVurC0bziNpWJ4TKQd0uryY= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=pLy1Mey1; arc=none smtp.client-ip=209.85.208.53 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="pLy1Mey1" Received: by mail-ed1-f53.google.com with SMTP id 4fb4d7f45d1cf-5d3d14336f0so7522194a12.3 for ; Tue, 07 Jan 2025 01:42:02 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1736242921; x=1736847721; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=JMT4PCSSjbqf8W79ja5QYvNX8ZzwiayCa6wY1VSVH3k=; b=pLy1Mey1pGSoXTEC4jNJnagryMRzk0LJwI3aboSqUefMj39fAjynXHUwwQ/FgsryLB jLw/b8edovVEtFP3v8MLXqodpoqXL5G22G6qDFG1XRoyvH1Ce8CuU/QhAvrebMA3QH+A hnk9A+5Vj7IvJ7rAH1GjpSOokPGNSPy4o+P7/4VScUzsDtQ3ct0puNkpdnir4OeT7qNZ 91d4EpbiOX/xGxU6LVb0YQa7euHBAwG3yAfOsN4sU3XPqizEEQfP8ZMwuKiVVxfvCMlz jr2WqY9h5w/rjn/YfK9Jkg51kXi86oXSTiJqQw7YNsU5Q4lIGwoCOs1LOmMg9KKF3wfq W7WQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1736242921; x=1736847721; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=JMT4PCSSjbqf8W79ja5QYvNX8ZzwiayCa6wY1VSVH3k=; b=l/1a6SDIutoZSJvxF+2r3PYzMJqM4ONJWEZVn5hmwhLgMGOmswu03eBPCwPIYeCn40 621yQhtjjwPSvIC7IpMFfAuCogZnBkw1tKjGviZMyoeMya7yj7lIRFbeRB8yVQTcMui3 Rnn0DGpvNn0fvQqus0GG/5SkT505IQ79imWBfBl82PwhDNe0n/mjPPrv/6fFQx2DQHU/ ySYi3iszQP3RmICcVHoeeL8+R7pqysZfVwx3yz/6luc5JbjNJBBkIahjAr8l5krG4jqb R0skPFfY41giF+MvoRWtEa4X8jaB8eLI1+dihDAkSLPYcr2kvPHfSwNMfV6AoczBke7p s9lg== X-Forwarded-Encrypted: i=1; AJvYcCWZ6ASo8S4at6VM3H5q9xeo6aMob1/oV6NOKK9bHcaBGl2V59vbSVDm5h8VtzObrIhZtyKSf06f+T9NvNM=@vger.kernel.org X-Gm-Message-State: AOJu0Ywa5u/MYjHbzMBnyrKD2y5yBZZQRObCDyHC1BZDHZxWPlfDxatQ oi3HzL0Jrz98RLN8tPEezBBovReq+MoaF1+LapvVUjgIN1Zxa9WbW/1t3jxxViE= X-Gm-Gg: ASbGnct6tZycQa/Km7anJZ6xPHBSrro0AXQYrZING3pQrJp8YeC31ecxTUJxzLiVTZL yl7Za8K6o91KQxI8j3fUarQhX7WBBVRgzpiXTZ7AFGmjo3eNz4Rj6hg8g15zLfE47lpEt18gVV7 oNasB8pwnzIb+9xFn3+BBdpEpY8+Y/iZgkiUMlq+lcbobXFOKYr2zrtCIIsLR8L67w4/B7D42qo qYvVdNHK5hqf7QXBOxFPYKEUCHagPRcYnKuokHWY1vidAOU5+5IlK2qpr6FoAdXk/E= X-Google-Smtp-Source: AGHT+IGHMqa0/ZiWplVpsWLK3xTllHfRhzv23loJzX9+Mz5N8MCuV6AGOtz4HX0TG5tn5XTLx0fc0A== X-Received: by 2002:a17:907:1c91:b0:aa6:5d30:d976 with SMTP id a640c23a62f3a-aac270278edmr6059701866b.10.1736242920686; Tue, 07 Jan 2025 01:42:00 -0800 (PST) Received: from [192.168.1.140] ([85.235.12.238]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-aac0f012229sm2356901166b.133.2025.01.07.01.41.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Jan 2025 01:41:59 -0800 (PST) From: Linus Walleij Date: Tue, 07 Jan 2025 10:41:42 +0100 Subject: [PATCH RFC v3 26/30] ARM: entry: Move in-kernel hardirq tracing to C Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Message-Id: <20250107-arm-generic-entry-v3-26-4e5f3c15db2d@linaro.org> References: <20250107-arm-generic-entry-v3-0-4e5f3c15db2d@linaro.org> In-Reply-To: <20250107-arm-generic-entry-v3-0-4e5f3c15db2d@linaro.org> To: Dmitry Vyukov , Oleg Nesterov , Russell King , Kees Cook , Andy Lutomirski , Will Drewry , Frederic Weisbecker , "Paul E. McKenney" , Jinjie Ruan , Arnd Bergmann , Ard Biesheuvel , Al Viro Cc: linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Linus Walleij X-Mailer: b4 0.14.2 Move the code tracing hardirqs on/off into the C callbacks for irqentry_enter_from_kernel_mode() and irqentry_exit_to_kernel_mode(). The semantic difference occurred is that we alsways check the PSR_I_BIT to determine if (hard) interrupts were enabled or not. The assembly has a tweak to avoid this if we are exiting an IRQ since it is obvious that IRQs must have been enabled to get there, but for simplicity we just check it for all exceptions. Signed-off-by: Linus Walleij --- arch/arm/kernel/entry-armv.S | 13 ++++--------- arch/arm/kernel/entry-header.S | 19 ++----------------- arch/arm/kernel/entry.c | 5 +++++ 3 files changed, 11 insertions(+), 26 deletions(-) diff --git a/arch/arm/kernel/entry-armv.S b/arch/arm/kernel/entry-armv.S index f64c4cc8beda6bcd469e6ff1a1f337d52dbbaf9c..2a789c8834b93475c32dcb6ba5854e24ddd8d6e9 100644 --- a/arch/arm/kernel/entry-armv.S +++ b/arch/arm/kernel/entry-armv.S @@ -158,7 +158,7 @@ ENDPROC(__und_invalid) #define SPFIX(code...) #endif - .macro svc_entry, stack_hole=0, trace=1, uaccess=1, overflow_check=1 + .macro svc_entry, stack_hole=0 uaccess=1, overflow_check=1 UNWIND(.fnstart ) sub sp, sp, #(SVC_REGS_SIZE + \stack_hole) THUMB( add sp, r1 ) @ get SP in a GPR without @@ -208,11 +208,6 @@ ENDPROC(__und_invalid) mov r0, sp @ 'regs' bl irqentry_enter_from_kernel_mode - .if \trace -#ifdef CONFIG_TRACE_IRQFLAGS - bl trace_hardirqs_off -#endif - .endif .endm .align 5 @@ -239,7 +234,7 @@ __irq_svc: blne svc_preempt #endif - svc_exit r5, irq = 1 @ return from exception + svc_exit r5 @ return from exception UNWIND(.fnend ) ENDPROC(__irq_svc) @@ -303,7 +298,7 @@ ENDPROC(__pabt_svc) .align 5 __fiq_svc: - svc_entry trace=0 + svc_entry mov r0, sp @ struct pt_regs *regs bl handle_fiq_as_nmi svc_exit_via_fiq @@ -321,7 +316,7 @@ ENDPROC(__fiq_svc) @ .align 5 __fiq_abt: - svc_entry trace=0 + svc_entry ARM( msr cpsr_c, #ABT_MODE | PSR_I_BIT | PSR_F_BIT ) THUMB( mov r0, #ABT_MODE | PSR_I_BIT | PSR_F_BIT ) diff --git a/arch/arm/kernel/entry-header.S b/arch/arm/kernel/entry-header.S index 49a9c5cf6fd5fbb917f2ada6c0d6cc400b7d3fb3..cfaf14d71378ba14bbb2a42cd36d48a23838eee1 100644 --- a/arch/arm/kernel/entry-header.S +++ b/arch/arm/kernel/entry-header.S @@ -199,26 +199,11 @@ .endm - .macro svc_exit, rpsr, irq = 0 - .if \irq != 0 - @ IRQs already off -#ifdef CONFIG_TRACE_IRQFLAGS - @ The parent context IRQs must have been enabled to get here in - @ the first place, so there's no point checking the PSR I bit. - bl trace_hardirqs_on -#endif - .else + .macro svc_exit, rpsr + @ IRQs off again before pulling preserved data off the stack disable_irq_notrace -#ifdef CONFIG_TRACE_IRQFLAGS - tst \rpsr, #PSR_I_BIT - bleq trace_hardirqs_on - tst \rpsr, #PSR_I_BIT - blne trace_hardirqs_off -#endif - .endif - mov r0, sp @ 'regs' bl irqentry_exit_to_kernel_mode diff --git a/arch/arm/kernel/entry.c b/arch/arm/kernel/entry.c index 674b5adcec0001b7d075d6936bfb4e318cb7ce74..1e1284cc4caed6e602ce36e812d535e6fe324f34 100644 --- a/arch/arm/kernel/entry.c +++ b/arch/arm/kernel/entry.c @@ -59,8 +59,13 @@ noinstr void irqentry_exit_to_user_mode(struct pt_regs *regs) noinstr void irqentry_enter_from_kernel_mode(struct pt_regs *regs) { + trace_hardirqs_off(); } noinstr void irqentry_exit_to_kernel_mode(struct pt_regs *regs) { + if (interrupts_enabled(regs)) + trace_hardirqs_on(); + else + trace_hardirqs_off(); } -- 2.47.1