Re: pagetables used in interrupt context

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, Feb 22, 2012 at 4:18 AM, subin gangadharan
<subingangadharan@xxxxxxxxx> wrote:
>
> Thank you for clearing my doubt.
>
> On Mon, Feb 20, 2012 at 8:39 PM, Dave Hylands <dhylands@xxxxxxxxx> wrote:
> > Hi Subin,
> >
> > On Mon, Feb 20, 2012 at 6:47 PM, subin gangadharan
> > <subingangadharan@xxxxxxxxx> 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

_______________________________________________
Kernelnewbies mailing list
Kernelnewbies@xxxxxxxxxxxxxxxxx
http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies


[Index of Archives]     [Newbies FAQ]     [Linux Kernel Mentors]     [Linux Kernel Development]     [IETF Annouce]     [Git]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux SCSI]     [Linux ACPI]
  Powered by Linux