Commit fae337c7 authored by Paul Mackerras's avatar Paul Mackerras Committed by Linus Torvalds

[PATCH] ppc64: use struct list_head for hose_list

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: default avatarJohn Rose <johnrose@austin.ibm.com>
Signed-off-by: default avatarPaul Mackerras <paulus@samba.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent d613adcd
...@@ -90,7 +90,7 @@ static void tce_free_pSeries(struct iommu_table *tbl, long index, long npages) ...@@ -90,7 +90,7 @@ static void tce_free_pSeries(struct iommu_table *tbl, long index, long npages)
static void iommu_buses_init(void) static void iommu_buses_init(void)
{ {
struct pci_controller* phb; struct pci_controller *phb, *tmp;
struct device_node *dn, *first_dn; struct device_node *dn, *first_dn;
int num_slots, num_slots_ilog2; int num_slots, num_slots_ilog2;
int first_phb = 1; int first_phb = 1;
...@@ -109,7 +109,7 @@ static void iommu_buses_init(void) ...@@ -109,7 +109,7 @@ static void iommu_buses_init(void)
/* 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; first_dn = ((struct device_node *)phb->arch_data)->child;
/* Carve 2GB into the largest dma_window_size possible */ /* Carve 2GB into the largest dma_window_size possible */
......
...@@ -729,9 +729,9 @@ EXPORT_SYMBOL(remap_bus_range); ...@@ -729,9 +729,9 @@ EXPORT_SYMBOL(remap_bus_range);
static void phbs_fixup_io(void) 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); remap_bus_range(hose->bus);
} }
...@@ -764,8 +764,8 @@ struct pci_controller* ...@@ -764,8 +764,8 @@ struct pci_controller*
pci_find_hose_for_OF_device(struct device_node *node) pci_find_hose_for_OF_device(struct device_node *node)
{ {
while (node) { while (node) {
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)
if (hose->arch_data == node) if (hose->arch_data == node)
return hose; return hose;
node=node->parent; node=node->parent;
......
...@@ -23,6 +23,7 @@ ...@@ -23,6 +23,7 @@
#include <linux/bootmem.h> #include <linux/bootmem.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/mm.h> #include <linux/mm.h>
#include <linux/list.h>
#include <asm/processor.h> #include <asm/processor.h>
#include <asm/io.h> #include <asm/io.h>
...@@ -57,8 +58,7 @@ unsigned long pci_io_base; ...@@ -57,8 +58,7 @@ unsigned long pci_io_base;
void iSeries_pcibios_init(void); void iSeries_pcibios_init(void);
struct pci_controller *hose_head; LIST_HEAD(hose_list);
struct pci_controller **hose_tail = &hose_head;
struct pci_dma_ops pci_dma_ops; struct pci_dma_ops pci_dma_ops;
EXPORT_SYMBOL(pci_dma_ops); EXPORT_SYMBOL(pci_dma_ops);
...@@ -222,8 +222,8 @@ pci_alloc_pci_controller(enum phb_types controller_type) ...@@ -222,8 +222,8 @@ pci_alloc_pci_controller(enum phb_types controller_type)
hose->type = controller_type; hose->type = controller_type;
hose->global_number = global_phb_number++; hose->global_number = global_phb_number++;
*hose_tail = hose; list_add_tail(&hose->list_node, &hose_list);
hose_tail = &hose->next;
return hose; return hose;
} }
...@@ -263,7 +263,7 @@ static void __init pcibios_claim_of_setup(void) ...@@ -263,7 +263,7 @@ static void __init pcibios_claim_of_setup(void)
static int __init pcibios_init(void) static int __init pcibios_init(void)
{ {
struct pci_controller *hose; struct pci_controller *hose, *tmp;
struct pci_bus *bus; struct pci_bus *bus;
#ifdef CONFIG_PPC_ISERIES #ifdef CONFIG_PPC_ISERIES
...@@ -274,7 +274,7 @@ static int __init pcibios_init(void) ...@@ -274,7 +274,7 @@ static int __init pcibios_init(void)
printk("PCI: Probing PCI hardware\n"); printk("PCI: Probing PCI hardware\n");
/* Scan all of the recorded PCI controllers. */ /* 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; hose->last_busno = 0xff;
bus = pci_scan_bus(hose->first_busno, hose->ops, bus = pci_scan_bus(hose->first_busno, hose->ops,
hose->arch_data); hose->arch_data);
......
...@@ -17,9 +17,7 @@ extern unsigned long isa_io_base; ...@@ -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_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* pci_find_hose_for_OF_device(struct device_node* node);
extern struct pci_controller* hose_head; extern struct list_head hose_list;
extern struct pci_controller** hose_tail;
extern int global_phb_number; extern int global_phb_number;
/******************************************************************* /*******************************************************************
......
...@@ -129,10 +129,10 @@ void *traverse_pci_devices(struct device_node *start, traverse_func pre, ...@@ -129,10 +129,10 @@ void *traverse_pci_devices(struct device_node *start, traverse_func pre,
*/ */
static void *traverse_all_pci_devices(traverse_func pre) static void *traverse_all_pci_devices(traverse_func pre)
{ {
struct pci_controller *phb; struct pci_controller *phb, *tmp;
void *ret; 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)) if ((ret = traverse_pci_devices(phb->arch_data, pre, phb))
!= NULL) != NULL)
return ret; return ret;
......
...@@ -672,9 +672,9 @@ void __init pmac_pcibios_fixup(void) ...@@ -672,9 +672,9 @@ void __init pmac_pcibios_fixup(void)
static void __init pmac_fixup_phb_resources(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; unsigned long offset = (unsigned long)hose->io_base_virt - pci_io_base;
hose->io_resource.start += offset; hose->io_resource.start += offset;
hose->io_resource.end += offset; hose->io_resource.end += offset;
......
...@@ -33,9 +33,9 @@ enum phb_types { ...@@ -33,9 +33,9 @@ enum phb_types {
struct pci_controller { struct pci_controller {
char what[8]; /* Eye catcher */ char what[8]; /* Eye catcher */
enum phb_types type; /* Type of hardware */ enum phb_types type; /* Type of hardware */
struct pci_controller *next;
struct pci_bus *bus; struct pci_bus *bus;
void *arch_data; void *arch_data;
struct list_head list_node;
int first_busno; int first_busno;
int last_busno; int last_busno;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment