Received: by 2002:a25:6193:0:0:0:0:0 with SMTP id v141csp485744ybb; Wed, 1 Apr 2020 04:06:56 -0700 (PDT) X-Google-Smtp-Source: APiQypIGRiNqk8phVFYF0WZvirz8+KtmmD0+gQW/FUIUa+0yLGoBuwsUGHmTQL1DVl73OcM0ACAD X-Received: by 2002:a05:6808:605:: with SMTP id y5mr2441801oih.172.1585739216056; Wed, 01 Apr 2020 04:06:56 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1585739216; cv=none; d=google.com; s=arc-20160816; b=C+547IpHUpFihQposMWM9inrXUzmntpZgXMiYWnUgx157VGf9BX3siAuE/iJCjmHLO Q3xsAHXZbXOm02A8NuRqNE2+Xi/xNMcUrgrBoTxEo4p1QHYh8pQ7zTQQwJwbmmSgOPNW aex0dqqMh5mhta72W2Vs87voS++xq6NmMSgNa+v7KC2mcVerawrfs1UBdj80CQxAEoM7 isncfqDxTY21xxxeedgNNa8IOl0uqypq0zJO2tCVLWhe4DcI3kTqY8LnfIWvkkMYV8xe 5XFqO4XOT1WWc4hjoMiIKrxNHhsCDIDc9g7XAMIQY2r8k/LvjcgZ7dcqsGQ486v09bPU DuYA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding :robot-unsubscribe:robot-id:message-id:mime-version:references :in-reply-to:cc:subject:to:reply-to:from:date; bh=VW7sTYwgPQk9szNxjxEUArauJyDZSLh2VIWtjmqKul8=; b=q7Ikvx5zh8XR/lexTuib+MaCKLwQuAm86dYD08uE6YRdaWWmbbDXv7ltEAH8yLoBTw seT73yDnBwbm/H7oJvIh1SOMkxOWH5RWDICUKuFrWaRXbC5ZemOkTcx/7piI50lncNyh FRoro1uaDsMMdP7ZVr4zLyxB59rS7fR2r7i/sSvqWvKn1stHQLV7SepW69lopKTxyPrL 4lgd0OviJ3phW9fqzxAC/5ypPQHmOyihNkSj8lumG/KQv0w0OCla4D1nIHfBNnjsrEEX +snb2Az6PxfSXen5mfHkcVZG6mREko1MNo0BKSjPEg+hUhtcN84Cfbe9m5EN/OdL9Iyz w2AA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id u28si772559otg.14.2020.04.01.04.06.43; Wed, 01 Apr 2020 04:06:56 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1732614AbgDALF5 (ORCPT + 99 others); Wed, 1 Apr 2020 07:05:57 -0400 Received: from Galois.linutronix.de ([193.142.43.55]:34824 "EHLO Galois.linutronix.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1732191AbgDALFz (ORCPT ); Wed, 1 Apr 2020 07:05:55 -0400 Received: from [5.158.153.53] (helo=tip-bot2.lab.linutronix.de) by Galois.linutronix.de with esmtpsa (TLS1.2:DHE_RSA_AES_256_CBC_SHA256:256) (Exim 4.80) (envelope-from ) id 1jJbBt-000862-Lp; Wed, 01 Apr 2020 13:05:49 +0200 Received: from [127.0.1.1] (localhost [IPv6:::1]) by tip-bot2.lab.linutronix.de (Postfix) with ESMTP id 1EC141C0315; Wed, 1 Apr 2020 13:05:49 +0200 (CEST) Date: Wed, 01 Apr 2020 11:05:48 -0000 From: "tip-bot2 for Marc Zyngier" Reply-to: linux-kernel@vger.kernel.org To: linux-tip-commits@vger.kernel.org Subject: [tip: irq/urgent] Revert "irqchip/xilinx: Enable generic irq multi handler" Cc: Stephen Rothwell , Marc Zyngier , x86 , LKML In-Reply-To: <44b64be7-9240-fd52-af90-e0245220f38b@xilinx.com> References: <44b64be7-9240-fd52-af90-e0245220f38b@xilinx.com> MIME-Version: 1.0 Message-ID: <158573914871.28353.6675528184869876699.tip-bot2@tip-bot2> X-Mailer: tip-git-log-daemon Robot-ID: Robot-Unsubscribe: Contact to get blacklisted from these emails Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit X-Linutronix-Spam-Score: -1.0 X-Linutronix-Spam-Level: - X-Linutronix-Spam-Status: No , -1.0 points, 5.0 required, ALL_TRUSTED=-1,SHORTCIRCUIT=-0.0001 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The following commit has been merged into the irq/urgent branch of tip: Commit-ID: 4cea749d56bec9409f3bd126d2b2f949dc6c66e2 Gitweb: https://git.kernel.org/tip/4cea749d56bec9409f3bd126d2b2f949dc6c66e2 Author: Marc Zyngier AuthorDate: Mon, 30 Mar 2020 10:43:59 +01:00 Committer: Marc Zyngier CommitterDate: Wed, 01 Apr 2020 09:12:24 +01:00 Revert "irqchip/xilinx: Enable generic irq multi handler" This reverts commit a0789993bf8266e62fea6b4613945ba081c71e7d, which breaks a number of PPC platforms. Reported-by: Stephen Rothwell Signed-off-by: Marc Zyngier Link: https://lore.kernel.org/r/44b64be7-9240-fd52-af90-e0245220f38b@xilinx.com --- arch/microblaze/Kconfig | 2 +-- arch/microblaze/include/asm/irq.h | 3 +++- arch/microblaze/kernel/irq.c | 21 ++++++++++++++++++- drivers/irqchip/irq-xilinx-intc.c | 34 ++++++++++++------------------ 4 files changed, 37 insertions(+), 23 deletions(-) diff --git a/arch/microblaze/Kconfig b/arch/microblaze/Kconfig index 242f58e..6a331bd 100644 --- a/arch/microblaze/Kconfig +++ b/arch/microblaze/Kconfig @@ -47,8 +47,6 @@ config MICROBLAZE select CPU_NO_EFFICIENT_FFS select MMU_GATHER_NO_RANGE if MMU select SPARSE_IRQ - select GENERIC_IRQ_MULTI_HANDLER - select HANDLE_DOMAIN_IRQ # Endianness selection choice diff --git a/arch/microblaze/include/asm/irq.h b/arch/microblaze/include/asm/irq.h index 5166f08..eac2fb4 100644 --- a/arch/microblaze/include/asm/irq.h +++ b/arch/microblaze/include/asm/irq.h @@ -14,4 +14,7 @@ struct pt_regs; extern void do_IRQ(struct pt_regs *regs); +/* should be defined in each interrupt controller driver */ +extern unsigned int xintc_get_irq(void); + #endif /* _ASM_MICROBLAZE_IRQ_H */ diff --git a/arch/microblaze/kernel/irq.c b/arch/microblaze/kernel/irq.c index 0b37dde..903dad8 100644 --- a/arch/microblaze/kernel/irq.c +++ b/arch/microblaze/kernel/irq.c @@ -20,10 +20,29 @@ #include #include +static u32 concurrent_irq; + void __irq_entry do_IRQ(struct pt_regs *regs) { + unsigned int irq; + struct pt_regs *old_regs = set_irq_regs(regs); trace_hardirqs_off(); - handle_arch_irq(regs); + + irq_enter(); + irq = xintc_get_irq(); +next_irq: + BUG_ON(!irq); + generic_handle_irq(irq); + + irq = xintc_get_irq(); + if (irq != -1U) { + pr_debug("next irq: %d\n", irq); + ++concurrent_irq; + goto next_irq; + } + + irq_exit(); + set_irq_regs(old_regs); trace_hardirqs_on(); } diff --git a/drivers/irqchip/irq-xilinx-intc.c b/drivers/irqchip/irq-xilinx-intc.c index ea74181..1d3d273 100644 --- a/drivers/irqchip/irq-xilinx-intc.c +++ b/drivers/irqchip/irq-xilinx-intc.c @@ -124,6 +124,20 @@ static unsigned int xintc_get_irq_local(struct xintc_irq_chip *irqc) return irq; } +unsigned int xintc_get_irq(void) +{ + unsigned int irq = -1; + u32 hwirq; + + hwirq = xintc_read(primary_intc, IVR); + if (hwirq != -1U) + irq = irq_find_mapping(primary_intc->root_domain, hwirq); + + pr_debug("irq-xilinx: hwirq=%d, irq=%d\n", hwirq, irq); + + return irq; +} + static int xintc_map(struct irq_domain *d, unsigned int irq, irq_hw_number_t hw) { struct xintc_irq_chip *irqc = d->host_data; @@ -163,25 +177,6 @@ static void xil_intc_irq_handler(struct irq_desc *desc) chained_irq_exit(chip, desc); } -static void xil_intc_handle_irq(struct pt_regs *regs) -{ - u32 hwirq; - struct xintc_irq_chip *irqc = primary_intc; - - do { - hwirq = xintc_read(irqc, IVR); - if (likely(hwirq != -1U)) { - int ret; - - ret = handle_domain_irq(irqc->root_domain, hwirq, regs); - WARN_ONCE(ret, "Unhandled HWIRQ %d\n", hwirq); - continue; - } - - break; - } while (1); -} - static int __init xilinx_intc_of_init(struct device_node *intc, struct device_node *parent) { @@ -251,7 +246,6 @@ static int __init xilinx_intc_of_init(struct device_node *intc, } else { primary_intc = irqc; irq_set_default_host(primary_intc->root_domain); - set_handle_irq(xil_intc_handle_irq); } return 0;