Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 10 Mar 2010 10:07:26 -0800
From:      Julian Elischer <julian@elischer.org>
To:        son goku <ryu.planka@gmail.com>
Cc:        freebsd-hackers@freebsd.org
Subject:   Re: physio and vmapbuf
Message-ID:  <4B97DFDE.10302@elischer.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
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.




yes, though to some of us that is relatively recent, and in fact we 
still need PIO mode for quite a few devices in the embedded space.
(I have a soekris machine with a flash card that I need to use PIO
mode to reach).

We have been saying for some time (me personally for about 18 years)
that we need to handle unmapped IO better. I don't believe that it has
been done yet (*), but you certainly sound like the right person
to take on that project :-)

(*) I last looked at physio a few years ago so if someone snuck in
unmapped IO in the mean-while, please excuse me.




> 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!!
> _______________________________________________
> freebsd-hackers@freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
> To unsubscribe, send any mail to "freebsd-hackers-unsubscribe@freebsd.org"




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