Received: by 2002:ac0:a594:0:0:0:0:0 with SMTP id m20-v6csp1945319imm; Wed, 16 May 2018 05:37:57 -0700 (PDT) X-Google-Smtp-Source: AB8JxZoA/UrCkguBEGBe531cTQFL4FPlZmPVcE/UrielWKAylU3BfVLwfXZqqnEIzIrUlLyQT5Eu X-Received: by 2002:a17:902:6e08:: with SMTP id u8-v6mr813510plk.96.1526474277366; Wed, 16 May 2018 05:37:57 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1526474277; cv=none; d=google.com; s=arc-20160816; b=qk8ZWEaLbAlZibikw1f4NUnMoyooZcuCmooGkkXObP7GLK9edJtXgH4icMDS7aL3Ld DQtuIGyV+4jJFB7VEusColHRQze9mhlLEk9Ph0xfWvDPvEhvYUAi7U8OdSSbzc3t24pC vHbXo5QKF0T23K7W+rgWP+ckopEUKJxgiIqirvIYpB0ljUqxC6OCEuQBi9+DpjOCvgb6 aIGwtxQ/hQ8JWDGu9hHwSeZ6H+eZZ6j9WPLJW2/962+S7xXLke3BNc/m7+brqMg5RlmW uEzx4PEvcoLPfhXmw6eBEwsLWooz22Kp7C5X+09W9oVn+ioRi259kDZZt8JwwN2hRXHk tfkA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding :content-language:in-reply-to:mime-version:user-agent:date :message-id:autocrypt:openpgp:from:references:cc:to:subject :arc-authentication-results; bh=8oaBDQh+7HTalm4zyvKwyJVVbZDymH1VLxK3MHTtZ+w=; b=jq2NCjsWzW1RMCdzv8NeFj7A1LZt/ZBwo80JGrLXKGggHnXNBXRJsT0EsBedtjtIEu XBzHy8c8fdbKe3njHmeUOJbZMqbBGDvpXJYJ7Sl2re7mV+GBejpv1gUjeK25bZ7GPubb V4XRDmk4jmKwRrX37XdcTqhbQL0JcCymz60KS2KFqExrrKumjGE29MoIH9Ps61AxBZHn 0Kg+Db7s3VJpXfPxFutgR1PeGdpIJfByg58cKhVJcN3qoIgTV8fWFkGPwunzC0AH9Y5y dd9PuIqfu/nEiYoaygESfEWaxV7ww1NfNt+fjvHr3TYmdOyAWeB+FNd+oosv+0Yfp48k cQ3Q== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id e11-v6si2017319pgr.423.2018.05.16.05.37.43; Wed, 16 May 2018 05:37:57 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752744AbeEPMfO (ORCPT + 99 others); Wed, 16 May 2018 08:35:14 -0400 Received: from goliath.siemens.de ([192.35.17.28]:36492 "EHLO goliath.siemens.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752417AbeEPMfJ (ORCPT ); Wed, 16 May 2018 08:35:09 -0400 Received: from mail2.siemens.de (mail2.siemens.de [139.25.208.11]) by goliath.siemens.de (8.15.2/8.15.2) with ESMTPS id w4GCW2we008195 (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 16 May 2018 14:32:03 +0200 Received: from [167.87.141.171] ([167.87.141.171]) by mail2.siemens.de (8.15.2/8.15.2) with ESMTP id w4GCVlOE019618; Wed, 16 May 2018 14:31:55 +0200 Subject: [PATCH] PCI: Clean up resource allocation in devm_of_pci_get_host_bridge_resources() To: Bjorn Helgaas , Linux Kernel Mailing List Cc: Andy Shevchenko , linux-pci@vger.kernel.org, linux-arm Mailing List , Vladimir Zapolskiy , Jingoo Han , Joao Pinto , Lorenzo Pieralisi References: <3aeb2ed038cbce8fe744b614dc19d414555a7e8f.1526375226.git.jan.kiszka@siemens.com> From: Jan Kiszka Openpgp: preference=signencrypt Autocrypt: addr=jan.kiszka@siemens.com; prefer-encrypt=mutual; keydata= xsDhBEq0i8QRBAD2wOxlC9m/8t/vqjm1U9yQCT6OJ2Wbv/qys9DYM0CvcOTDMWQwmV1/VsZj KR5YgB5NPt+To7X6x5cjz15AGnx5Fb8Wnrq8EF9ZfHMwb7YMx1LdPYPDnXr37wE3XupFmkHB Mes4htyX7Dz8LvKDLnli4IsAmWG+kV1JI6LWKXLpSwCg8JRq4SWoB4VCQxbH3GjntgvwNc8D /2q5Dj0urJ7s7sdXhrH0hcFkpSFRmU5Yd6MCwcbFHm2paL5gqVjNNUUwDBKAL9eZaQVIHKwC 44BvNGO2gcQ26R3AuCHUQ+pZHg34tok1JCNZ6IEZccb+33Qq0qbcDMJJiDYp7ppp6ozifvc4 YaqJECX48IydxfE9+41oV7T5vNAzA/QL/UMJyTnu5jiOXcyn5iFQw535lXkwKsqeXzCowLho HICZ2jITJPdTT/+9pGWwMQqST/SS35Tx4EnS3z2BWsNMCLuXCPkxF1elaMJqMfMJxFD8rAgS 9GK6zP6fJlsA1wq/UvKSL8v4QPOnTNCVOsyqJVasGV0ZPcDfcj+ClNO4zR5KYW4gS2lzemth IDxqYW4ua2lzemthQHdlYi5kZT7CYwQTEQIAIwIbIwYLCQgHAwIEFQIIAwQWAgMBAh4BAheA BQJOpoNtAhkBAAoJEIrUrG965ecUOPUAoK+Rh12KgCjplHAS0AoiGKwGOuq7AKDEVnBtRAoy VRvp3lOlOx+P2Ay56M7BTQRKtIvEEAgA2/PlX6oyi7dToH0CJCHq0eKmZaa7CmGaVnxyeepK vIfiM8n8Td76AbG64fjREMwgSpb4F/UytF3z/03tj4e49W/zKjbBRB2/wmFRlZBC9crg22Q+ bgvMOsxnC6uHXaWN8fL+jVei/5OoHOoFqaMsX8EvploitlI/BPj+VgW26jksf3YZyk1hncls Z/IYhXzgRmVJo4RiTW/YLQAkwndwc+fKPa/IYLEDW1Jc4kNLoK0P90b45zju0hpl0C00pVOR TOtzFK9G5Ha7qOAWJfAVJORHKAkkvwftf3hkpPdLyvZUWRHXvUexmA61fLvDBAFhRxYGD8t5 gz88SF5Tzq+0ywADBQf/YSkaYrEslPWiCA2wU6EW0yaqBQAobFsOMvsufJ6o2ntq5Ncq37VI 3KCT67eHPE9x+zPcENoZWsRrC9S9PCf1LOsi7ybZsR13AJqDFlRzJZ4klh9QwgwFZxUBzOdI vttwzG1QkzHx06RKZluFYpPF3DRduSMukdIJ2wmWCU+ohB+mYefe65JGjYQfHVs8mgYVFOPx bRea9VJACCMuspoZWpj43UdR1lLLyIUFYz+jqcPW7Hd/GTIw4N67pYl0dwPDmFd4ohJ5g4Zp q61toNysBGEuEm5GCcn0VmGtQpSYnR5cVm5b2yPz4bIuFOSuZUo/l7vitdY0iy0/wvKbBC+N K8JJBBgRAgAJBQJKtIvEAhsMAAoJEIrUrG965ecULvAAoKGvxs5T3IhyQT8I8sMsyAvCE4wH AJ46S16yab+OxNkvOeoOEX0EnHVHaA== Message-ID: Date: Wed, 16 May 2018 14:31:44 +0200 User-Agent: Mozilla/5.0 (X11; U; Linux i686 (x86_64); de; rv:1.8.1.12) Gecko/20080226 SUSE/2.0.0.12-1.1 Thunderbird/2.0.0.12 Mnenhy/0.7.5.666 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Instead of first allocating and then freeing memory for struct resource in case we cannot parse a PCI resource from the device tree, work against a local struct and kmemdup it when we decide to go with it. Suggested-by: Andy Shevchenko Signed-off-by: Jan Kiszka --- drivers/pci/of.c | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/drivers/pci/of.c b/drivers/pci/of.c index b06585a1da75..fc0f906c5c25 100644 --- a/drivers/pci/of.c +++ b/drivers/pci/of.c @@ -266,7 +266,7 @@ int devm_of_pci_get_host_bridge_resources(struct device *dev, struct list_head *resources, resource_size_t *io_base) { struct device_node *dev_node = dev->of_node; - struct resource *res; + struct resource *res, tmp_res; struct resource *bus_range; struct of_pci_range range; struct of_pci_range_parser parser; @@ -320,18 +320,16 @@ int devm_of_pci_get_host_bridge_resources(struct device *dev, if (range.cpu_addr == OF_BAD_ADDR || range.size == 0) continue; - res = devm_kzalloc(dev, sizeof(struct resource), GFP_KERNEL); + err = of_pci_range_to_resource(&range, dev_node, &tmp_res); + if (err) + continue; + + res = devm_kmemdup(dev, &tmp_res, sizeof(tmp_res), GFP_KERNEL); if (!res) { err = -ENOMEM; goto failed; } - err = of_pci_range_to_resource(&range, dev_node, res); - if (err) { - devm_kfree(dev, res); - continue; - } - if (resource_type(res) == IORESOURCE_IO) { if (!io_base) { dev_err(dev, -- 2.13.6