Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752505AbcLSGT5 (ORCPT ); Mon, 19 Dec 2016 01:19:57 -0500 Received: from smtp10.smtpout.orange.fr ([80.12.242.132]:33125 "EHLO smtp.smtpout.orange.fr" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751021AbcLSGTz (ORCPT ); Mon, 19 Dec 2016 01:19:55 -0500 X-ME-Helo: [127.0.0.1] X-ME-Date: Mon, 19 Dec 2016 07:19:53 +0100 X-ME-IP: 92.140.239.141 To: linus.walleij@linaro.org, baohua@kernel.org Cc: linux-gpio@vger.kernel.org, linux-arm-kernel@lists.infradead.org, "linux-kernel@vger.kernel.org" , kernel-janitors@vger.kernel.org From: Marion & Christophe JAILLET Subject: [RFC] Question about freeing of resource in 'atlas7_pinmux_probe()', in file 'drivers/pinctrl/sirf/pinctrl-atlas7.c' Message-ID: <612eedc5-0f28-7a38-abad-4b9573208875@wanadoo.fr> Date: Mon, 19 Dec 2016 07:19:43 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:45.0) Gecko/20100101 Thunderbird/45.5.1 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit X-Antivirus: avast! (VPS 161218-0, 18/12/2016), Outbound message X-Antivirus-Status: Clean Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1628 Lines: 53 Hi, while playing with coccinelle, a missing 'of_node_put()' triggered in 'atlas7_pinmux_probe()', in file 'drivers/pinctrl/sirf/pinctrl-atlas7.c'. /* The sd3 and sd9 shared all pins, and the function select by * SYS2PCI_SDIO9SEL register */ sys2pci_np = of_find_node_by_name(NULL, "sys2pci"); if (!sys2pci_np) return -EINVAL; ret = of_address_to_resource(sys2pci_np, 0, &res); if (ret) <------------- missing of_node_put(sys2pci_np); return ret; pmx->sys2pci_base = devm_ioremap_resource(&pdev->dev, &res); if (IS_ERR(pmx->sys2pci_base)) { of_node_put(sys2pci_np); <------------- added by commit 151b8c5ba1eb return -ENOMEM; } Looking at the history of this file, I found a recent commit that added another missing of_node_put (see above). Adding missing 'of_node_put()' in error handling paths is fine, but in this particular case, I was wondering if one was not also missing in the normal path? In such a case, I would revert 151b8c5ba1eb and propose something like: /* The sd3 and sd9 shared all pins, and the function select by * SYS2PCI_SDIO9SEL register */ sys2pci_np = of_find_node_by_name(NULL, "sys2pci"); if (!sys2pci_np) return -EINVAL; ret = of_address_to_resource(sys2pci_np, 0, &res); if (ret) { of_node_put(sys2pci_np); return ret; } of_node_put(sys2pci_np); pmx->sys2pci_base = devm_ioremap_resource(&pdev->dev, &res); if (IS_ERR(pmx->sys2pci_base)) return -ENOMEM; Thanks for your comment, best regards, CJ