From mboxrd@z Thu Jan 1 00:00:00 1970 From: Rob Herring Subject: Re: [PATCH v11 08/10] OF: PCI: Add support for parsing PCI host bridge resources from DT Date: Fri, 19 Sep 2014 19:28:38 -0500 Message-ID: <541CCA36.8010606@gmail.com> References: <1411003825-21521-1-git-send-email-Liviu.Dudau@arm.com> <1411003825-21521-9-git-send-email-Liviu.Dudau@arm.com> <20140919210610.GI19374@google.com> Mime-Version: 1.0 Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 8bit Return-path: In-Reply-To: <20140919210610.GI19374@google.com> Sender: linux-arch-owner@vger.kernel.org To: Bjorn Helgaas , Liviu Dudau Cc: Arnd Bergmann , Rob Herring , Jason Gunthorpe , Benjamin Herrenschmidt , Catalin Marinas , Will Deacon , Russell King , linux-pci , Linus Walleij , Tanmay Inamdar , Grant Likely , Sinan Kaya , Jingoo Han , Kukjin Kim , Suravee Suthikulanit , linux-arch , LKML , Device Tree ML , LAKML , Grant Likely List-Id: devicetree@vger.kernel.org On 09/19/2014 04:06 PM, Bjorn Helgaas wrote: > On Thu, Sep 18, 2014 at 02:30:23AM +0100, Liviu Dudau wrote: >> Provide a function to parse the PCI DT ranges that can be used to >> create a pci_host_bridge structure together with its associated >> bus. >> >> Cc: Bjorn Helgaas >> Cc: Arnd Bergmann >> Cc: Grant Likely >> Cc: Rob Herring >> Cc: Catalin Marinas >> Signed-off-by: Liviu Dudau >> --- [...] >> +int of_pci_get_host_bridge_resources(struct device_node *dev, >> + unsigned char busno, unsigned char bus_max, >> + struct list_head *resources, resource_size_t *io_base) >> +{ >> + struct resource *res; >> + struct resource *bus_range; >> + struct of_pci_range range; >> + struct of_pci_range_parser parser; >> + char range_type[4]; >> + int err; >> + >> + if (!io_base) >> + return -EINVAL; >> + *io_base = OF_BAD_ADDR; >> + >> + bus_range = kzalloc(sizeof(*bus_range), GFP_KERNEL); This function does a lot of kalloc's but there is not an easy way to undo those allocations. Hot unplug of a host bridge or probe error handling would leak memory. You could pass in struct device and use the devm_ variant (also addressing Bjorn's comment), but not having an uninit/remove function make what clean-up drivers have to do error prone. For example, on uninit a driver needs to call pci_free_resource_list. Rob