aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinas Vepstas <linas@linas.org>2005-11-03 19:51:31 -0500
committerPaul Mackerras <paulus@samba.org>2006-01-08 22:51:05 -0500
commite2a296eeaa344450196e910a136ab14119d7ae48 (patch)
tree53a9fd6374d1559dec29d909fae1902a305472ad
parent74761bb53df1e2d603937b6abbd8437b03840e38 (diff)
[PATCH] powerpc: PCI hotplug common code elimination
20-rpaphp-eeh-cleanup.patch This patch move some code from the rpaphp directory, to the powerpc directory, where it should have been all along (Among other things, I need it in the powerpc directory for the PCI error recovery.) Please note that patch affects TWO maintainers: Paul, after applying the powerpc part, please ask that GregKH appli the PCI part. It is safe to have the powerpc part go in first. It would be bad to have the PCI part go in first. Signed-off-by: Linas Vepstas <linas@austin.ibm.com> Signed-off-by: Paul Mackerras <paulus@samba.org>
-rw-r--r--arch/powerpc/platforms/pseries/eeh.c26
-rw-r--r--include/asm-powerpc/eeh.h10
2 files changed, 36 insertions, 0 deletions
diff --git a/arch/powerpc/platforms/pseries/eeh.c b/arch/powerpc/platforms/pseries/eeh.c
index c8d2a40dc5b4..7fbfd16d72b7 100644
--- a/arch/powerpc/platforms/pseries/eeh.c
+++ b/arch/powerpc/platforms/pseries/eeh.c
@@ -1093,6 +1093,15 @@ void eeh_add_device_early(struct device_node *dn)
1093} 1093}
1094EXPORT_SYMBOL_GPL(eeh_add_device_early); 1094EXPORT_SYMBOL_GPL(eeh_add_device_early);
1095 1095
1096void eeh_add_device_tree_early(struct device_node *dn)
1097{
1098 struct device_node *sib;
1099 for (sib = dn->child; sib; sib = sib->sibling)
1100 eeh_add_device_tree_early(sib);
1101 eeh_add_device_early(dn);
1102}
1103EXPORT_SYMBOL_GPL(eeh_add_device_tree_early);
1104
1096/** 1105/**
1097 * eeh_add_device_late - perform EEH initialization for the indicated pci device 1106 * eeh_add_device_late - perform EEH initialization for the indicated pci device
1098 * @dev: pci device for which to set up EEH 1107 * @dev: pci device for which to set up EEH
@@ -1147,6 +1156,23 @@ void eeh_remove_device(struct pci_dev *dev)
1147} 1156}
1148EXPORT_SYMBOL_GPL(eeh_remove_device); 1157EXPORT_SYMBOL_GPL(eeh_remove_device);
1149 1158
1159void eeh_remove_bus_device(struct pci_dev *dev)
1160{
1161 eeh_remove_device(dev);
1162 if (dev->hdr_type == PCI_HEADER_TYPE_BRIDGE) {
1163 struct pci_bus *bus = dev->subordinate;
1164 struct list_head *ln;
1165 if (!bus)
1166 return;
1167 for (ln = bus->devices.next; ln != &bus->devices; ln = ln->next) {
1168 struct pci_dev *pdev = pci_dev_b(ln);
1169 if (pdev)
1170 eeh_remove_bus_device(pdev);
1171 }
1172 }
1173}
1174EXPORT_SYMBOL_GPL(eeh_remove_bus_device);
1175
1150static int proc_eeh_show(struct seq_file *m, void *v) 1176static int proc_eeh_show(struct seq_file *m, void *v)
1151{ 1177{
1152 unsigned int cpu; 1178 unsigned int cpu;
diff --git a/include/asm-powerpc/eeh.h b/include/asm-powerpc/eeh.h
index f8633aafe4ba..e4ca35ad3338 100644
--- a/include/asm-powerpc/eeh.h
+++ b/include/asm-powerpc/eeh.h
@@ -57,6 +57,7 @@ void __init pci_addr_cache_build(void);
57 * to finish the eeh setup for this device. 57 * to finish the eeh setup for this device.
58 */ 58 */
59void eeh_add_device_early(struct device_node *); 59void eeh_add_device_early(struct device_node *);
60void eeh_add_device_tree_early(struct device_node *);
60void eeh_add_device_late(struct pci_dev *); 61void eeh_add_device_late(struct pci_dev *);
61 62
62/** 63/**
@@ -72,6 +73,15 @@ void eeh_add_device_late(struct pci_dev *);
72void eeh_remove_device(struct pci_dev *); 73void eeh_remove_device(struct pci_dev *);
73 74
74/** 75/**
76 * eeh_remove_device_recursive - undo EEH for device & children.
77 * @dev: pci device to be removed
78 *
79 * As above, this removes the device; it also removes child
80 * pci devices as well.
81 */
82void eeh_remove_bus_device(struct pci_dev *);
83
84/**
75 * EEH_POSSIBLE_ERROR() -- test for possible MMIO failure. 85 * EEH_POSSIBLE_ERROR() -- test for possible MMIO failure.
76 * 86 *
77 * If this macro yields TRUE, the caller relays to eeh_check_failure() 87 * If this macro yields TRUE, the caller relays to eeh_check_failure()