Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 14 Apr 2013 23:18:44 +0200
From:      Marius Strobl <marius@alchemy.franken.de>
To:        Konstantin Belousov <kostikbel@gmail.com>
Cc:        svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org
Subject:   Re: svn commit: r249476 - in head/sys/dev: ata pci
Message-ID:  <20130414211844.GB62578@alchemy.franken.de>
In-Reply-To: <20130414205222.GG2930@kib.kiev.ua>
References:  <201304141402.r3EE2YIi001357@svn.freebsd.org> <20130414150507.GA62578@alchemy.franken.de> <20130414205222.GG2930@kib.kiev.ua>

next in thread | previous in thread | raw e-mail | index | archive | help
On Sun, Apr 14, 2013 at 11:52:22PM +0300, Konstantin Belousov wrote:
> On Sun, Apr 14, 2013 at 05:05:07PM +0200, Marius Strobl wrote:
> > 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 */
> > }
> The similar approach was my first thought, and I discussed it with John.
> After the discussion, I agreed that this is a hack.
> 
> My understanding is that this default behaviour is only correct for
> the simple cases like the one fixed in the commit. Forcing this on
> other buses would only make the bugs hidden and cause more efforts
> in trying to identify it.

Oh, I see that now. Thanks for the clarification.

Marius




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20130414211844.GB62578>