Re: [PATCH] ibmvscsi driver - sixth version

Dave Boutcher
2004-03-31T23:52:38Z

On 31 Mar 2004 18:39:57 -0500, James Bottomley
<James.Bottomley@SteelEye.com> wrote:
>> > 14) why are you faking a PCI bus? The following is very, very wrong:
>> >
>> > +static struct pci_dev iseries_vscsi_dev = {
>> > + .dev.bus = &pci_bus_type,
>> > + .dev.bus_id = "vscsi",
>> > + .dev.release = noop_release
>> >
>> > Did I mention "very" wrong? :)
>> Because for iseries it is implemented in the pci code. While it may
>> look wrong, it is actually correct. Check out
>> arch/ppc64/kernel/iSeries_iommu.c and arch/ppc64/kernel/dma.c.
>> This device has to have dev->bus == &pci_bus_type otherwise the
>> dma_mapping_foo functions won't work correctly.
>
> Erm, something is very wrong in the iSeries code then. This
> iseries_vio_device is a struct device. As such, it should contain all
> the information it needs for the DMA API to act on it without performing
> silly pci device tricks.
>
> This looks like it's done because the iseries should be converted to the
> generic device infrastructure, but in fact it's not. Since the generic
> API has been around for over a year and was designed to solve precisely
> these very problems it needs fixing rather than trying to work around it
> in a driver.
There will always be 1 (no more, no less) of these struct devices in the
system, so I'll move the definition of this into iSeries_iommu and then
just reference it from the driver. I think that should abstract things
sufficiently.

Dave B