Received: by 2002:a05:6a10:1d13:0:0:0:0 with SMTP id pp19csp334743pxb; Mon, 16 Aug 2021 06:34:06 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwT50+OdW483lqzrGrQeaAyn25OSv+17IbWNXrpI/u9j07AIxogxDZc2u95i+FaNLS4l97N X-Received: by 2002:a17:906:a382:: with SMTP id k2mr15979745ejz.454.1629120846395; Mon, 16 Aug 2021 06:34:06 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1629120846; cv=none; d=google.com; s=arc-20160816; b=CTvFzkUHnhZ6FU78iI+WPVI28MPOfvafPYpbS27ibhSIVRF914MNsCHhjqxgk7n1pR HgPS2pk8dTKp6wUCNm4PIwDy4v1cz+B1qZXPZRl9yPjfQT7AhtTwe4vssg9Qcr4M80LQ BcGKpInMlMyLfDaDoYZIrlL5NLpc25W03Ipvpb34g1XMjj9rNT8j6qsxjcD6H0djOYMz bZHq8Z/NVS5NlCXDrvLhbuPHai9Rs1spTLmvh3WuX7qPQbUR+ZCPmyGLQ3ZF0llVeWZH nW5IByhhNk7wko53ucHuXkvbLgi/hLrh7KEFra2sP1YDu0B/S6ITcuwc6AdZcWTcZC8Z 2N9Q== 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=q2eh+JsnKpIK2d8OkXn2uMlur30q1DoCp+bdTk0uJR8=; b=gZVeD638InHMt2faZ2w3etF1Qya/m9C52TvV2jTU9ogVXA45jZT39jcJGaM6cJcSw3 YAPYgZukZRb4Q4yvzDCda78N+7AP0TXuSN1B6MXxfXVsapjVEZ14CvKvbJcjq3lmaGIR rFG2EoEXqWGxumeLLFE8vmjDzgw3VgbHNbLmtSix7aC1xHx3iGT9HI2nEWha+svpHSfr GFwYNS1UrEqRTFZx+u2GAWmo8B+MYDoZWpQzKjINemfPjSmW8I5FpEAQXN6LQVir9B4M +5EMV3wcx9hD84NYUS9rxEoNIdKkc0GJqXLlL7aqBG7c8KNdCCqfOeSW5akbfqg5GmGD ILdA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=ckWkZ8Uw; 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 hc11si9944055ejc.728.2021.08.16.06.33.42; Mon, 16 Aug 2021 06:34:06 -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=ckWkZ8Uw; 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 S241768AbhHPNaP (ORCPT + 99 others); Mon, 16 Aug 2021 09:30:15 -0400 Received: from mail.kernel.org ([198.145.29.99]:44438 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240581AbhHPNTy (ORCPT ); Mon, 16 Aug 2021 09:19:54 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 57869632C4; Mon, 16 Aug 2021 13:14:55 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1629119695; bh=/aRrLXqLDMcUluUgltMQKZpyGkiQGMDCHJDo/QvYF1g=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ckWkZ8UwOUOPWsl7b8FVBjlrharLfjkc8PuUC//bwTZuFi4nMe5oMAwxHVltEM+Ky Y6F4d1DRWqflh0k80l6+idVSFOtSJLgA/Ax6yxc5kzOIUZgz0Z2knc4AO383tVlyym 11cFr2hurTUGBrsiCNTRzeF2+7JgtywWA+IPvNeQ= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Bixuan Cui , Thomas Gleixner Subject: [PATCH 5.13 125/151] genirq/msi: Ensure deactivation on teardown Date: Mon, 16 Aug 2021 15:02:35 +0200 Message-Id: <20210816125448.178136472@linuxfoundation.org> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20210816125444.082226187@linuxfoundation.org> References: <20210816125444.082226187@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: Bixuan Cui commit dbbc93576e03fbe24b365fab0e901eb442237a8a upstream. msi_domain_alloc_irqs() invokes irq_domain_activate_irq(), but msi_domain_free_irqs() does not enforce deactivation before tearing down the interrupts. This happens when PCI/MSI interrupts are set up and never used before being torn down again, e.g. in error handling pathes. The only place which cleans that up is the error handling path in msi_domain_alloc_irqs(). Move the cleanup from msi_domain_alloc_irqs() into msi_domain_free_irqs() to cure that. Fixes: f3b0946d629c ("genirq/msi: Make sure PCI MSIs are activated early") Signed-off-by: Bixuan Cui Signed-off-by: Thomas Gleixner Cc: stable@vger.kernel.org Link: https://lore.kernel.org/r/20210518033117.78104-1-cuibixuan@huawei.com Signed-off-by: Greg Kroah-Hartman --- kernel/irq/msi.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) --- a/kernel/irq/msi.c +++ b/kernel/irq/msi.c @@ -476,11 +476,6 @@ skip_activate: return 0; cleanup: - for_each_msi_vector(desc, i, dev) { - irq_data = irq_domain_get_irq_data(domain, i); - if (irqd_is_activated(irq_data)) - irq_domain_deactivate_irq(irq_data); - } msi_domain_free_irqs(domain, dev); return ret; } @@ -505,7 +500,15 @@ int msi_domain_alloc_irqs(struct irq_dom void __msi_domain_free_irqs(struct irq_domain *domain, struct device *dev) { + struct irq_data *irq_data; struct msi_desc *desc; + int i; + + for_each_msi_vector(desc, i, dev) { + irq_data = irq_domain_get_irq_data(domain, i); + if (irqd_is_activated(irq_data)) + irq_domain_deactivate_irq(irq_data); + } for_each_msi_entry(desc, dev) { /*