コード例 #1
0
void flush_tlb_pending(void)
{
	struct tlb_batch *tb = &get_cpu_var(tlb_batch);
	struct mm_struct *mm = tb->mm;

	if (!tb->tlb_nr)
		goto out;

	flush_tsb_user(tb);

	if (CTX_VALID(mm->context)) {
		if (tb->tlb_nr == 1) {
			global_flush_tlb_page(mm, tb->vaddrs[0]);
		} else {
#ifdef CONFIG_SMP
			smp_flush_tlb_pending(tb->mm, tb->tlb_nr,
					      &tb->vaddrs[0]);
#else
			__flush_tlb_pending(CTX_HWBITS(tb->mm->context),
					    tb->tlb_nr, &tb->vaddrs[0]);
#endif
		}
	}

	tb->tlb_nr = 0;

out:
	put_cpu_var(tlb_batch);
}
コード例 #2
0
ファイル: tlb.c プロジェクト: chunyenho/RTS-hw2
void flush_tlb_pending(void)
{
    struct mmu_gather *mp = &get_cpu_var(mmu_gathers);

    if (mp->tlb_nr) {
        flush_tsb_user(mp);

        if (CTX_VALID(mp->mm->context)) {
#ifdef CONFIG_SMP
            smp_flush_tlb_pending(mp->mm, mp->tlb_nr,
                                  &mp->vaddrs[0]);
#else
            __flush_tlb_pending(CTX_HWBITS(mp->mm->context),
                                mp->tlb_nr, &mp->vaddrs[0]);
#endif
        }
        mp->tlb_nr = 0;
    }

    put_cpu_var(mmu_gathers);
}
コード例 #3
0
ファイル: tlb.c プロジェクト: Adjustxx/Savaged-Zen
void flush_tlb_pending(void)
{
	struct tlb_batch *tb = &get_cpu_var(tlb_batch);

	if (tb->tlb_nr) {
		flush_tsb_user(tb);

		if (CTX_VALID(tb->mm->context)) {
#ifdef CONFIG_SMP
			smp_flush_tlb_pending(tb->mm, tb->tlb_nr,
					      &tb->vaddrs[0]);
#else
			__flush_tlb_pending(CTX_HWBITS(tb->mm->context),
					    tb->tlb_nr, &tb->vaddrs[0]);
#endif
		}
		tb->tlb_nr = 0;
	}

	put_cpu_var(tlb_batch);
}