Received: by 2002:a05:6a10:206:0:0:0:0 with SMTP id 6csp378049pxj; Tue, 18 May 2021 05:34:20 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwa2Qjfnt/u6OMeu7QAyOQWvzULH2sqQyxDhISe0KZjduiArV1PgxVJURnASj6FSrcdbH/G X-Received: by 2002:aa7:c718:: with SMTP id i24mr6647823edq.43.1621341260673; Tue, 18 May 2021 05:34:20 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1621341260; cv=none; d=google.com; s=arc-20160816; b=Q3UMsq4XKFEnShk3BMmyQNkYQkNBh1Pl2YAkUsalV/jpiSAxMWz1UsY6Dl77sydA/A HNMP8E+H9uSaa/knR5q5lrDqI5zG45m16PHwvcT5vKVR0ohvFtDOQJPMp2hT63UGLECq Lvh5OxINl76KmId40WoaYw+AYAMa2UsGzgOzx1lOnKHy7LI0HAR2kzvH47WASSp7DFd7 77n0987N8h2i4u01lwGaslFRX32AK6KpP6ka/jqqUUSXXkKYikW1Y/LKK4eVQ31wCEgQ WwRY4YL0KNpLPcHNYRCWzK5yffWim116Ip+n1mYqtpT51rd81j0nu2Nr8JjaXMu5LynH 2yvg== 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=W+nmg/HiP3XIk6l5X8ojjAT8791wTSWw+331YuseJfw=; b=xsgz5mc+gUE2tMtqRQWZNtQavcJf+WNzDNdcvsAi2rplpvXASkCz2WGgpmk/x/qETl 3PwLOwkMkO2d7s8wRTiXxBGIobe3poHFLoiFVZaXAqEU46U0mshnJGmuT5ymt05sGxD4 ci6h9RZTr8XpLbipoEL/W4EvFsart7EZk7qiqYxYizv4VYtqTujM7OdAX1GfdNsPJASS BW074JbNEWU2xypf/YI8Yr+pJ2Kipu4MCQQtgRG7Sh1fSstBjv4W/CGRJ/VVgSahsU7z tSt6yTUkcl3hM735Q+vLvgrIKv4NmemjXlRryFYTVRuXcix8B9NbFqqX2rr71eBJKTys PAGw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=pWqBm35Q; 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 m11si3887195edc.201.2021.05.18.05.33.57; Tue, 18 May 2021 05:34:20 -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=pWqBm35Q; 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 S244515AbhEQPbd (ORCPT + 99 others); Mon, 17 May 2021 11:31:33 -0400 Received: from mail.kernel.org ([198.145.29.99]:56030 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S242887AbhEQPQi (ORCPT ); Mon, 17 May 2021 11:16:38 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 74F386190A; Mon, 17 May 2021 14:33:00 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1621261980; bh=MFTrq0pgtW/5OfDwTcaQIhMYGXz32QqzKOIC6CTuCTA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=pWqBm35QeXx5qs6pnaijT9tRfw4Bm7z595cvmw5Y0QJHSjKACizOT+WTR2NCOt8RB xcwvnVq2ZWiBgPsq6mPh6OBSy4Ump4DJr1T1n0ucP6WWM4g0Z6RrgBc2Mq4n7VWFOH g4Przvy7VQ56OJV4NOMFoQ+tF5o5Nj3GlVdd8+RM= 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.11 199/329] arm64: entry: factor irq triage logic into macros Date: Mon, 17 May 2021 16:01:50 +0200 Message-Id: <20210517140308.855389232@linuxfoundation.org> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210517140302.043055203@linuxfoundation.org> References: <20210517140302.043055203@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 14d5119489fe..9ce041e1078a 100644 --- a/arch/arm64/kernel/entry.S +++ b/arch/arm64/kernel/entry.S @@ -493,8 +493,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 @@ -533,6 +533,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 /* @@ -662,32 +701,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) @@ -727,15 +741,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