Received: by 2002:a05:6358:f14:b0:e5:3b68:ec04 with SMTP id b20csp2705916rwj; Mon, 19 Dec 2022 07:55:40 -0800 (PST) X-Google-Smtp-Source: AMrXdXsflDRgLbYvO41NneLOuUUGweDKf4N5sM3IygnFW0JNiPnG3zmo0xRRyw9DMX3zJlg17jxA X-Received: by 2002:a05:6a20:ba81:b0:a8:8714:233b with SMTP id fb1-20020a056a20ba8100b000a88714233bmr11734497pzb.57.1671465340319; Mon, 19 Dec 2022 07:55:40 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1671465340; cv=none; d=google.com; s=arc-20160816; b=xYUQJ29Ab0VbG15Bw9qTXWfHhiVozCPHtVY7dNaCSrkXpu8IJrbAY5oY6qamRxOKs9 NUYK+FQho5EZBX2zSCf6AzQ+dvpolGwuyM/picTTURSHNz+6D5wwEmrcervSbhlfpaF6 qkLV0SYwn0QN+DTv09XVCykkJVztbxc0yh0LVuTbBjXzd1pdijmHkOKrCpAirkxmueKq Huv41/4qLYQ6B4ID6SteExo9CJxYNpgDx/rLIux7+OWKUGjcnd0xc8GfeXKJhJhVPEaU Mir1juFKwI2VuT5WWNRYkEqH26d6K57pIU6QjxlOUi5AdBIBKlud6Gu+7BVaCek83x1N UT0A== 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 :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=CMqRD5y1KwNE68dtSN0+jpInJ/I2HNrwqeLfpSXlN4g=; b=ZPX2vDHmQVA8Yum+HxuDzvxTTDz5KPSJjtye+Eeehx5jLwUPPYNTSFR9t8kcIqL1CD Ht+09LGD8ezOddEDmIXiO6HY9xItQ9EL/3BSBv21X/ZYmzJWMC7L+tCElsJK/Av/yojp Wg2//HHX0tn+bQqrX/v4yYYW7CtHqffPm0xcVcpwgeYOyBr3A6KMJFqecS4N9HJRNS3n M8/1Dw2I+XY5cNyItd5c8P5pntS9y81R98xnYsMkCh5eI7GN/C/wMCpB2Z/TPN/sDQdI zEQKNb2kfeDibkGekML6Pp1ImGv7jmMt3e06i31DVBJqtI8AYxBk4wYOJQH9D5EpDtQs YIPw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@baikalelectronics.ru header.s=post header.b=NR8GHwfw; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=baikalelectronics.ru Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id v135-20020a63618d000000b00478da14e043si11307983pgb.10.2022.12.19.07.55.31; Mon, 19 Dec 2022 07:55:40 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@baikalelectronics.ru header.s=post header.b=NR8GHwfw; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=baikalelectronics.ru Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232225AbiLSOrx (ORCPT + 71 others); Mon, 19 Dec 2022 09:47:53 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46426 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231812AbiLSOrQ (ORCPT ); Mon, 19 Dec 2022 09:47:16 -0500 Received: from post.baikalelectronics.com (post.baikalelectronics.com [213.79.110.86]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 96F0F62C2; Mon, 19 Dec 2022 06:47:03 -0800 (PST) Received: from post.baikalelectronics.com (localhost.localdomain [127.0.0.1]) by post.baikalelectronics.com (Proxmox) with ESMTP id B346BE0EB0; Mon, 19 Dec 2022 17:47:02 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= baikalelectronics.ru; h=cc:cc:content-transfer-encoding :content-type:content-type:date:from:from:in-reply-to:message-id :mime-version:references:reply-to:subject:subject:to:to; s=post; bh=CMqRD5y1KwNE68dtSN0+jpInJ/I2HNrwqeLfpSXlN4g=; b=NR8GHwfwNrZ9 pOzkbpHGVz3FzZvMoCub9u9MYAp5zkv7ed+vOnzKLdc41VqAnNl9GueQXHmT4gZA S2e24mHaoy6VQ8WW+6GswxPGKVxmDmvg2iWSlEbtpcgeIl0atRjH4krOIaFGFbC3 QhlOV1ODixRpHdGrTz1WcdG3OxEIG84= Received: from mail.baikal.int (mail.baikal.int [192.168.51.25]) by post.baikalelectronics.com (Proxmox) with ESMTP id A875AE0E70; Mon, 19 Dec 2022 17:47:02 +0300 (MSK) Received: from localhost (10.8.30.14) by mail (192.168.51.25) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Mon, 19 Dec 2022 17:47:02 +0300 From: Serge Semin To: Gustavo Pimentel , Vinod Koul , Rob Herring , Bjorn Helgaas , Lorenzo Pieralisi , Cai Huoqing , Robin Murphy , Jingoo Han , Frank Li , Manivannan Sadhasivam CC: Serge Semin , Serge Semin , Alexey Malahov , Pavel Parkhomenko , =?UTF-8?q?Krzysztof=20Wilczy=C5=84ski?= , caihuoqing , Yoshihiro Shimoda , , , , Gustavo Pimentel Subject: [PATCH v8 02/26] dmaengine: dw-edma: Release requested IRQs on failure Date: Mon, 19 Dec 2022 17:46:33 +0300 Message-ID: <20221219144658.26620-3-Sergey.Semin@baikalelectronics.ru> X-Mailer: git-send-email 2.38.1 In-Reply-To: <20221219144658.26620-1-Sergey.Semin@baikalelectronics.ru> References: <20221219144658.26620-1-Sergey.Semin@baikalelectronics.ru> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain X-Originating-IP: [10.8.30.14] X-ClientProxiedBy: MAIL.baikal.int (192.168.51.25) To mail (192.168.51.25) X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,SPF_HELO_PASS,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From very beginning of the DW eDMA driver live in the kernel the method dw_edma_irq_request() hasn't been designed quite correct. In case if the request_irq() method fails to initialize the IRQ handler at some point the previously requested IRQs will be left initialized. It's prune to errors up to the system crash. Let's fix that by releasing the previously requested IRQs in the cleanup-on-error path of the dw_edma_irq_request() function. Fixes: e63d79d1ffcd ("dmaengine: Add Synopsys eDMA IP core driver") Signed-off-by: Serge Semin Reviewed-by: Manivannan Sadhasivam Tested-by: Manivannan Sadhasivam Acked-by: Vinod Koul --- Changelog v2: - This is a new patch added in v2 iteration of the series. --- drivers/dma/dw-edma/dw-edma-core.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/drivers/dma/dw-edma/dw-edma-core.c b/drivers/dma/dw-edma/dw-edma-core.c index c54b24ff5206..a8c1bd9c7ae9 100644 --- a/drivers/dma/dw-edma/dw-edma-core.c +++ b/drivers/dma/dw-edma/dw-edma-core.c @@ -893,10 +893,8 @@ static int dw_edma_irq_request(struct dw_edma *dw, dw_edma_interrupt_read, IRQF_SHARED, dw->name, &dw->irq[i]); - if (err) { - dw->nr_irqs = i; - return err; - } + if (err) + goto err_irq_free; if (irq_get_msi_desc(irq)) get_cached_msi_msg(irq, &dw->irq[i].msi); @@ -905,6 +903,14 @@ static int dw_edma_irq_request(struct dw_edma *dw, dw->nr_irqs = i; } + return 0; + +err_irq_free: + for (i--; i >= 0; i--) { + irq = chip->ops->irq_vector(dev, i); + free_irq(irq, &dw->irq[i]); + } + return err; } -- 2.38.1