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

From: Adrian Chadd <adrian_at_freebsd.org>
Date: Mon, 2 Mar 2015 15:49:56 -0800
On 2 March 2015 at 15:05, K. Macy <kmacy_at_freebsd.org> wrote:
> On Mon, Mar 2, 2015 at 12:42 PM, Adrian Chadd <adrian_at_freebsd.org> wrote:
>> Hi,
>>
>> gonzo_at_ 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.

Well, you can look at what's going on in the vchiq code. gonzo made it
an explicit wire in order to avoid issues.

> 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").
>  */

What's the definition of "very temporary holding" ? What's the
behavioural difference?



-adrian
Received on Mon Mar 02 2015 - 22:49:57 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:40:56 UTC