Received: by 2002:a05:6a10:c604:0:0:0:0 with SMTP id y4csp494132pxt; Thu, 12 Aug 2021 03:22:33 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyuAwpxqVRmwoxt+pzTKuu10gGkLR7tSCeodEXrLzT5dNsQWtYrjqWwYZv1F6Ae4zhM/y7q X-Received: by 2002:a05:6e02:216b:: with SMTP id s11mr2359423ilv.288.1628763753146; Thu, 12 Aug 2021 03:22:33 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1628763753; cv=none; d=google.com; s=arc-20160816; b=aDCEQAgHVXw8jS4FuLVcS6WnaHsn0kwL+zZb2mUuRWmAZaQmXbkf94GQsbklGcGiMo q9KrWW12rWAUOpHirr3lHhIzSnTwhqrlck3mB2niCuRokPjkmlQAvMhOewnvhkM8bn6d K4z6HGRXPhXJLs7mebr4nL1nevYcppVE4z1iyjLW6XR0Xc5U5mCH1KulnXKGW2iNHrTV YmdR5AfdcgJzqmAidppOpKXaAecQ4kyP4yrc5w8/MTfj4Sm3OxKDbh8xk+TiSMFry5OC NUJhsW4nk2rzF0oySyK+ceL3MPbTFY6O+IK1cAZFcDLr8rCT0oTxOHRGZMyUHWzXZmON +4VQ== 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 :message-id:date:subject:cc:to:from:dkim-signature:dkim-signature; bh=SwJEYo/gCeYJ1PODsUSdC0nhKrVM+B8+h8O+pAj/MfY=; b=nh+zXbiMnXDLEdHirv2QtZFoDdhROT9/jpX+Yja39SdEAX6f4VcET30oEUQOrwZE1U dtAG4jyLXu0s7EfTaQAsZadiAlGnj6jLGgFqCrNF7+b6htWDvAhb6ethWcqo209wB39d oqCP/MoFEdsHjDCNvFfXZk39vdJmDm2KGcR59ikQ4AgV09pcFIAvvcDT2eBfUDz8FjpX Jq3KskBdVbize0ZHQ0BU0gOkkbQ+YWZHb6V+DqZonrmAdm6PIBUzR6jWKprOmrLLowsC E75iHOVACyyesk4w6utY3xpkIBKwkf1E3w0qVJlzWGoyH7d1PXsAGOs2DMq99Wo/wrGE wGUQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@svenpeter.dev header.s=fm2 header.b=DnQVGsoz; dkim=pass header.i=@messagingengine.com header.s=fm3 header.b=b9TPXfkM; 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=REJECT sp=REJECT dis=NONE) header.from=svenpeter.dev Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id r17si2476802iln.147.2021.08.12.03.22.22; Thu, 12 Aug 2021 03:22:33 -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=@svenpeter.dev header.s=fm2 header.b=DnQVGsoz; dkim=pass header.i=@messagingengine.com header.s=fm3 header.b=b9TPXfkM; 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=REJECT sp=REJECT dis=NONE) header.from=svenpeter.dev Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235264AbhHLKLD (ORCPT + 99 others); Thu, 12 Aug 2021 06:11:03 -0400 Received: from wout4-smtp.messagingengine.com ([64.147.123.20]:35189 "EHLO wout4-smtp.messagingengine.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234677AbhHLKLC (ORCPT ); Thu, 12 Aug 2021 06:11:02 -0400 Received: from compute5.internal (compute5.nyi.internal [10.202.2.45]) by mailout.west.internal (Postfix) with ESMTP id C235A320079B; Thu, 12 Aug 2021 06:10:36 -0400 (EDT) Received: from mailfrontend1 ([10.202.2.162]) by compute5.internal (MEProxy); Thu, 12 Aug 2021 06:10:37 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=svenpeter.dev; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; s=fm2; bh=SwJEYo/gCeYJ1PODsUSdC0nhKr VM+B8+h8O+pAj/MfY=; b=DnQVGsoz5xG5380WBCtyD2kmRGa9Ucy9JgFJ9TIlJ8 hRpyAvDN+GJFZyp9ezJnZgoTBRjg3eYf9s8LDvVgTtu4EOyPdBJHEmm5cA2si18E g5kLjUN/ogg+RhFWbZLIF0LWB7Npl2FJFKjnyEDyuRRSebVxps8kpg9f4HhF+/RM jENuv3RHIpwK7nRTIN5IPY5U+SmEcWEPusg5bozDUTHsw7A4yUUJ/JDn8bAGWacP k3x/uyniU5QSz33TsZvEHimmqi3/x0hCOJnzb3LNB5GE5lEfM1Cl2CZYFkeZCCix KiVmCHuFSyNPtlkTo3vP9JbT6151vxzbokQKcoeBGE9A== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:date:from :message-id:mime-version:subject:to:x-me-proxy:x-me-proxy :x-me-sender:x-me-sender:x-sasl-enc; s=fm3; bh=SwJEYo/gCeYJ1PODs USdC0nhKrVM+B8+h8O+pAj/MfY=; b=b9TPXfkMSPwfpJ2xtqfIk9eD9GU0ncOiC kTR73NZ5PcPPDOVi2c/SgBXKVYfvV3zNq7yjuvQZpE349oL43AuJWZfBkAQ4ltMK GFNnJnArCZc4T4iQ6CVwMaQ2jt50VPl/lcPUPK8EriZLC9/7XRIXd9CT6whVHJmI sYNEap/rwX+TmqLdrxWyOkWJh0xWQg0r3TRAolyi8O159e6Nwcs+3GwjsbiRkUNO wrLXexFIfSrMPbTzJQx1JDJTnpiHoGQJPArssq+nzw67+4QPJU7ab1cG8/eWrVBM ZhB2NKaYKlKRmHw60CNvKWnHjV4UXIJitxY+NNcfuIh2s+McbQtvw== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvtddrkeefgddvvdcutefuodetggdotefrodftvf curfhrohhfihhlvgemucfhrghsthforghilhdpqfgfvfdpuffrtefokffrpgfnqfghnecu uegrihhlohhuthemuceftddtnecusecvtfgvtghiphhivghnthhsucdlqddutddtmdenuc fjughrpefhvffufffkofgggfestdekredtredttdenucfhrhhomhepufhvvghnucfrvght vghruceoshhvvghnsehsvhgvnhhpvghtvghrrdguvghvqeenucggtffrrghtthgvrhhnpe eugfelkedvtdejffefjeehveelfeevkefgudduhfeghfefgedtheevjeefffffgfenucev lhhushhtvghrufhiiigvpedtnecurfgrrhgrmhepmhgrihhlfhhrohhmpehsvhgvnhessh hvvghnphgvthgvrhdruggvvh X-ME-Proxy: Received: by mail.messagingengine.com (Postfix) with ESMTPA; Thu, 12 Aug 2021 06:10:33 -0400 (EDT) From: Sven Peter To: Hector Martin Cc: Sven Peter , Thomas Gleixner , Marc Zyngier , Will Deacon , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH] irqchip/apple-aic: fix irq_disable from within irq handlers Date: Thu, 12 Aug 2021 12:09:42 +0200 Message-Id: <20210812100942.17206-1-sven@svenpeter.dev> X-Mailer: git-send-email 2.30.1 (Apple Git-130) MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org When disable_irq_nosync for an interrupt is called from within its interrupt handler, this interrupt is only marked as disabled with the intention to mask it when it triggers again. The AIC hardware however automatically masks the interrupt when it is read. aic_irq_eoi then unmasks it again if it's not disabled *and* not masked. This results in a state mismatch between the hardware state and the state kept in irq_data: The hardware interrupt is masked but IRQD_IRQ_MASKED is not set. Any further calls to unmask_irq will directly return and the interrupt can never be enabled again. Fix this by keeping the hardware and irq_data state in sync by unmasking in aic_irq_eoi if and only if the irq_data state also assumes the interrupt to be unmasked. Fixes: 76cde2639411 ("irqchip/apple-aic: Add support for the Apple Interrupt Controller") Signed-off-by: Sven Peter --- drivers/irqchip/irq-apple-aic.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/irqchip/irq-apple-aic.c b/drivers/irqchip/irq-apple-aic.c index b8c06bd8659e..6fc145aacaf0 100644 --- a/drivers/irqchip/irq-apple-aic.c +++ b/drivers/irqchip/irq-apple-aic.c @@ -226,7 +226,7 @@ static void aic_irq_eoi(struct irq_data *d) * Reading the interrupt reason automatically acknowledges and masks * the IRQ, so we just unmask it here if needed. */ - if (!irqd_irq_disabled(d) && !irqd_irq_masked(d)) + if (!irqd_irq_masked(d)) aic_irq_unmask(d); } -- 2.25.1