From patchwork Tue May 14 16:51:53 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jiang Liu X-Patchwork-Id: 2568021 X-Patchwork-Delegate: bhelgaas@google.com Return-Path: X-Original-To: patchwork-linux-pci@patchwork.kernel.org Delivered-To: patchwork-process-083081@patchwork1.kernel.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by patchwork1.kernel.org (Postfix) with ESMTP id 1A5253FC5A for ; Tue, 14 May 2013 16:55:54 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757781Ab3ENQxL (ORCPT ); Tue, 14 May 2013 12:53:11 -0400 Received: from mail-da0-f48.google.com ([209.85.210.48]:39434 "EHLO mail-da0-f48.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1757610Ab3ENQxJ (ORCPT ); Tue, 14 May 2013 12:53:09 -0400 Received: by mail-da0-f48.google.com with SMTP id h32so415830dak.7 for ; Tue, 14 May 2013 09:53:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=x-received:from:to:cc:subject:date:message-id:x-mailer:in-reply-to :references; bh=RJhWoPPh0A9MwaZnx6EPxKvM2xaKjJcIlP3aIH5nngw=; b=zh8QdXfsrNy5Plf97Gymf1edzSa3WVuBvCSmfNl0vprmA5cldxXy7kLz97fr+AGHm6 cvsggh+waAdDcONK01kamkwK2Fjv6O9orGQmS+H/BpzNGpEzNgvUK4VfdCIfwUJJD4oK 3axfj5Mwp/AVLpU4zgqOpjig4nZgAB0btHv78f78653NVoRI6umpU+l9XZqufaty5R63 u4n00VAbkB6epNCkLmq25/oPYp+cV5d8DHU11Usvo4cE5YKyDV89LU9ZG204KJg56/sU ftY6+CT1mxG+BIM1jSPgicHs7QFVGNhL7iSJezmNJhf1k+DldeS9OYluVZlts3BHQQrK Bk+Q== X-Received: by 10.68.171.36 with SMTP id ar4mr7411942pbc.195.1368550389117; Tue, 14 May 2013 09:53:09 -0700 (PDT) Received: from localhost.localdomain ([120.196.98.100]) by mx.google.com with ESMTPSA id v5sm18919924pbz.4.2013.05.14.09.53.03 for (version=TLSv1.1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Tue, 14 May 2013 09:53:08 -0700 (PDT) From: Jiang Liu To: Bjorn Helgaas , Yinghai Lu Cc: Jiang Liu , "Rafael J . Wysocki" , Greg Kroah-Hartman , Gu Zheng , Toshi Kani , Myron Stowe , Yijing Wang , Jiang Liu , linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org, Benjamin Herrenschmidt , Paul Mackerras , Gavin Shan , Grant Likely , Bill Pemberton , linuxppc-dev@lists.ozlabs.org Subject: [RFC PATCH v2, part 2 09/18] PCI, PPC: use hotplug-safe iterators to walk PCI buses Date: Wed, 15 May 2013 00:51:53 +0800 Message-Id: <1368550322-1045-9-git-send-email-jiang.liu@huawei.com> X-Mailer: git-send-email 1.8.1.2 In-Reply-To: <1368550322-1045-1-git-send-email-jiang.liu@huawei.com> References: <1368550322-1045-1-git-send-email-jiang.liu@huawei.com> Sender: linux-pci-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pci@vger.kernel.org Enhance PPC architecture specific code to use hotplug-safe iterators to walk PCI buses. Signed-off-by: Jiang Liu Cc: Benjamin Herrenschmidt Cc: Paul Mackerras Bjorn Helgaas Cc: Gavin Shan Cc: Greg Kroah-Hartman Cc: Grant Likely Cc: Bill Pemberton Cc: Yinghai Lu Cc: linuxppc-dev@lists.ozlabs.org Cc: linux-kernel@vger.kernel.org --- arch/powerpc/kernel/pci-common.c | 4 ++-- arch/powerpc/kernel/pci_64.c | 13 +++++-------- 2 files changed, 7 insertions(+), 10 deletions(-) diff --git a/arch/powerpc/kernel/pci-common.c b/arch/powerpc/kernel/pci-common.c index fa12ae4..26fca09 100644 --- a/arch/powerpc/kernel/pci-common.c +++ b/arch/powerpc/kernel/pci-common.c @@ -1400,7 +1400,7 @@ void __init pcibios_resource_survey(void) struct pci_bus *b; /* Allocate and assign resources */ - list_for_each_entry(b, &pci_root_buses, node) + for_each_pci_root_bus(b) pcibios_allocate_bus_resources(b); pcibios_allocate_resources(0); pcibios_allocate_resources(1); @@ -1410,7 +1410,7 @@ void __init pcibios_resource_survey(void) * bus available resources to avoid allocating things on top of them */ if (!pci_has_flag(PCI_PROBE_ONLY)) { - list_for_each_entry(b, &pci_root_buses, node) + for_each_pci_root_bus(b) pcibios_reserve_legacy_regions(b); } diff --git a/arch/powerpc/kernel/pci_64.c b/arch/powerpc/kernel/pci_64.c index 51a133a..a41c6dd 100644 --- a/arch/powerpc/kernel/pci_64.c +++ b/arch/powerpc/kernel/pci_64.c @@ -208,7 +208,6 @@ long sys_pciconfig_iobase(long which, unsigned long in_bus, unsigned long in_devfn) { struct pci_controller* hose; - struct list_head *ln; struct pci_bus *bus = NULL; struct device_node *hose_node; @@ -229,18 +228,16 @@ long sys_pciconfig_iobase(long which, unsigned long in_bus, /* That syscall isn't quite compatible with PCI domains, but it's * used on pre-domains setup. We return the first match */ - - for (ln = pci_root_buses.next; ln != &pci_root_buses; ln = ln->next) { - bus = pci_bus_b(ln); - if (in_bus >= bus->number && in_bus <= bus->busn_res.end) + for_each_pci_root_bus(bus) + if (in_bus >= bus->number && in_bus <= bus->busn_res.end && + bus->dev.of_node) break; - bus = NULL; - } - if (bus == NULL || bus->dev.of_node == NULL) + if (bus == NULL) return -ENODEV; hose_node = bus->dev.of_node; hose = PCI_DN(hose_node)->phb; + pci_bus_put(bus); switch (which) { case IOBASE_BRIDGE_NUMBER: