But, that happens in setup_arch(). Do we have any chance to change the
CR3 at that moment?

Thanks,
Neo

On Nov 14, 2007 6:00 PM, Peter Teoh <[EMAIL PROTECTED]> wrote:
>
> On Nov 9, 2007 2:56 PM, Neo Jia <[EMAIL PROTECTED]> wrote:
> > hi,
> >
> > I think the swapper_pg_dir is already loaded in head.S. Why we need to
> > load it again? Just a simple 2-level page table.
> >
> > Thanks,
> > Neo
> >
> > --
> > I would remember that if researchers were not ambitious
> > probably today we haven't the technology we are using!
> >
>
> Yes, swapper_pg_dir is already defined in head.S, and then loaded into cr3:
>
> /*
>  * Enable paging
>  */
>         movl $swapper_pg_dir-__PAGE_OFFSET,%eax
>         movl %eax,%cr3          /* set the page table pointer.. */
>         movl %cr0,%eax
>         orl $0x80000000,%eax
>         movl %eax,%cr0          /* ..and set paging (PG) bit */
>         ljmp $__BOOT_CS,$1f     /* Clear prefetch and normalize %eip */
> 1:
>         /* Set up the stack pointer */
>         lss stack_start,%esp
>
> But u also must remember that cr3 is loaded with something else
> whenever the kernel switches among userspace, kernelspace, and
> interrupt context, and ioremap() also changes the cr3 as well, in
> order to implement the so-called hardware MMU operation.
>



-- 
I would remember that if researchers were not ambitious
probably today we haven't the technology we are using!

--
To unsubscribe from this list: send an email with
"unsubscribe kernelnewbies" to [EMAIL PROTECTED]
Please read the FAQ at http://kernelnewbies.org/FAQ

Reply via email to