From patchwork Thu Sep 30 13:17:06 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Pingfan Liu X-Patchwork-Id: 12528285 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 mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 41EC9C433EF for ; Thu, 30 Sep 2021 13:22:34 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id 1219461269 for ; Thu, 30 Sep 2021 13:22:34 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org 1219461269 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=lists.infradead.org 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=3AsFlFKHmZMkQHDXK0uEEcAZWOUytFa44/L3ILWViE8=; b=DhkfS5mxypq0RX z0QMRQCBAk4jvmfrDk2OER1AmIFAKwjPMF0tRIHgh+imqhU/Mzcu2YU11VB/sXDvnR+0Z20F8Zccz ldyGkNu+Z0ynYm05G0rVBg1PCXy6bAltynv4ya2PbTvooNYHo2xVcC0n74IdPHEAK/LuHPcNLnaGR my2Yo2XQnDbzCdgF6Zh7AoaZ1FjX54IJXOPj83nxLqCNGJciFOTpQE3scyt+7zU23Fm65SD6WvOSt 8yrEA2R3WK5iuVdy0vW4wC+wjva0p1wQNFQLAjogVNyLAIo54H9lekxqurbUU0B7InxZ0xKoTkmLU VqogykAUQQ2uM2biupAQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1mVvzC-00EQZm-3S; Thu, 30 Sep 2021 13:20:31 +0000 Received: from mail-pf1-x433.google.com ([2607:f8b0:4864:20::433]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1mVvwV-00EPc6-64 for linux-arm-kernel@lists.infradead.org; Thu, 30 Sep 2021 13:17:44 +0000 Received: by mail-pf1-x433.google.com with SMTP id 145so4942257pfz.11 for ; Thu, 30 Sep 2021 06:17:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=1cWLoh4CcvhLIKXy9j6hWHn1puHnoZvSz+6V1tIrhSk=; b=YfKG4IUcpSD7uSwsssV39u5kc8ZC2MbIPeDm8sgud8s3bBX/YRXM6c1vSmbIpj8EBt tnkAw11U4fIHFXVcRjiAKL5Rd3fWPl1ZNgSYGldu4IJ8SzgoGTkrBFT9g4K+QB2C98Fb 4HCZFS4onI3HYrtegYyaJn08syHn+lQqbyaet6e/ErRh4ahKlXYWxC+iMdmgpNBMdzzB a341uFQ0wuv+s0OjYC5suSrjSMULh3MfCHLsfJWFk45031miqQ20k++gAaGUp53/USAG dPCu85eqytFEcoN4Oh8E9fvKiWiP+8dr9ovxiUncvKD9nZNUnjVLe37DhnvQwmDN0/f+ dU6g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=1cWLoh4CcvhLIKXy9j6hWHn1puHnoZvSz+6V1tIrhSk=; b=8CxqIgAietg4r/krhIAgqeIla8QH/egnW13HQHfm2dp8IoJexKJeLiFNu5qc9GZf2R Ts1sue2bpST8PKQ/8BHWh9bnqhuM9O+0Bc9Qqbj5k260ULvJJbDxhNdCIGGGsgm7DGFQ 4NVx5I1GUpHESMVlgzkyaWzF3mKAAzLBxrPZZUxL6jPpaR+JnVnqY1X4hesHbWB7JXFk bA8t6Q57OmXRNpGarZfWQrFpx5vUUSi0OyhqUL9A61rfz2xHqPESXTR2vhOZfss/7ZL2 0aPbAigrIwc5G9RcIYVEATCki5JeuDzJZFz37AqUrYHhAQ+pocmrcMHyyDcECSYmKAyT YM+Q== X-Gm-Message-State: AOAM531dl8RchYnWOJtxUdLP1adK97QLrIZub/XmrUFSYtaqD0F7w5ly et71WI07Bd+eu8vr88x4oVjSXw/kNA== X-Google-Smtp-Source: ABdhPJycB7rq7UJHpu341EboMwpUw/7YqAzCRDLpdyf1azRDx54df25WpeVOis767oN6z24e3R8baQ== X-Received: by 2002:a62:15c3:0:b0:43d:e6be:156a with SMTP id 186-20020a6215c3000000b0043de6be156amr4403272pfv.1.1633007860790; Thu, 30 Sep 2021 06:17:40 -0700 (PDT) Received: from piliu.users.ipa.redhat.com ([209.132.188.80]) by smtp.gmail.com with ESMTPSA id q3sm3083167pgf.18.2021.09.30.06.17.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 30 Sep 2021 06:17:40 -0700 (PDT) From: Pingfan Liu To: linux-arm-kernel@lists.infradead.org Cc: Pingfan Liu , Mark Rutland , "Paul E. McKenney" , Catalin Marinas , Will Deacon , Marc Zyngier , Joey Gouly , Sami Tolvanen , Julien Thierry , Thomas Gleixner , Yuichi Ito , linux-kernel@vger.kernel.org Subject: [PATCHv3 1/3] kernel/irq: make irq_{enter, exit}() in handle_domain_irq() arch optional Date: Thu, 30 Sep 2021 21:17:06 +0800 Message-Id: <20210930131708.35328-2-kernelfans@gmail.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210930131708.35328-1-kernelfans@gmail.com> References: <20210930131708.35328-1-kernelfans@gmail.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210930_061743_274217_59149D18 X-CRM114-Status: GOOD ( 16.04 ) 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: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org When an IRQ is taken, some accounting needs to be performed to enter and exit IRQ context around the IRQ handler. Historically arch code would leave this to the irqchip or core IRQ code, but these days we want this to happen in exception entry code, and architectures such as arm64 do this. Currently handle_domain_irq() performs this entry/exit accounting, and if used on an architecture where the entry code also does this, the entry/exit accounting will be performed twice per IRQ. This is problematic as core RCU code such as rcu_is_cpu_rrupt_from_idle() depends on this happening once per IRQ, and will not detect quescent periods correctly, leading to stall warnings. As irqchip drivers which use handle_domain_irq() need to work on architectures with or without their own entry/exit accounting, this patch makes handle_domain_irq() conditionally perform the entry accounting depending on a new HAVE_ARCH_IRQENTRY Kconfig symbol that architectures can select if they perform this entry accounting themselves. For architectures which do not select the symbol. there should be no functional change as a result of this patch. Signed-off-by: Pingfan Liu Reviewed-by: Mark Rutland Cc: "Paul E. McKenney" Cc: Catalin Marinas Cc: Will Deacon Cc: Marc Zyngier Cc: Joey Gouly Cc: Sami Tolvanen Cc: Julien Thierry Cc: Thomas Gleixner Cc: Yuichi Ito Cc: linux-kernel@vger.kernel.org To: linux-arm-kernel@lists.infradead.org Reviewed-by: Marc Zyngier --- kernel/irq/Kconfig | 3 +++ kernel/irq/irqdesc.c | 4 ++++ 2 files changed, 7 insertions(+) diff --git a/kernel/irq/Kconfig b/kernel/irq/Kconfig index fbc54c2a7f23..defa1db2d664 100644 --- a/kernel/irq/Kconfig +++ b/kernel/irq/Kconfig @@ -100,6 +100,9 @@ config IRQ_MSI_IOMMU config HANDLE_DOMAIN_IRQ bool +config HAVE_ARCH_IRQENTRY + bool + config IRQ_TIMINGS bool diff --git a/kernel/irq/irqdesc.c b/kernel/irq/irqdesc.c index 4e3c29bb603c..fd5dd9d278b5 100644 --- a/kernel/irq/irqdesc.c +++ b/kernel/irq/irqdesc.c @@ -693,7 +693,9 @@ int handle_domain_irq(struct irq_domain *domain, struct irq_desc *desc; int ret = 0; +#ifndef CONFIG_HAVE_ARCH_IRQENTRY irq_enter(); +#endif /* The irqdomain code provides boundary checks */ desc = irq_resolve_mapping(domain, hwirq); @@ -702,7 +704,9 @@ int handle_domain_irq(struct irq_domain *domain, else ret = -EINVAL; +#ifndef CONFIG_HAVE_ARCH_IRQENTRY irq_exit(); +#endif set_irq_regs(old_regs); return ret; }