staticinlinevoid __flush_itlb_all (void)
{ int w, i;
for (w = 0; w < ITLB_ARF_WAYS; w++) { for (i = 0; i < (1 << XCHAL_ITLB_ARF_ENTRIES_LOG2); i++) { int e = w + (i << PAGE_SHIFT);
invalidate_itlb_entry_no_isync(e);
}
} asmvolatile ("isync\n");
}
staticinlinevoid __flush_dtlb_all (void)
{ int w, i;
for (w = 0; w < DTLB_ARF_WAYS; w++) { for (i = 0; i < (1 << XCHAL_DTLB_ARF_ENTRIES_LOG2); i++) { int e = w + (i << PAGE_SHIFT);
invalidate_dtlb_entry_no_isync(e);
}
} asmvolatile ("isync\n");
}
/* If mm is current, we simply assign the current task a new ASID, thus, *invalidatingallprevioustlbentries.Ifmmissomeoneelse'susermapping, *wieinvalidatethecontext,thus,whenthatusermappingisswappedin, *anewcontextwillbeassignedtoit.
*/
void local_flush_tlb_mm(struct mm_struct *mm)
{ int cpu = smp_processor_id();
void local_flush_tlb_page(struct vm_area_struct *vma, unsignedlong page)
{ int cpu = smp_processor_id(); struct mm_struct* mm = vma->vm_mm; unsignedlong flags; int oldpid;
local_irq_save(flags); for (w = 0; w < DTLB_ARF_WAYS; ++w) for (e = 0; e < (1 << XCHAL_DTLB_ARF_ENTRIES_LOG2); ++e)
bug |= check_tlb_entry(w, e, true); for (w = 0; w < ITLB_ARF_WAYS; ++w) for (e = 0; e < (1 << XCHAL_ITLB_ARF_ENTRIES_LOG2); ++e)
bug |= check_tlb_entry(w, e, false); if (bug & TLB_INSANE)
tlb_insane(); if (bug & TLB_SUSPICIOUS)
tlb_suspicious();
local_irq_restore(flags);
}
#endif/* CONFIG_DEBUG_TLB_SANITY */
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.13 Sekunden
(vorverarbeitet am 2026-09-29)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.