Date: Wed, 10 Mar 2010 07:53:14 -0500 From: John Baldwin <jhb@freebsd.org> To: freebsd-hackers@freebsd.org Cc: son goku <ryu.planka@gmail.com> Subject: Re: physio and vmapbuf Message-ID: <201003100753.14092.jhb@freebsd.org> In-Reply-To: <b5a284501003100340r2962a15fwc8c5886da8b74714@mail.gmail.com> References: <b5a284501003100340r2962a15fwc8c5886da8b74714@mail.gmail.com>
next in thread | previous in thread | raw e-mail | index | archive | help
On Wednesday 10 March 2010 6:40:18 am son goku wrote: > Hi hackers, > I have some experience with other UNIX kernels but none with FreeBSD. > FreeBSD interests me for a potential project I might be involved in , and > therefore I started researching it. > Browsing through the I/O layer code, I stumbled upon something that looked > strange, and perhaps you guys can help me with it. > Mainly, when reading the physio path, when the I/O buffer is from user-mode, > physio calls vmapbuf. The comments says that vmapbuf actually maps the > user-buffer into kernel address space. From my experience, such mapping is > needed only for very old devices that use PIO. Newer device just use DMA for > data copy, and therefore don't need the mapping, instead they just need to > pin the memory. Checking out vmapbuf only confused me further, I couldn't > find where such kernel mapping was taken place, nevertheless I did saw that > the buf->b_data was updated according to buf->b_saveaddr in some weird > offset calculation. > Adding to this confusion, there is a buf field called b_kvabase which > supposedly stores the kernel virtual address which wasn't touched at all!! > > Any help with understanding the flow and the usage of those fields/variables > will be greatly appreciated!! bus_dma (which drivers use to manage DMA), still uses virtual addressed buffers to build scatter/gather lists of physical addresses for DMA transfers. There has been much discussion and some prototype work to change this, but it's not a trivial project. (I have converted physio to using bio's backed by sglist's with no kernel addresses in a prototype branch in p4 for example.) -- John Baldwin
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201003100753.14092.jhb>