tech-kern archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: pmap_extract(9) (was Re: xmd(4) (Re: XIP))
On Mon, Nov 01, 2010 at 03:55:01PM +0000, Eduardo Horvath wrote:
> On Mon, 1 Nov 2010, Masao Uebayashi wrote:
>
> > I think pmap_extract(9) is a bad API.
> >
> > After MD bootstrap code detects all physical memories, it gives
> > all the informations to UVM, including available KVA. At this
> > point UVM knows all the available resources of virtual/physical
> > addresses. UVM is responsible to manage all of these.
>
> This is managed RAM. What about I/O pages?
To access MMIO device pages, you need a physical address. Physical
address space is single, linear resource on all platforms. I wonder
why we can't manage it in MI way.
>
> > Calling pmap_extract(9) means that some kernel code asks pmap(9)
> > to look up a physical address. pmap(9) is only responsible to
> > handle CPU and MMU. Using it as a lookup database is an abuse.
> > The only reasonable use of pmap_extract(9) is for debugging purpose.
> > I think that pmap_extract(9) should be changed like:
> >
> > bool pmap_mapped_p(struct pmap *, vaddr_t);
> >
> > and allow it to be used for KASSERT()s.
> >
> > The only right way to retrieve P->V translation is to lookup from
> > vm_map (== the fault handler). If we honour this principle, VM
> > and I/O code will be much more consistent.
>
> pmap(9) has always needed a database to keep track of V->P mappings(*) as
> wll as P->V mappings so pmap_page_protect() can be implemented.
pmap_extract() accesses page table (per-space). pmap_page_protect()
accesses PV (per-page). I think they're totally different...
>
> Are you planning on moving the responsibility of tracking P->V mappings to
> UVM?
>
> * While you can claim that keeping track of P->V mappings is the primary
> function of pmap(9) and a sideffect of page tables, that posits the
> machine in quesion uses page tables. In a machine with a software managed
> TLB you could implement pmap(9) by walking the UVM structures on a page
> fault and generating TLB entries from the vm_page structure. This would
> reduce the amount of duplicate informaion maintained by the VM subsystems.
> However, UVM currently assumes pmap() remembers all forward and reverse
> mappings. If pmap() forgets them, bad things happen.
>
> Eduardo
--
Masao Uebayashi / Tombi Inc. / Tel: +81-90-9141-4635
Home |
Main Index |
Thread Index |
Old Index