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 bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 8C199C433F5 for ; Fri, 3 Dec 2021 10:17:06 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=i9US7ftoIR5P4lqxeIhBsrebEDbsguk7lKHMl4456qw=; b=voiapxRXhr1kcI 1JxQR/9/CDfi71ztPmV51QY8ELvGalptlxM/TglHc6YIJWTchZ/br5et2cZmM/NPocWkgDpzrJJMc 4+I4MNFy5/9FQC5j+2cSdEQGX8Jl0n579yeFJlhsA+MNC4b/yT3I8XZCDQ9wpwRDdWTqX0dV328CB SicDZl6XSBStGspqyM/KAI8yapXKYXdfDxgt5SrNqiOCkqkpAiAd7P2diIYExd7iZpa+jp/Z3vRqH rC6lvj6NeU6TcNpJo3G4psDHlaqC9IsHrAcv1gowhu5rPlTtLyfHfFUmtoCTww9ASVQ/T/oZQC1tk WrjvVCjXgEFSNRcVoIlA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1mt5b7-00F7O8-Ok; Fri, 03 Dec 2021 10:15:22 +0000 Received: from ams.source.kernel.org ([2604:1380:4601:e00::1]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1mt5Vs-00F4os-P8 for linux-arm-kernel@lists.infradead.org; Fri, 03 Dec 2021 10:09:58 +0000 Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ams.source.kernel.org (Postfix) with ESMTPS id 6C5D9B8266B; Fri, 3 Dec 2021 10:09:55 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 85B46C53FD1; Fri, 3 Dec 2021 10:09:51 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1638526194; bh=HpkoSghHvnWrNXiyznhubLY2BkbvLcthA12n01MuhKU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=OUaIDB9JvVX40nGJ6CTQkLbO7RGQ1ddmAvGaE8xBX77QiT+4LBUJHE/kJHaXt048X f0eqEXyJDv+LCuzY0x/KdX6tlTGy9cs31nOgP2tfzbKwdYHnMsFHT3BCzNt0l2aAOt JTVxBqbQ2T9rP67jQtFuTydOcnJk36TtJdC5ReYJ3ET5d7XprIq0WbSinvbMsCLcmq YizV2nX6EKpIZeY1rNAw7M0DmHqmCba4eMIcXRG0w1oh0oTmygsXC0joBF4djrIafi ywk/gbKCRDJ9kzeGW9h3YS5NXGCKyf21/m0AlULPD/7AmfOAf/Qy0zEMRYXcfoEEpr 4u2VEGVUY6pmA== From: Ard Biesheuvel To: linux-arm-kernel@lists.infradead.org, linux@armlinux.org.uk Cc: Ard Biesheuvel , Nicolas Pitre , Arnd Bergmann , Kees Cook , Keith Packard , Linus Walleij , Nick Desaulniers , Tony Lindgren , Marc Zyngier , Vladimir Murzin , Jesse Taube Subject: [PATCH v3 14/14] ARM: v7m: enable support for IRQ stacks Date: Fri, 3 Dec 2021 11:09:03 +0100 Message-Id: <20211203100903.334206-15-ardb@kernel.org> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20211203100903.334206-1-ardb@kernel.org> References: <20211203100903.334206-1-ardb@kernel.org> MIME-Version: 1.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=1532; h=from:subject; bh=HpkoSghHvnWrNXiyznhubLY2BkbvLcthA12n01MuhKU=; b=owEB7QES/pANAwAKAcNPIjmS2Y8kAcsmYgBhqey+2W1scnWYaAs/Lm/qcJBaXO6Rxjgcitwf4Oyq 4G/tq6WJAbMEAAEKAB0WIQT72WJ8QGnJQhU3VynDTyI5ktmPJAUCYansvgAKCRDDTyI5ktmPJNjoDA CMi0Df1EsZl5WPh/AF5Xl91snmTwZwgtSqyMxVTWEzjo1uS2EFA36UmIRgpOhu/XCgJBifQc6Njyj7 +nZz67J9WXqYr/QW9craX2erJp8vC/P2AlqAvV4SUOYJnJ8I3pDX9XY7pj+rQR/UBDBw7EhUfG5Lqg WdYpUT0jO/uxm2Zoz3WNlMxQfvu/fHwLumrpepS5uIgH9dJN2CHHA6Gb+Br1Q6BbE/q49OXDR0pwwp uiLjeKrEkl0qyJEpb/c/MAUt7nLPVM8e5/GNH+ApGZuHpGHwQc7v+46RMsuZSOYh5vqYOLxdrrGvEj Wwasl0XUTWNiJCHQ7lfPcGPjpkCvv7Q77Q+732Mlcr6ib7HzoPRVXvH9Es5yYZn/BGIv0evaqGvPX1 1g6s721k7FTnlecTt9tVmmjnQ1lCgRoUBQQJoGnIaBv3YeSE68s3MX9gDEyOyXE3pxgskvcHDbYg69 Ld4CMdXElHAU4qNhpa2Drztcn+RjNR1TxeQ59L+uiXc3Y= X-Developer-Key: i=ardb@kernel.org; a=openpgp; fpr=F43D03328115A198C90016883D200E9CA6329909 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20211203_020957_148620_2BDE15E1 X-CRM114-Status: GOOD ( 15.67 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Enable support for IRQ stacks on !MMU, and add the code to the IRQ entry path to switch to the IRQ stack if not running from it already. Signed-off-by: Ard Biesheuvel --- arch/arm/Kconfig | 1 - arch/arm/kernel/entry-v7m.S | 17 +++++++++++++++-- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index 50ae5286f59b..359a3b85c8b3 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig @@ -1158,7 +1158,6 @@ config CURRENT_POINTER_IN_TPIDRURO config IRQSTACKS def_bool y - depends on MMU select HAVE_IRQ_EXIT_ON_IRQ_STACK select HAVE_SOFTIRQ_ON_OWN_STACK diff --git a/arch/arm/kernel/entry-v7m.S b/arch/arm/kernel/entry-v7m.S index 4e0d318b67c6..de8a60363c85 100644 --- a/arch/arm/kernel/entry-v7m.S +++ b/arch/arm/kernel/entry-v7m.S @@ -40,11 +40,24 @@ __irq_entry: @ Invoke the IRQ handler @ mov r0, sp - stmdb sp!, {lr} + ldr_this_cpu sp, irq_stack_ptr, r1, r2 + + @ + @ If we took the interrupt while running in the kernel, we may already + @ be using the IRQ stack, so revert to the original value in that case. + @ + subs r2, sp, r0 @ SP above bottom of IRQ stack? + rsbscs r2, r2, #THREAD_SIZE @ ... and below the top? + movcs sp, r0 + + push {r0, lr} @ preserve LR and original SP + @ routine called with r0 = struct pt_regs * bl generic_handle_arch_irq - pop {lr} + pop {r0, lr} + mov sp, r0 + @ @ Check for any pending work if returning to user @ -- 2.30.2 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel