powerpc: Get iseries to compile with ARCH=powerpc

This moves the Device_List member from struct device_node to
struct pci_dn, which cleans up the device_node and makes the code
a little simpler.

Signed-off-by: Paul Mackerras <paulus@samba.org>
diff --git a/arch/powerpc/platforms/iseries/hvcall.S b/arch/powerpc/platforms/iseries/hvcall.S
index 9901c0e..07ae6ad 100644
--- a/arch/powerpc/platforms/iseries/hvcall.S
+++ b/arch/powerpc/platforms/iseries/hvcall.S
@@ -10,6 +10,7 @@
 
 #include <asm/ppc_asm.h>
 #include <asm/processor.h>
+#include <asm/ptrace.h>		/* XXX for STACK_FRAME_OVERHEAD */
 
 	.text
 
diff --git a/arch/powerpc/platforms/iseries/iommu.c b/arch/powerpc/platforms/iseries/iommu.c
index 9ac735d..e40c50b 100644
--- a/arch/powerpc/platforms/iseries/iommu.c
+++ b/arch/powerpc/platforms/iseries/iommu.c
@@ -89,11 +89,10 @@
  */
 static struct iommu_table *iommu_table_find(struct iommu_table * tbl)
 {
-	struct device_node *dp;
+	struct pci_dn *pdn;
 
-	list_for_each_entry(dp, &iSeries_Global_Device_List, Device_List) {
-		struct iommu_table *it = PCI_DN(dp)->iommu_table;
-
+	list_for_each_entry(pdn, &iSeries_Global_Device_List, Device_List) {
+		struct iommu_table *it = pdn->iommu_table;
 		if ((it != NULL) &&
 		    (it->it_type == TCE_PCI) &&
 		    (it->it_offset == tbl->it_offset) &&
diff --git a/arch/powerpc/platforms/iseries/pci.c b/arch/powerpc/platforms/iseries/pci.c
index 70185de..46879d7 100644
--- a/arch/powerpc/platforms/iseries/pci.c
+++ b/arch/powerpc/platforms/iseries/pci.c
@@ -220,7 +220,7 @@
 		return NULL;
 	}
 	node->data = pdn;
-	list_add_tail(&node->Device_List, &iSeries_Global_Device_List);
+	list_add_tail(&pdn->Device_List, &iSeries_Global_Device_List);
 #if 0
 	pdn->DsaAddr = ((u64)Bus << 48) + ((u64)SubBus << 40) + ((u64)0x10 << 32);
 #endif
@@ -549,15 +549,12 @@
  */
 static struct device_node *find_Device_Node(int bus, int devfn)
 {
-	struct list_head *pos;
+	struct pci_dn *pdn;
 
-	list_for_each(pos, &iSeries_Global_Device_List) {
-		struct device_node *node =
-			list_entry(pos, struct device_node, Device_List);
-
-		if ((bus == ISERIES_BUS(node)) &&
-				(devfn == PCI_DN(node)->devfn))
-			return node;
+	list_for_each_entry(pdn, &iSeries_Global_Device_List, Device_List) {
+		if ((bus == pdn->DsaAddr.Dsa.busNumber) &&
+				(devfn == pdn->devfn))
+			return pdn->node;
 	}
 	return NULL;
 }
diff --git a/include/asm-ppc64/pci-bridge.h b/include/asm-ppc64/pci-bridge.h
index c342c9e..56863df 100644
--- a/include/asm-ppc64/pci-bridge.h
+++ b/include/asm-ppc64/pci-bridge.h
@@ -3,6 +3,7 @@
 #define _ASM_PCI_BRIDGE_H
 
 #include <linux/pci.h>
+#include <linux/list.h>
 
 #include <asm/iSeries/HvCallPci.h>
 
@@ -74,6 +75,7 @@
 	struct	pci_dev *pcidev;	/* back-pointer to the pci device */
 	struct	device_node *node;	/* back-pointer to the device_node */
 #ifdef CONFIG_PPC_ISERIES
+	struct	list_head Device_List;
 	union HvDsaMap	DsaAddr;	/* Direct Select Address */
 					/* busNumber, subBusNumber, */
 					/* deviceId, barNumber */