Received: by 2002:a05:6a10:22f:0:0:0:0 with SMTP id 15csp1785375pxk; Tue, 1 Sep 2020 07:46:44 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxIE85uzNHvLAGDaSyWwDkGAC80iMAeu/lUCVmctnlQDT3KDq7UUkKNUmee93R3fT1V6SGj X-Received: by 2002:a17:906:c0ce:: with SMTP id bn14mr1888009ejb.422.1598971604233; Tue, 01 Sep 2020 07:46:44 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1598971604; cv=none; d=google.com; s=arc-20160816; b=PlXitEIX2+1c7pzoGjj3ve+S4dNegYxnKmSU6c2YsQcR7AW2Quwj+48FPm6DBfvMib kE+HELdbzlW0BxwKsiaED9ZQgeq/YX5/LQOXA363qwBLzeTqfqSSczlEw+GfPzr0lJ4l 28T+4yLfv/01iOD1B1dWZ7wh5uOTfDQDIzcEMG5GvfSC+fxsw8xkVNrK9rAiBQKDVrDP CebUVVjNvHZ9cLkCzm/6T4i5jg51zQzw7nk/Q+9T+PuhzKOArbP/XxUuoD5hPWrhjLg7 SAEcqPQrVfYbgD6LxIFldsoZGskEndeMjOM371Gzf5/VjPg/X0vhvNDBB/+RprkkPWGQ 0bZQ== 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:mime-version :message-id:date:subject:cc:to:from:dkim-signature; bh=LiIeYvSH4T5i/+tYPy+e0Zdlx4YmWAnTIBh7REdWbi0=; b=g/eBDahvTuyrjIXPuIuN77dbmaXXEbgCc6kERyuax9QzypZscfqDqoGSv0njTzqj/d yno1i6gHbeGXDCjXB2Pxgj0nfVstXBFtDMTEQlsp7pKPyw6W7gF+6zuGwaM+ypyxmVGk 4ccEaD19wVZTZ5sdScjMrnUVn1q0eE5YmUCEsMJpP3+hsFhkdZcLzIsKxXgTkGvPuy7z dfHRqHXoRkmtBLasOpIEZOQByYBiQUZo8fHo88Fhqh2/8j480A2rQRZYU/izmZoTOQNp hqnGKkm6Ar6CoiOxf0H30T+PIxGYRpt4D5KyP9ZaA+oHUy33t7mJXarDOlUhWl067v2Y 8q8Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=aKYNGwPX; 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=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id b3si707340edn.98.2020.09.01.07.46.20; Tue, 01 Sep 2020 07:46:44 -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=@kernel.org header.s=default header.b=aKYNGwPX; 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=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728622AbgIAOnn (ORCPT + 99 others); Tue, 1 Sep 2020 10:43:43 -0400 Received: from mail.kernel.org ([198.145.29.99]:56764 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728310AbgIAOna (ORCPT ); Tue, 1 Sep 2020 10:43:30 -0400 Received: from disco-boy.misterjones.org (disco-boy.misterjones.org [51.254.78.96]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id D08F4206EB; Tue, 1 Sep 2020 14:43:29 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1598971410; bh=GHG8Q5LGBd/C87oXVQh9+PpSYGYMCoE7jrDiu2FaKCI=; h=From:To:Cc:Subject:Date:From; b=aKYNGwPX5beYzRHU1P28m+loKhvDs9jL8wUyf/QDaLeZK/iFj9NllUfoyVSQdB8ZT 7ZEFTATUtFMGri7nhESL4aljhdXeu1AJYUY+HGpHswdBWeHYBJX31OcihTLhm/EVVC 4M6ZPySIR0NH9bFwUZ5XCbaOs9zWU6vBZl9VNCUA= Received: from 78.163-31-62.static.virginmediabusiness.co.uk ([62.31.163.78] helo=why.lan) by disco-boy.misterjones.org with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1kD7VQ-008IQP-5n; Tue, 01 Sep 2020 15:43:28 +0100 From: Marc Zyngier To: linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Cc: Will Deacon , Catalin Marinas , Russell King , Thomas Gleixner , Jason Cooper , Sumit Garg , Valentin Schneider , Florian Fainelli , Gregory Clement , Andrew Lunn , Saravana Kannan , kernel-team@android.com Subject: [PATCH v3 00/16] arm/arm64: Turning IPIs into normal interrupts Date: Tue, 1 Sep 2020 15:43:08 +0100 Message-Id: <20200901144324.1071694-1-maz@kernel.org> X-Mailer: git-send-email 2.27.0 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SA-Exim-Connect-IP: 62.31.163.78 X-SA-Exim-Rcpt-To: linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, will@kernel.org, catalin.marinas@arm.com, linux@arm.linux.org.uk, tglx@linutronix.de, jason@lakedaemon.net, sumit.garg@linaro.org, Valentin.Schneider@arm.com, f.fainelli@gmail.com, gregory.clement@bootlin.com, andrew@lunn.ch, saravanak@google.com, kernel-team@android.com X-SA-Exim-Mail-From: maz@kernel.org X-SA-Exim-Scanned: No (on disco-boy.misterjones.org); SAEximRunCond expanded to false Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org For as long as SMP ARM has existed, IPIs have been handled as something special. The arch code and the interrupt controller exchange a couple of hooks (one to generate an IPI, another to handle it). Although this is perfectly manageable, it prevents the use of features that we could use if IPIs were Linux IRQs (such as pseudo-NMIs). It also means that each interrupt controller driver has to follow an architecture-specific interface instead of just implementing the base irqchip functionalities. The arch code also duplicates a number of things that the core irq code already does (such as calling set_irq_regs(), irq_enter()...). This series tries to remedy this on arm/arm64 by offering a new registration interface where the irqchip gives the arch code a range of interrupts to use for IPIs. The arch code requests these as normal per-cpu interrupts. The bulk of the work is at the interrupt controller level, where all 5 irqchips used on arm+SMP/arm64 get converted. Finally, we drop the legacy registration interface as well as the custom statistics accounting. Note that I have had a look at providing a "generic" interface by expanding the kernel/irq/ipi.c bag of helpers, but so far all irqchips have very different requirements, so there is hardly anything to consolidate for now. Maybe some as hip04 and the Marvell horror get cleaned up (the latter certainly could do with a good dusting). This has been tested on a bunch of 32 and 64bit guests (GICv2, GICv3), as well as 64bit bare metal (GICv3). The RPi part has only been tested in QEMU as a 64bit guest, while the HiSi and Marvell parts have only been compile-tested. I'm aiming for 5.10 for this, so any comment would be appreciated. * From v2: - Tidied up the arch code (__read_mostly for the IPI handling data, WARN_ON_ONCE on setup and teardown), dropped spurious prototype on 32bit - Prevent IPIs from being forwarded to VCPUs - Merged the GIC affinity fix, hence one less patch - Added RBs from Valentin * From v1: - Clarified the effect of nesting irq_enter/exit (Russell) - Changed the point where we tear IPIs down on (Valentin) - IPIs are no longer accessible from DT - HIP04 and Armada 370-XP have been converted, but are untested - arch-specific kstat accounting is removed - ARM's legacy interface is dropped Marc Zyngier (16): genirq: Add fasteoi IPI flow genirq: Allow interrupts to be excluded from /proc/interrupts arm64: Allow IPIs to be handled as normal interrupts ARM: Allow IPIs to be handled as normal interrupts irqchip/gic-v3: Describe the SGI range irqchip/gic-v3: Configure SGIs as standard interrupts irqchip/gic: Refactor SMP configuration irqchip/gic: Configure SGIs as standard interrupts irqchip/gic-common: Don't enable SGIs by default irqchip/bcm2836: Configure mailbox interrupts as standard interrupts irqchip/hip04: Configure IPIs as standard interrupts irqchip/armada-370-xp: Configure IPIs as standard interrupts arm64: Kill __smp_cross_call and co arm64: Remove custom IRQ stat accounting ARM: Kill __smp_cross_call and co ARM: Remove custom IRQ stat accounting arch/arm/Kconfig | 1 + arch/arm/include/asm/hardirq.h | 17 -- arch/arm/include/asm/smp.h | 5 +- arch/arm/kernel/smp.c | 135 +++++++++----- arch/arm64/Kconfig | 1 + arch/arm64/include/asm/hardirq.h | 9 - arch/arm64/include/asm/irq_work.h | 4 +- arch/arm64/include/asm/smp.h | 6 +- arch/arm64/kernel/smp.c | 121 ++++++++----- drivers/irqchip/irq-armada-370-xp.c | 262 +++++++++++++++++++--------- drivers/irqchip/irq-bcm2836.c | 151 +++++++++++++--- drivers/irqchip/irq-gic-common.c | 3 - drivers/irqchip/irq-gic-v3.c | 104 ++++++----- drivers/irqchip/irq-gic.c | 177 +++++++++++-------- drivers/irqchip/irq-hip04.c | 89 +++++----- include/linux/irq.h | 5 +- kernel/irq/chip.c | 27 +++ kernel/irq/debugfs.c | 1 + kernel/irq/proc.c | 2 +- kernel/irq/settings.h | 7 + 20 files changed, 720 insertions(+), 407 deletions(-) -- 2.27.0