Message ID | 1241525095-18041-1-git-send-email-galak@kernel.crashing.org (mailing list archive) |
---|---|
State | Superseded, archived |
Headers | show |
Hi Kumar, On Tue, 5 May 2009 07:04:55 -0500 Kumar Gala <galak@kernel.crashing.org> wrote: > > We shouldn't directly access sysdata to get the device node. We should > be calling pci_device_to_OF_node(). > > Signed-off-by: Kumar Gala <galak@kernel.crashing.org> It looks ok, but all I can say for now is that it doesn not make things worse. During 2.6.28, the iSeries PCI code was broken. I am working on a fix and after that I will be able to properly test this patch.
Hi Kumar, On Wed, 6 May 2009 23:13:38 +1000 Stephen Rothwell <sfr@canb.auug.org.au> wrote: > > On Tue, 5 May 2009 07:04:55 -0500 Kumar Gala <galak@kernel.crashing.org> wrote: > > > > We shouldn't directly access sysdata to get the device node. We should > > be calling pci_device_to_OF_node(). > > > > Signed-off-by: Kumar Gala <galak@kernel.crashing.org> > > It looks ok, but all I can say for now is that it doesn not make things > worse. During 2.6.28, the iSeries PCI code was broken. I am working on > a fix and after that I will be able to properly test this patch. With my fix for the old PCI breakage, I have tested your "pci" tree for iseries_defconfig. Built and booted with and without CONFIG_PCI. Tested-by: Stephen Rothwell <sfr@canb.auug.og.au> Acked-by: Stephen Rothwell <sfr@canb.auug.og.au> My patch, however, will probably need your attention once Ben takes it. :-)
diff --git a/arch/powerpc/platforms/iseries/pci.c b/arch/powerpc/platforms/iseries/pci.c index 02a634f..18343c3 100644 --- a/arch/powerpc/platforms/iseries/pci.c +++ b/arch/powerpc/platforms/iseries/pci.c @@ -318,6 +318,7 @@ static void __init iomm_table_allocate_entry(struct pci_dev *dev, int bar_num) { struct resource *bar_res = &dev->resource[bar_num]; long bar_size = pci_resource_len(dev, bar_num); + struct device_node *dn = pci_device_to_OF_node(dev); /* * No space to allocate, quick exit, skip Allocation. @@ -335,9 +336,9 @@ static void __init iomm_table_allocate_entry(struct pci_dev *dev, int bar_num) * Allocate the number of table entries needed for BAR. */ while (bar_size > 0 ) { - iomm_table[current_iomm_table_entry] = dev->sysdata; + iomm_table[current_iomm_table_entry] = dn; ds_addr_table[current_iomm_table_entry] = - iseries_ds_addr(dev->sysdata) | (bar_num << 24); + iseries_ds_addr(dn) | (bar_num << 24); bar_size -= IOMM_TABLE_ENTRY_SIZE; ++current_iomm_table_entry; } @@ -410,7 +411,7 @@ void __init iSeries_pcibios_fixup_resources(struct pci_dev *pdev) struct device_node *node; int i; - node = find_device_node(bus, pdev->devfn); + node = pci_device_to_OF_node(pdev); pr_debug("PCI: iSeries %s, pdev %p, node %p\n", pci_name(pdev), pdev, node); if (!node) { @@ -441,7 +442,6 @@ void __init iSeries_pcibios_fixup_resources(struct pci_dev *pdev) } } - pdev->sysdata = node; allocate_device_bars(pdev); iseries_device_information(pdev, bus, *sub_bus); iommu_devnode_init_iSeries(pdev, node);
We shouldn't directly access sysdata to get the device node. We should be calling pci_device_to_OF_node(). Signed-off-by: Kumar Gala <galak@kernel.crashing.org> --- arch/powerpc/platforms/iseries/pci.c | 8 ++++---- 1 files changed, 4 insertions(+), 4 deletions(-)