Received: by 2002:a05:6a10:206:0:0:0:0 with SMTP id 6csp493503pxj; Tue, 18 May 2021 07:59:27 -0700 (PDT) X-Google-Smtp-Source: ABdhPJy9e73QcmLIDgJWVXFx3hhB9fYzQXbPyTPWzcS4o5CoMrhM4BBZ3aW27GqnLBhaQhC537t3 X-Received: by 2002:a17:906:c01a:: with SMTP id e26mr6562184ejz.300.1621349966883; Tue, 18 May 2021 07:59:26 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1621349966; cv=none; d=google.com; s=arc-20160816; b=BSGrIzyjHUTu+3uA+/Dw1nej8Kmbd1iNt35OygmTSJ69sHNfS0XnyYWsX5btWVYUxF c+YGspPCnqJ+IatuJ4pxKKwwNk+S7I91p/d5XUVA8lJui+2JS2/x1MdHIiLf4Hs9tuSm hKKdeEJ72JO1NgqwbMpYDPL9HkvQKmceZkyxG9iBKBRIvI48kDyit+uZfGx1u9J8CsJI RaxduM9jX79afk/rjjBsjbMXnI8yBKqY0c1DUIVxSUFTjajd8jOTPm7K6xUFKbGI5dRs z7eyJi0Lz0WdqSvBXSsXZsymiBhjWKMxM0ndeE/V3kvaPu19boG/ub/EkExEvyXccvFh yVmA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=A5hXEUbr6Im9RD2oYpw90AtOpAalfQe2gyRreYfEbyw=; b=bEMlMzDLbx81oF9HnwCluUvZQEOt1O8IpvvpLPT6OGkbrvURQahEcp15wJISstK9A6 YzeuhwX5khTbgQAxEgd7XFTCQIJjcW+jDfJRbVSbSYlhQWSUtRDlfKDzDE+I+DC7awtR FHDuIH7iNc8Wlk7ME6cIhrgtwOu8TpIr9xGqmqP0M1pbUL9csI45fcd+i5/FoL1Sn78L 9hmdUNcUbkrnjSqxXoeKlWkbkdA+mCa6F0nnXhZxx6vTemYe7N5ofrx8Lxd7dpOXI3OH 2J41qBJWb3jQp5GZvP2jMhb5ZOgWZs7RaZfRNsGCpOAPJ4C5zKujwZ5pKRfTVjL3/N6X onjg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b="eI59I/po"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id da21si8499996edb.214.2021.05.18.07.59.03; Tue, 18 May 2021 07:59:26 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b="eI59I/po"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1343946AbhEQPto (ORCPT + 99 others); Mon, 17 May 2021 11:49:44 -0400 Received: from mail.kernel.org ([198.145.29.99]:56440 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S244933AbhEQPdF (ORCPT ); Mon, 17 May 2021 11:33:05 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id C08CB611EE; Mon, 17 May 2021 14:38:56 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1621262337; bh=5naTR0ZQsFFFbd2qFY99SqfeDdwr228D92VAiI2p+CI=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=eI59I/poaWegCYBJ0Fn67aWZi65jcoSRtFDmB6v5iZQoo4rk34cuqdsxiksSTjAPJ ILvJGMzqOR4JlDYtI00DiZ/rznn3+2TLBsom2ydoCKYeZBPuuiXO+OWlNCSaKOdsdL gtDKJ9UrUG+IyYYYAZVytFtAYvD08Q7NlyoQQHr8= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Marc Zyngier , Mark Rutland , Hector Martin , James Morse , Thomas Gleixner , Will Deacon , Catalin Marinas , Sasha Levin Subject: [PATCH 5.10 164/289] arm64: entry: factor irq triage logic into macros Date: Mon, 17 May 2021 16:01:29 +0200 Message-Id: <20210517140310.650829767@linuxfoundation.org> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210517140305.140529752@linuxfoundation.org> References: <20210517140305.140529752@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Marc Zyngier [ Upstream commit 9eb563cdabe1d583c262042d5d44cc256f644543 ] In subsequent patches we'll allow an FIQ handler to be registered, and FIQ exceptions will need to be triaged very similarly to IRQ exceptions. So that we can reuse the existing logic, this patch factors the IRQ triage logic out into macros that can be reused for FIQ. The macros are named to follow the elX_foo_handler scheme used by the C exception handlers. For consistency with other top-level exception handlers, the kernel_entry/kernel_exit logic is not moved into the macros. As FIQ will use a different C handler, this handler name is provided as an argument to the macros. There should be no functional change as a result of this patch. Signed-off-by: Marc Zyngier [Mark: rework macros, commit message, rebase before DAIF rework] Signed-off-by: Mark Rutland Tested-by: Hector Martin Cc: James Morse Cc: Thomas Gleixner Cc: Will Deacon Acked-by: Will Deacon Link: https://lore.kernel.org/r/20210315115629.57191-5-mark.rutland@arm.com Signed-off-by: Catalin Marinas Signed-off-by: Sasha Levin --- arch/arm64/kernel/entry.S | 80 +++++++++++++++++++++------------------ 1 file changed, 43 insertions(+), 37 deletions(-) diff --git a/arch/arm64/kernel/entry.S b/arch/arm64/kernel/entry.S index 2da82c139e1c..a9644da545c7 100644 --- a/arch/arm64/kernel/entry.S +++ b/arch/arm64/kernel/entry.S @@ -464,8 +464,8 @@ tsk .req x28 // current thread_info /* * Interrupt handling. */ - .macro irq_handler - ldr_l x1, handle_arch_irq + .macro irq_handler, handler:req + ldr_l x1, \handler mov x0, sp irq_stack_entry blr x1 @@ -504,6 +504,45 @@ alternative_endif #endif .endm + .macro el1_interrupt_handler, handler:req + gic_prio_irq_setup pmr=x20, tmp=x1 + enable_da_f + + mov x0, sp + bl enter_el1_irq_or_nmi + + irq_handler \handler + +#ifdef CONFIG_PREEMPTION + ldr x24, [tsk, #TSK_TI_PREEMPT] // get preempt count +alternative_if ARM64_HAS_IRQ_PRIO_MASKING + /* + * DA_F were cleared at start of handling. If anything is set in DAIF, + * we come back from an NMI, so skip preemption + */ + mrs x0, daif + orr x24, x24, x0 +alternative_else_nop_endif + cbnz x24, 1f // preempt count != 0 || NMI return path + bl arm64_preempt_schedule_irq // irq en/disable is done inside +1: +#endif + + mov x0, sp + bl exit_el1_irq_or_nmi + .endm + + .macro el0_interrupt_handler, handler:req + gic_prio_irq_setup pmr=x20, tmp=x0 + user_exit_irqoff + enable_da_f + + tbz x22, #55, 1f + bl do_el0_irq_bp_hardening +1: + irq_handler \handler + .endm + .text /* @@ -633,32 +672,7 @@ SYM_CODE_END(el1_sync) .align 6 SYM_CODE_START_LOCAL_NOALIGN(el1_irq) kernel_entry 1 - gic_prio_irq_setup pmr=x20, tmp=x1 - enable_da_f - - mov x0, sp - bl enter_el1_irq_or_nmi - - irq_handler - -#ifdef CONFIG_PREEMPTION - ldr x24, [tsk, #TSK_TI_PREEMPT] // get preempt count -alternative_if ARM64_HAS_IRQ_PRIO_MASKING - /* - * DA_F were cleared at start of handling. If anything is set in DAIF, - * we come back from an NMI, so skip preemption - */ - mrs x0, daif - orr x24, x24, x0 -alternative_else_nop_endif - cbnz x24, 1f // preempt count != 0 || NMI return path - bl arm64_preempt_schedule_irq // irq en/disable is done inside -1: -#endif - - mov x0, sp - bl exit_el1_irq_or_nmi - + el1_interrupt_handler handle_arch_irq kernel_exit 1 SYM_CODE_END(el1_irq) @@ -698,15 +712,7 @@ SYM_CODE_END(el0_error_compat) SYM_CODE_START_LOCAL_NOALIGN(el0_irq) kernel_entry 0 el0_irq_naked: - gic_prio_irq_setup pmr=x20, tmp=x0 - user_exit_irqoff - enable_da_f - - tbz x22, #55, 1f - bl do_el0_irq_bp_hardening -1: - irq_handler - + el0_interrupt_handler handle_arch_irq b ret_to_user SYM_CODE_END(el0_irq) -- 2.30.2