tech-kern archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: Device page
> On Feb 2, 2010, at 10:20 AM, Masao Uebayashi wrote:
>
>> As I briefly mentioned before, I'll need device page to support XIP. It's
>> a struct vm_page *, which is actually a magic value which conveys data from
>> pgo_get() to pmap_enter().
>>
>> When a device page is pmap_enter()'ed, pmap checks if it's a device page or
>> not, if so, stores a PV into a dedicated vm_physseg for devices. When a
>> device page is passed to pmap_page_*() (struct vm_page *-oriented functions),
>> they look for the device vm_physseg, look up a PV header, then look up a PV.
>>
>> I also want to make these minimal PV handling moved to some MI place -
>> probably
>> uvm_page.c. Now we don't define MI PV header yet, I'll allocate struct
>> vm_page_md *[] for each XIP-capable device. This will be put in uvm_page.c
>> too.
>
> I'd rather change the arguments to pmap_{zero,copy}_page from paddr_t to
> struct vm_page * since it's easier to fetch the physical address from the
> page than getting the vm_page from the pa.
recording physical adderess in each vm_page wastes space given that vm_page
is allocated as an array.
ie. if we have a way to find the corresponding physseg from a vm_page,
its corresponding physical address can be calculated.
so i hesitate to propagate the assumption of fast VM_PAGE_TO_PHYS.
YAMAMOTO Takashi
>
> It also means that you can easily have a VM_PAGE_DEVICE_PAGE_P(pg) macro to
> detect whether this page is a device page or not. No need for the pmap to
> know what physseg it is in.
Home |
Main Index |
Thread Index |
Old Index