From patchwork Fri May 17 09:55:47 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yijing Wang X-Patchwork-Id: 2581821 X-Patchwork-Delegate: bhelgaas@google.com Return-Path: X-Original-To: patchwork-linux-pci@patchwork.kernel.org Delivered-To: patchwork-process-083081@patchwork2.kernel.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by patchwork2.kernel.org (Postfix) with ESMTP id 8B2FBDF215 for ; Fri, 17 May 2013 09:57:16 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754492Ab3EQJ5P (ORCPT ); Fri, 17 May 2013 05:57:15 -0400 Received: from szxga02-in.huawei.com ([119.145.14.65]:49193 "EHLO szxga02-in.huawei.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753181Ab3EQJ5N (ORCPT ); Fri, 17 May 2013 05:57:13 -0400 Received: from 172.24.2.119 (EHLO szxeml210-edg.china.huawei.com) ([172.24.2.119]) by szxrg02-dlp.huawei.com (MOS 4.3.4-GA FastPath queued) with ESMTP id BBS36338; Fri, 17 May 2013 17:57:09 +0800 (CST) Received: from SZXEML419-HUB.china.huawei.com (10.82.67.158) by szxeml210-edg.china.huawei.com (172.24.2.183) with Microsoft SMTP Server (TLS) id 14.1.323.7; Fri, 17 May 2013 17:56:28 +0800 Received: from localhost (10.135.76.69) by szxeml419-hub.china.huawei.com (10.82.67.158) with Microsoft SMTP Server id 14.1.323.7; Fri, 17 May 2013 17:56:09 +0800 From: Yijing Wang To: Bjorn Helgaas CC: , Hanjun Guo , , Yijing Wang , Tony Luck , Fenghua Yu , Yinghai Lu , Greg Kroah-Hartman , Subject: [PATCH -v2 4/7] PCI/IA64: Allocate pci_root_info instead of using stack Date: Fri, 17 May 2013 17:55:47 +0800 Message-ID: <1368784550-18332-5-git-send-email-wangyijing@huawei.com> X-Mailer: git-send-email 1.7.11.msysgit.1 In-Reply-To: <1368784550-18332-1-git-send-email-wangyijing@huawei.com> References: <1368784550-18332-1-git-send-email-wangyijing@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.135.76.69] X-CFilter-Loop: Reflected Sender: linux-pci-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pci@vger.kernel.org We need to pass around info for release function. Signed-off-by: Yijing Wang Signed-off-by: Jiang Liu Cc: Tony Luck Cc: Fenghua Yu Cc: Yinghai Lu Cc: Greg Kroah-Hartman Cc: linux-ia64@vger.kernel.org --- arch/ia64/pci/pci.c | 59 ++++++++++++++++++++++++++++++-------------------- 1 files changed, 35 insertions(+), 24 deletions(-) diff --git a/arch/ia64/pci/pci.c b/arch/ia64/pci/pci.c index d7681c6..1f2779d 100644 --- a/arch/ia64/pci/pci.c +++ b/arch/ia64/pci/pci.c @@ -322,7 +322,8 @@ struct pci_bus *pci_acpi_scan_root(struct acpi_pci_root *root) int domain = root->segment; int bus = root->secondary.start; struct pci_controller *controller; - struct pci_root_info info; + struct pci_root_info *info = NULL; + int busnum = root->secondary.start; struct pci_bus *pbus; char *name; int pxm; @@ -339,35 +340,42 @@ struct pci_bus *pci_acpi_scan_root(struct acpi_pci_root *root) controller->node = pxm_to_node(pxm); #endif - INIT_LIST_HEAD(&info.resources); + info = kzalloc(sizeof(*info), GFP_KERNEL); + if (!info) { + printk(KERN_WARNING "pci_bus %04x:%02x: " + "ignored (out of memory)\n", root->segment, busnum); + goto out2; + } + + INIT_LIST_HEAD(&info->resources); /* insert busn resource at first */ - pci_add_resource(&info.resources, &root->secondary); + pci_add_resource(&info->resources, &root->secondary); acpi_walk_resources(device->handle, METHOD_NAME__CRS, count_window, - &info.res_num); - if (info.res_num) { - info.res = - kzalloc_node(sizeof(*info.res) * info.res_num, + &info->res_num); + if (info->res_num) { + info->res = + kzalloc_node(sizeof(*info->res) * info->res_num, GFP_KERNEL, controller->node); - if (!info.res) - goto out2; - - info.res_offset = - kzalloc_node(sizeof(*info.res_offset) * info.res_num, - GFP_KERNEL, controller->node); - if (!info.res_offset) + if (!info->res) goto out3; + + info->res_offset = + kzalloc_node(sizeof(*info->res_offset) * info->res_num, + GFP_KERNEL, controller->node); + if (!info->res_offset) + goto out4; name = kmalloc(16, GFP_KERNEL); if (!name) - goto out4; + goto out5; sprintf(name, "PCI Bus %04x:%02x", domain, bus); - info.bridge = device; - info.controller = controller; - info.name = name; - info.res_num = 0; + info->bridge = device; + info->controller = controller; + info->name = name; + info->res_num = 0; acpi_walk_resources(device->handle, METHOD_NAME__CRS, - add_window, &info); + add_window, info); } /* * See arch/x86/pci/acpi.c. @@ -376,18 +384,21 @@ struct pci_bus *pci_acpi_scan_root(struct acpi_pci_root *root) * such quirk. So we just ignore the case now. */ pbus = pci_create_root_bus(NULL, bus, &pci_root_ops, controller, - &info.resources); + &info->resources); if (!pbus) { - pci_free_resource_list(&info.resources); + pci_free_resource_list(&info->resources); return NULL; } pci_scan_child_bus(pbus); return pbus; + +out5: + kfree(info->res_offset); out4: - kfree(info.res_offset); + kfree(info->res); out3: - kfree(info.res); + kfree(info); out2: kfree(controller); out1: