tech-kern archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: XIP (Rev. 2)



On Nov 8, 2010, at 11:25 PM, Masao Uebayashi wrote:

>       http://uebayasi.dyndns.org/~uebayasi/tmp/uebayasi-xip-20101109.txt

Besides the churn (and there is a lot of it), I think my fundamental
problem with this incarnation of XIP is that it took a wrong approach.
It has tried to fit itself under uvm_vnodeops and I think that's a
fatal flaw by requiring invasive changes to contort to that decision.

Instead, XIP should have its own pager ops uvm_xipops and vnodes should
be set to use that in vnalloc/insmntque which is easily done since you 
can just check for MNT_XIP in the passed mount point.

xipops would a pgo_fault routine to handle the entering the corresponding
PA for the faulting VA using similar logic to the genfs_getpages_xip in
your patch.

This avoid the entire issue about vm_pages entirely since pgo_fault will
be calling pmap_enter directly with the correct paddr_t.  We will need
to add a PMAP_CACHE flag as well.

This leaves the issue of how to deal with copy-on-write (COW) page faults.
I think the best way to deal with is for pgo_fault to return a specific
error (EROFS seems appropriate) and let UVM deal with it.  However UVM
doesn't know where the source data exists so we will need to add a
int (*pgo_copy_page)(struct uvm_object *uobj, voff_t offset, paddr_t pa) 
op to pagerops which copy one page of data from uvm_object to the
specified pa.  This would do what we would normally use pmap_copy_page
but we can't since we don't know the source pa and it's not a managed
page.

I think with this approach most of churn goes away and there is minimal
changes to the rest of NetBSD.


Home | Main Index | Thread Index | Old Index