Date: Thu, 20 Feb 2003 09:08:36 -0800 From: "Sam Leffler" <sam@errno.com> To: "Andrew Gallatin" <gallatin@cs.duke.edu> Cc: "Mike Silbersack" <silby@silby.com>, "Scott Long" <scott_long@btc.adaptec.com>, <src-committers@FreeBSD.org>, <cvs-src@FreeBSD.org>, <cvs-all@FreeBSD.org> Subject: Re: cvs commit: src/sys/dev/aac aac.c aac_pci.c Message-ID: <0e1b01c2d902$b507e270$52557f42@errno.com> References: <200302192158.h1JLwYJn025529@repoman.freebsd.org><20030219161458.T62705@patrocles.silby.com><20030219181629.A46948@grasshopper.cs.duke.edu><20030219182122.N62705@patrocles.silby.com><3E54219C.9030103@btc.adaptec.com><20030219212343.O64167@patrocles.silby.com><0d1a01c2d894$c99c0540$52557f42@errno.com><20030220093631.A48177@grasshopper.cs.duke.edu><0dcd01c2d8fc$33a49ee0$52557f42@errno.com> <15957.1002.862520.429817@grasshopper.cs.duke.edu>
next in thread | previous in thread | raw e-mail | index | archive | help
> Sam Leffler writes: > > > Sam Leffler [sam@errno.com] wrote: > > > > > On Wed, 19 Feb 2003, Scott Long wrote: > > > > > > > > > > > busdma has been around since 3.0. It probably needs a couple of > > hours > > > > > > of work to lock it down. > > > > > > > > > > Hm, icky. Is anyone in the know wrt busdma looking into handling > > that? I > > > > > don't think we can get much done in the network drivers without > > touching > > > > > busdma functions. > > > > > > > > > > > > > Since most bus_dma functions operate on driver-private data locking > > drivers > > > > will probably be sufficient to start. The only issue I know of is that > > > > bus_dmamem_alloc calls contigmalloc; so there may be an issue there > > getting > > > > out from under Giant. > > > > > > > > > > I'm not the most familiar person with the busdma interface.. but.. > > > at least for network drivers, bus_dmamem_alloc() is typically called > > > for descriptor lists, etc. Eg, data shared with the nic, and is done > > > at attach time, right? Its never called from the transmit or recv > > > routines. > > > > Correct, for nic drivers you either pre-allocator or you map data associated > > with mbufs (or private store if you do jumbograms and set them up as > > externally-managed storage). > > > > In general though, unless you pre-allocate memory you may need to use it at > > the point where you setup for dma. The ubsec crypto driver currently uses > > it when handling asymmetric crypto ops. > > What about bouncing? I assume all bounce buffers are allocated up > front, so that's not a problem, right? Bounce buffers are allocated (if needed) when a map is created. But I have to do this at the same time that I allocate memory because I don't know the size I need. If I setup a tag and map for the max possible size operand then I can potentially waste lots of memory because bus_dmamem_alloc will allocate the max possible size set in the tag and not the size I need. Since I brought the driver over from openbsd Scott added bus_dmamem_alloc_size which lets you specify an allocation size different than the max size specified in the tag. But I haven't switched the driver to use this. I think this is getting off topic. I don't believe we can always pre-allocate memory for doing DMA so we'll always have drivers that need to malloc buffers on the fly. I don't think this materially affects the original question which was whether or not the bus_dma support needed locking work. In looking at the code a bit now it seems there may be issues synchronizing access to bus_dma_tag_t's that are shared. I suspect this mostly happens within a driver but there may be some nexus-level tags on non-x86 architectures that need locking. This might best be handled in the drivers rather than the bus_dma routines. Sam To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe cvs-all" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?0e1b01c2d902$b507e270$52557f42>