From: "Ahmed S. Darwish" <darwish.07@gmail.com>
To: linux-kernel@vger.kernel.org
Subject: [i386] Questions regarding provisional page tables initialization
Date: Sun, 1 Jul 2007 23:38:33 +0300 [thread overview]
Message-ID: <20070701203833.GA3498@Ahmed> (raw)
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 */
10:
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
11:
stosl
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 ?
Thanks,
--
Ahmed S. Darwish
HomePage: http://darwish.07.googlepages.com
Blog: http://darwish-07.blogspot.com
next reply other threads:[~2007-07-01 20:39 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-07-01 20:38 Ahmed S. Darwish [this message]
2007-07-01 22:02 ` [i386] Questions regarding provisional page tables initialization Andreas Schwab
2007-07-01 22:19 ` Jeremy Fitzhardinge
2007-07-02 1:13 ` Ahmed S. Darwish
2007-07-02 9:18 ` Andreas Schwab
2007-07-02 10:23 ` Ahmed S. Darwish
2007-07-02 11:34 ` Brian Gerst
2007-07-02 15:43 ` Ahmed S. Darwish
2007-07-02 10:43 ` Andi Kleen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20070701203833.GA3498@Ahmed \
--to=darwish.07@gmail.com \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.