Patches added to powerpc.git master and powerpc-next branches

Paul Mackerras paulus at samba.org
Tue Apr 22 10:15:21 EST 2008


Kumar Gala writes:

> > Once again I want to go through it carefully and understand how it all
> > works, and in particular understand things like the way it ensures
> > that the base address for the kmap region is aligned to a 4M boundary
> > so all the kmap ptes are in a single page (assuming it does :).
> 
> I'm not clear on why this is needed.  I can see value in having the  
> PGD entry in place but the pte PAs would be changing all the time so I  
> don't see what benefit there is in keeping them in one page.

Have a look at map_new_virtual in mm/highmem.c.  In particular:

        set_pte_at(&init_mm, vaddr,
                   &(pkmap_page_table[last_pkmap_nr]), mk_pte(page, kmap_prot));

assumes that the ptes that kmap uses are in a contiguous array whose
base is pkmap_page_table.

> For normal kmap ptes we cover things in one PGD via:
> 
> #define PKMAP_BASE      ((FIXADDR_BOOT_START - PAGE_SIZE*(LAST_PKMAP +  
> 1)) & PMD_MASK)

OK, that probably does the trick ... <checks> ... yes it does.

We seem to have a distinction without a difference between
FIXADDR_START and FIXADDR_BOOT_START, and similarly between
__FIXADDR_SIZE and __FIXADDR_BOOT_SIZE.  Is there any actual
difference and if not why do we have two names for the same thing?

Also, we seem to have an unnecessary distinction (and unnecessary
casting) between __FIXADDR_TOP and FIXADDR_TOP.

Regards,
Paul.



More information about the Linuxppc-dev mailing list