]> git.hungrycats.org Git - linux/commitdiff
[PATCH] ppc64: use struct list_head for hose_list
authorPaul Mackerras <paulus@samba.org>
Mon, 23 Aug 2004 16:39:00 +0000 (09:39 -0700)
committerLinus Torvalds <torvalds@ppc970.osdl.org>
Mon, 23 Aug 2004 16:39:00 +0000 (09:39 -0700)
This patch changes hose_list from a simple linked list to a
"list.h"-style list.  This is in preparation for the runtime
addition/removal of PCI Host Bridges.

Signed-off-by: John Rose <johnrose@austin.ibm.com>
Signed-off-by: Paul Mackerras <paulus@samba.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
arch/ppc64/kernel/pSeries_iommu.c
arch/ppc64/kernel/pSeries_pci.c
arch/ppc64/kernel/pci.c
arch/ppc64/kernel/pci.h
arch/ppc64/kernel/pci_dn.c
arch/ppc64/kernel/pmac_pci.c
include/asm-ppc64/pci-bridge.h

index 8a5e165d0226843b1295a49d3f483aeb12c5b9a6..4639edfb565460c4b4295257a8383c6534b9971a 100644 (file)
@@ -90,7 +90,7 @@ static void tce_free_pSeries(struct iommu_table *tbl, long index, long npages)
 
 static void iommu_buses_init(void)
 {
-       struct pci_controller* phb;
+       struct pci_controller *phb, *tmp;
        struct device_node *dn, *first_dn;
        int num_slots, num_slots_ilog2;
        int first_phb = 1;
@@ -106,10 +106,10 @@ static void iommu_buses_init(void)
        else
                tcetable_ilog2 = 22;
 
-       /* XXX Should we be using pci_root_buses instead?  -ojn 
+       /* XXX Should we be using pci_root_buses instead?  -ojn
         */
 
-       for (phb=hose_head; phb; phb=phb->next) {
+       list_for_each_entry_safe(phb, tmp, &hose_list, list_node) {
                first_dn = ((struct device_node *)phb->arch_data)->child;
 
                /* Carve 2GB into the largest dma_window_size possible */
index 9a47205b960f529a2ffc4d41c30dbda8a28faad8..a42c90b66127eba47f0f4dd465523a2d03be05ed 100644 (file)
@@ -729,9 +729,9 @@ EXPORT_SYMBOL(remap_bus_range);
 
 static void phbs_fixup_io(void)
 {
-       struct pci_controller *hose;
+       struct pci_controller *hose, *tmp;
 
-       for (hose=hose_head;hose;hose=hose->next) 
+       list_for_each_entry_safe(hose, tmp, &hose_list, list_node)
                remap_bus_range(hose->bus);
 }
 
@@ -764,8 +764,8 @@ struct pci_controller*
 pci_find_hose_for_OF_device(struct device_node *node)
 {
        while (node) {
-               struct pci_controller *hose;
-               for (hose=hose_head;hose;hose=hose->next)
+               struct pci_controller *hose, *tmp;
+               list_for_each_entry_safe(hose, tmp, &hose_list, list_node)
                        if (hose->arch_data == node)
                                return hose;
                node=node->parent;
index 537435329a49fa15f54412d12823310e1e740800..456de1942bd847728545f9e97feffb291e3eb81d 100644 (file)
@@ -23,6 +23,7 @@
 #include <linux/bootmem.h>
 #include <linux/module.h>
 #include <linux/mm.h>
+#include <linux/list.h>
 
 #include <asm/processor.h>
 #include <asm/io.h>
@@ -57,8 +58,7 @@ unsigned long pci_io_base;
 
 void iSeries_pcibios_init(void);
 
-struct pci_controller *hose_head;
-struct pci_controller **hose_tail = &hose_head;
+LIST_HEAD(hose_list);
 
 struct pci_dma_ops pci_dma_ops;
 EXPORT_SYMBOL(pci_dma_ops);
@@ -221,9 +221,9 @@ pci_alloc_pci_controller(enum phb_types controller_type)
                memcpy(hose->what,model,7);
         hose->type = controller_type;
         hose->global_number = global_phb_number++;
-        
-        *hose_tail = hose;
-        hose_tail = &hose->next;
+
+       list_add_tail(&hose->list_node, &hose_list);
+
         return hose;
 }
 
@@ -263,7 +263,7 @@ static void __init pcibios_claim_of_setup(void)
 
 static int __init pcibios_init(void)
 {
-       struct pci_controller *hose;
+       struct pci_controller *hose, *tmp;
        struct pci_bus *bus;
 
 #ifdef CONFIG_PPC_ISERIES
@@ -274,7 +274,7 @@ static int __init pcibios_init(void)
        printk("PCI: Probing PCI hardware\n");
 
        /* Scan all of the recorded PCI controllers.  */
-       for (hose = hose_head; hose; hose = hose->next) {
+       list_for_each_entry_safe(hose, tmp, &hose_list, list_node) {
                hose->last_busno = 0xff;
                bus = pci_scan_bus(hose->first_busno, hose->ops,
                                   hose->arch_data);
index 2ca27ccc77957c5a9b5d35165af6b073e0cd6dcb..9e85ebd483cc153dc30af20efd53d326363a5012 100644 (file)
@@ -17,9 +17,7 @@ extern unsigned long isa_io_base;
 extern struct pci_controller* pci_alloc_pci_controller(enum phb_types controller_type);
 extern struct pci_controller* pci_find_hose_for_OF_device(struct device_node* node);
 
-extern struct pci_controller* hose_head;
-extern struct pci_controller** hose_tail;
-
+extern struct list_head hose_list;
 extern int global_phb_number;
 
 /*******************************************************************
index c771bdc644dfd3ab95cdc8c2bbbb04c2b5599e7c..2ef21d7dae41d12d9d163f67cd1448ee7e01d14b 100644 (file)
@@ -129,10 +129,10 @@ void *traverse_pci_devices(struct device_node *start, traverse_func pre,
  */
 static void *traverse_all_pci_devices(traverse_func pre)
 {
-       struct pci_controller *phb;
+       struct pci_controller *phb, *tmp;
        void *ret;
 
-       for (phb = hose_head; phb; phb = phb->next)
+       list_for_each_entry_safe(phb, tmp, &hose_list, list_node)
                if ((ret = traverse_pci_devices(phb->arch_data, pre, phb))
                                != NULL)
                        return ret;
index e6926c0ea9a816ec141624f994bbae09ed6ba649..ee6dca89646916c018d974f9cae1a13d43993c49 100644 (file)
@@ -672,9 +672,9 @@ void __init pmac_pcibios_fixup(void)
 
 static void __init pmac_fixup_phb_resources(void)
 {
-       struct pci_controller *hose;
+       struct pci_controller *hose, *tmp;
        
-       for (hose = hose_head; hose; hose = hose->next) {
+       list_for_each_entry_safe(hose, tmp, &hose_list, list_node) {
                unsigned long offset = (unsigned long)hose->io_base_virt - pci_io_base;
                hose->io_resource.start += offset;
                hose->io_resource.end += offset;
index acb6aff2ada9505e916c89ddbd2d52c97f9ca747..7453074373593142183dc1ae8968aa9392b0f071 100644 (file)
@@ -33,9 +33,9 @@ enum phb_types {
 struct pci_controller {
        char what[8];                     /* Eye catcher      */
        enum phb_types type;              /* Type of hardware */
-       struct pci_controller *next;
        struct pci_bus *bus;
        void *arch_data;
+       struct list_head list_node;
 
        int first_busno;
        int last_busno;