pagetables used in interrupt context
Konstantin Zertsekel
zertsekel at gmail.com
Wed Feb 22 06:58:56 EST 2012
On Wed, Feb 22, 2012 at 4:18 AM, subin gangadharan
<subingangadharan at gmail.com> wrote:
>
> Thank you for clearing my doubt.
>
> On Mon, Feb 20, 2012 at 8:39 PM, Dave Hylands <dhylands at gmail.com> wrote:
> > Hi Subin,
> >
> > On Mon, Feb 20, 2012 at 6:47 PM, subin gangadharan
> > <subingangadharan at gmail.com> wrote:
> >> Hi All,
> >>
> >> Please correct me if I am wrong. In linux each process will have its
> >> own page tables, so when a interrupt happens processor will switch to
> >> interrupt context
> >> and execute the proper handler. So my doubt, if this is the case,
> >> interrupt hanlder will be using the pagetables of the interrupted
> >> process or is there a separate page table for this.
> >
> > Yep - that's right. Conceptually you can imagine that the kernel page
> > tables are replicated in each process, so when the interrupt occurs,
> > the kernel mappings will always be in effect regardless of which task
> > is running. How this is actually achieved may vary from architecture
> > to architecture.
For example, in ARMv5 the sacred instruction that actually tells CPU
to use new page table is here:
(file arch/arm/mm/proc-feroceon.S)
ENTRY(cpu_feroceon_switch_mm)
...
mcr p15, 0, r0, c2, c0, 0 @ load page table pointer
...
For ARMv7 it is (arch/arm/mm/proc-v7-2level.S):
ENTRY(cpu_v7_switch_mm)
...
isb
1: mcr p15, 0, r0, c2, c0, 0 @ set TTB 0
isb
...
For x86 (arch/x86/include/asm/mmu_context.h):
static inline void switch_mm(struct mm_struct *prev, struct mm_struct *next,
struct task_struct *tsk)
{
/* Re-load page tables */
load_cr3(next->pgd);
...
}
--- KostaZ
More information about the Kernelnewbies
mailing list