svn commit: r249476 - in head/sys/dev: ata pci

Marius Strobl marius at alchemy.franken.de
Sun Apr 14 15:05:14 UTC 2013


On Sun, Apr 14, 2013 at 02:02:34PM +0000, Konstantin Belousov wrote:
> Author: kib
> Date: Sun Apr 14 14:02:34 2013
> New Revision: 249476
> URL: http://svnweb.freebsd.org/changeset/base/249476
> 
> Log:
>   Usnure that PCI bus BIS_GET_DMA_TAG() method sees the actual PCI
>   device which makes the request for dma tag, instead of some descendant
>   of the PCI device, by creating a pass-through trampoline for vga_pci
>   and ata_pci buses.

If you need to know the last PCI device requesting the DMA tag,
wouldn't it make more sense to let the consumer of this walk up the
tree as necessary instead of hacking N drivers? I.e.:
foo_get_dma_tag(device_t bus, device_t child)
{
	device_t device, parent;
	devclass_t pci_devclass;

	pci_devclass = devclass_find("pci");
	for (device = child; child != bus; device = parent) {
		parent = device_get_parent(device);
		if (device_get_devclass(parent) != pci_devclass)
			continue;
		break;
	}
	/* use device */
}

I suspect the problem you are hitting is also true for ISA devices
behind a PCI-ISA-bridge, PCI device drivers attaching non-PCI sub-
devices requesting DMA tags like sk(4) etc.

Marius



More information about the svn-src-head mailing list