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 31393C433F5 for ; Mon, 6 Dec 2021 17:01:48 +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=ycoMndq4OfNuvdfbhxUCbninAyET5+VjCWNWL8AfLbI=; b=DtzScleM68cmLh unjvjjAw+D8SbfCa9i4i6hSgPirK0UTnJFAXABI3Sl+OP4+fIO4U20ZUnzciIa5ByWM/lOPv3udYV qsGPPOQL06AJllOnGfaiMtoxtsFpLDPxogF5DX7HF8p+SKkfMHmU8eT57RFqa53Uddmi3nrvTAzyj B1AUrbI16wdKwiBP+YRiPoMbpTTZR8LgLFk68Tm/MYZEdcVSKZzJ1SqI7HTrXDx6XLLLfYDMVHs/F AoZWHC67afvCPzM9cTy+Yv6CKv6K6d/U9jyXl71lv4IL4wEsWh02XHrFM2X6ouSwj0p/vrvzEvZSJ vxGrb/TwiyN8MThqOgTw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1muHKi-004vRB-Ke; Mon, 06 Dec 2021 16:59:21 +0000 Received: from sin.source.kernel.org ([2604:1380:40e1:4800::1]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1muH9t-004quT-Sm for linux-arm-kernel@lists.infradead.org; Mon, 06 Dec 2021 16:48:11 +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 sin.source.kernel.org (Postfix) with ESMTPS id 18CD7CE16E3; Mon, 6 Dec 2021 16:48:07 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 9D2C7C341C1; Mon, 6 Dec 2021 16:48:02 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1638809285; bh=TauR/KbEkFI+zZnV4JxcV0fg0I8MkP+jAAd8zXwF2cI=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=pFDZAGY5Ib23uJWJyCmmhCfQdm75AzldQxYpndY2ITIzVD2sItyffe7HpgxhS2cH4 twSmBRoT01Qtz7fOmKbF8H2qxqQRmH5tY54cXlBgRcelq3tpkiTwiPa+ts3AAlSGws rDcdCG+QS0sSTuN7nvYLd2HYuIrkOsfCJQ8WJURfM1I2+npoyjLhB/J6iJskzcwg6f njFIAJpiphP6vI3nWiyLbJJgpysfkK81xARTHaiBIx0tM6LVeSyJ9Td/OqLzzpI4pP A3h3ZEekM5fB0uRg01/VBZIkRF4+/YhK7r7zsEXTUGS1q5+Zx1dc9KBScl0j76BJQu 6XlNaHjhZgfpg== 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 v4 15/15] ARM: v7m: enable support for IRQ stacks Date: Mon, 6 Dec 2021 17:46:59 +0100 Message-Id: <20211206164659.1495084-16-ardb@kernel.org> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20211206164659.1495084-1-ardb@kernel.org> References: <20211206164659.1495084-1-ardb@kernel.org> MIME-Version: 1.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=1637; h=from:subject; bh=TauR/KbEkFI+zZnV4JxcV0fg0I8MkP+jAAd8zXwF2cI=; b=owEB7QES/pANAwAKAcNPIjmS2Y8kAcsmYgBhrj6ChslaBANM6nGbpDQShx8fmvwGqsUj6tP6ZkTb tsBIz/eJAbMEAAEKAB0WIQT72WJ8QGnJQhU3VynDTyI5ktmPJAUCYa4+ggAKCRDDTyI5ktmPJN1fC/ 9lO/LkMsTXOnBALTxIbhTQi0H+xrYTGXg4Cq9BI6Ss/c/sLXAGNAEewV8980fsaokY5Rzc/T4gn1PQ mKg/Rctm4k5Qal6n+jtfyZBkCLvnA+OOG+h6/Meoab3mwoFr6vy1NMFqef0JFtxMItfsn712jIJIUA MYnV2IMpgeajVfZI0dBjQQjmWhCYNTO1WNj11F878EeUBuRHdy2UaMKj2dNxF9X3cJIg+wZUBAlsMO zTnqKI92u8kCrkThH2w2GfCBSwIU5MB1py7QBdvDH5PKOH/+1LXZtBUiAa2c7qK7IHjuv6FohxyjxS fVnKY8rZU2RUuPgk+5UA6gzu5JkSf5BXX1t2obu1A+V5ZFtkvLDOyuY2V3iOZFSVjNTug3/Uw35LDz sIDnXzjD2iPbXv5/V/MzWdnz+IsbcUvkeFuoQiyKBzcS35zpVWRT2N55Lo4k9uVBsRU0tWCZWbkr4A sgR9hoQqVI5H2xizQYoI2tNKw4GBUi8bTwErZ27e/fHY0= 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-20211206_084810_397890_2EC31384 X-CRM114-Status: GOOD ( 15.25 ) 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 Tested-by: Marc Zyngier Tested-by: Vladimir Murzin # ARMv7M --- 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