Doing zero-copy stuff in drivers, or "is vm_fault_quick_hold_pages() enough" ?

K. Macy kmacy at
Mon Mar 2 23:06:00 UTC 2015

On Mon, Mar 2, 2015 at 12:42 PM, Adrian Chadd <adrian at> wrote:
> Hi,
> gonzo@ committed a fix (r278615) to the videocore driver for the
> raspberry pi. The fix involved doing an explicit wire of pages that
> were about to be passed down to the hardware to send to the
> videobuffer hardware.
> It turns out that doing vm_fault_quick_hold_pages() wasn't enough -
> the pages weren't being wired, and they may disappear before the
> hardware gets to them.

Then your code is buggy or you've hit a bug in the VM. Holding a page
is a short-term wiring.

Right above vm_page_hold():
 * Keep page from being freed by the page daemon
 * much of the same effect as wiring, except much lower
 * overhead and should be used only for *very* temporary
 * holding ("wiring").

> I looked at vmapbuf() and how it uses vm_fault_quick_hold_pages(), but
> I can't find anything that wires the pages down before it hands the
> addresses to the hardware.
> So, am I missing something about how/where that's done?

> Thanks,
> -adrian
> _______________________________________________
> freebsd-current at mailing list
> To unsubscribe, send any mail to "freebsd-current-unsubscribe at"

More information about the freebsd-current mailing list