From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751935AbeD3FtS (ORCPT ); Mon, 30 Apr 2018 01:49:18 -0400 Received: from goliath.siemens.de ([192.35.17.28]:54617 "EHLO goliath.siemens.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751707AbeD3FtM (ORCPT ); Mon, 30 Apr 2018 01:49:12 -0400 From: Jan Kiszka To: Bjorn Helgaas , Linux Kernel Mailing List , linux-pci@vger.kernel.org, linux-arm-kernel@lists.infradead.org Subject: [PATCH v2 04/10] PCI: Add dev parameter to __of_pci_get_host_bridge_resources() Date: Mon, 30 Apr 2018 07:48:38 +0200 Message-Id: X-Mailer: git-send-email 2.13.6 In-Reply-To: References: In-Reply-To: References: Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Jan Kiszka When non-NULL, use the new dev parameter of __of_pci_get_host_bridge_resources() to allocate the resource data structures via devm_kzalloc. That allows to release them automatically during device destruction. Signed-off-by: Jan Kiszka --- drivers/pci/of.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/drivers/pci/of.c b/drivers/pci/of.c index 375de447a58e..bfa282b538d5 100644 --- a/drivers/pci/of.c +++ b/drivers/pci/of.c @@ -243,7 +243,7 @@ void of_pci_check_probe_only(void) EXPORT_SYMBOL_GPL(of_pci_check_probe_only); #if defined(CONFIG_OF_ADDRESS) -static int __of_pci_get_host_bridge_resources( +static int __of_pci_get_host_bridge_resources(struct device *dev, struct device_node *dev_node, unsigned char busno, unsigned char bus_max, struct list_head *resources, resource_size_t *io_base) @@ -259,7 +259,10 @@ static int __of_pci_get_host_bridge_resources( if (io_base) *io_base = (resource_size_t)OF_BAD_ADDR; - bus_range = kzalloc(sizeof(*bus_range), GFP_KERNEL); + if (dev) + bus_range = devm_kzalloc(dev,sizeof(*bus_range), GFP_KERNEL); + else + bus_range = kzalloc(sizeof(*bus_range), GFP_KERNEL); if (!bus_range) return -ENOMEM; @@ -303,7 +306,11 @@ static int __of_pci_get_host_bridge_resources( if (range.cpu_addr == OF_BAD_ADDR || range.size == 0) continue; - res = kzalloc(sizeof(struct resource), GFP_KERNEL); + if (dev) + res = devm_kzalloc(dev, sizeof(struct resource), + GFP_KERNEL); + else + res = kzalloc(sizeof(struct resource), GFP_KERNEL); if (!res) { err = -ENOMEM; goto parse_failed; @@ -365,7 +372,7 @@ int of_pci_get_host_bridge_resources(struct device_node *dev_node, unsigned char busno, unsigned char bus_max, struct list_head *resources, resource_size_t *io_base) { - return __of_pci_get_host_bridge_resources(dev_node, busno, + return __of_pci_get_host_bridge_resources(NULL, dev_node, busno, bus_max, resources, io_base); } EXPORT_SYMBOL_GPL(of_pci_get_host_bridge_resources); -- 2.13.6 From mboxrd@z Thu Jan 1 00:00:00 1970 From: jan.kiszka@siemens.com (Jan Kiszka) Date: Mon, 30 Apr 2018 07:48:38 +0200 Subject: [PATCH v2 04/10] PCI: Add dev parameter to __of_pci_get_host_bridge_resources() In-Reply-To: References: Message-ID: To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org From: Jan Kiszka When non-NULL, use the new dev parameter of __of_pci_get_host_bridge_resources() to allocate the resource data structures via devm_kzalloc. That allows to release them automatically during device destruction. Signed-off-by: Jan Kiszka --- drivers/pci/of.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/drivers/pci/of.c b/drivers/pci/of.c index 375de447a58e..bfa282b538d5 100644 --- a/drivers/pci/of.c +++ b/drivers/pci/of.c @@ -243,7 +243,7 @@ void of_pci_check_probe_only(void) EXPORT_SYMBOL_GPL(of_pci_check_probe_only); #if defined(CONFIG_OF_ADDRESS) -static int __of_pci_get_host_bridge_resources( +static int __of_pci_get_host_bridge_resources(struct device *dev, struct device_node *dev_node, unsigned char busno, unsigned char bus_max, struct list_head *resources, resource_size_t *io_base) @@ -259,7 +259,10 @@ static int __of_pci_get_host_bridge_resources( if (io_base) *io_base = (resource_size_t)OF_BAD_ADDR; - bus_range = kzalloc(sizeof(*bus_range), GFP_KERNEL); + if (dev) + bus_range = devm_kzalloc(dev,sizeof(*bus_range), GFP_KERNEL); + else + bus_range = kzalloc(sizeof(*bus_range), GFP_KERNEL); if (!bus_range) return -ENOMEM; @@ -303,7 +306,11 @@ static int __of_pci_get_host_bridge_resources( if (range.cpu_addr == OF_BAD_ADDR || range.size == 0) continue; - res = kzalloc(sizeof(struct resource), GFP_KERNEL); + if (dev) + res = devm_kzalloc(dev, sizeof(struct resource), + GFP_KERNEL); + else + res = kzalloc(sizeof(struct resource), GFP_KERNEL); if (!res) { err = -ENOMEM; goto parse_failed; @@ -365,7 +372,7 @@ int of_pci_get_host_bridge_resources(struct device_node *dev_node, unsigned char busno, unsigned char bus_max, struct list_head *resources, resource_size_t *io_base) { - return __of_pci_get_host_bridge_resources(dev_node, busno, + return __of_pci_get_host_bridge_resources(NULL, dev_node, busno, bus_max, resources, io_base); } EXPORT_SYMBOL_GPL(of_pci_get_host_bridge_resources); -- 2.13.6