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