[lkml]   [2007]   [Jul]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
    Subject[i386] Questions regarding provisional page tables initialization
    Hi list,

    AFAIK, in the initializaion phase, kernel builds pages tables with two
    mappings, identity and PAGE_OFFSET + C mapping. The provisional _global
    directory_ is contained in swapper_pg_dir variable. while the provisional
    _page tables_ are stored starting from pg0, right after _end.

    There're some stuff that confused me for a full day about the code (head.S)
    that accomplishes the above words:

    movl $(pg0 - __PAGE_OFFSET), %edi
    movl $(swapper_pg_dir - __PAGE_OFFSET), %edx
    movl $0x007, %eax /* 0x007 = PRESENT+RW+USER */
    leal $0x007(%edi),%ecx /* Create PDE entry */

    What does the address of 7 bytes displacement after %edi - the physical address
    of pg0 - represent ?. Why not just putting the address of %edi (the address of
    pagetable cell to be mapped by swapper_pg_dir) in %ecx without displacement?

    page_pde_offset = (__PAGE_OFFSET >> 20)
    movl %ecx,(%edx) /* Store identity PDE entry */
    movl %ecx,page_pde_offset(%edx) /* Store kernel PDE entry */

    Why the pde_offset is PAGE_OFFSET >> 20 instead of PAGE_OFFSET >> 22 ?
    * 22 to right shift the whole page_shift (12) and pgdir_shift (10) bits.

    /* Initialize the 1024 _page table_ cells with %eax (0x007) */
    movl $1024, %ecx
    addl $0x1000,%eax
    loop 11b

    The page table entries beginning from pg0 (pointed by %edi) and following pages
    are initialized with the series 7 + 8 + 8 + ... for each cell. This series has
    the property of setting the PRESENT+RW+USER bits in the whole entries to 1 but it
    sets lots of the entries BASE address to 0 too. Why is this done ?


    Ahmed S. Darwish
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to
    More majordomo info at
    Please read the FAQ at

     \ /
      Last update: 2007-07-01 22:43    [W:0.023 / U:19.300 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site