tech-kern archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: CVS commit: src/sys/uvm
hi,
> I take silence as "no objection".
the silence in this case means was-busy-for-other-things-and-forgot.
sorry.
>> I have no real code for this big picture at this moment. Making
>> vm_physseg available as reference is the first step. This only
>> changes uvm_page_physload() to return a pointer:
>>
>> -void uvm_page_physload();
>> +void *uvm_page_physload();
>>
>> But this makes XIP pager MUCH cleaner. The reason has been explained
>> many times.
because the separate uvm_page_physload_device is no longer necessary,
you mean? i have no problem with the step.
>> Making fault handlers and pagers to use vm_physseg * + off_t is
>> the next step, and I don't intend to work on it now. I just want
>> to explain the big picture.
>>
>> >
>> > >>
>> > >> Keep vm_physseg * + off_t array on stack. If UVM objects uses
>> > >> vm_page (e.g. vnode), its pager looks up vm_page -> vm_physseg *
>> > >> + off_t *once* and cache it on stack.
>> >
>> > do you mean something like this?
>> > struct {
>> > vm_physseg *hoge;
>> > off_t fuga;
>> > } foo [16];
>>
>> Yes.
>>
>> Or cache vm_page * with it, like:
>>
>> struct vm_id {
>> vm_physseg *seg;
>> off_t off;
>> vm_page *pg;
>> };
>>
>> uvm_fault()
>> {
>> vm_id pgs[];
>> :
>> }
>>
>> Vnode pager (genfs_getpages) takes vm_page's by looking up
>> vnode::v_uobj's list, or uvn_findpages().
>>
>> When it returns back to fault handler, we have to lookup vm_physseg
>> for each page. Then fill the "seg" slot above (assuming we'll
>> remove vm_page::phys_addr soon).
>>
>> Fault handler calls per-vm_page operations iff vm_page slot is filled.
>> XIP pages are not pageq'ed.
pgo_get returns either seg+off or pg for each vm_id slots?
>> XIP pages don't need vm_page, but
>> cached because it's vnode.
can you explain this sentence?
>> (Just in case, have you read my paper?)
which paper? i guess no.
YAMAMOTO Takashi
Home |
Main Index |
Thread Index |
Old Index