Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 10 Mar 2010 13:40:18 +0200
From:      son goku <ryu.planka@gmail.com>
To:        freebsd-hackers@freebsd.org
Subject:   physio and vmapbuf
Message-ID:  <b5a284501003100340r2962a15fwc8c5886da8b74714@mail.gmail.com>

next in thread | raw e-mail | index | archive | help
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!!



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