66,7 → 66,7 |
int order = fnzb32( |
(TSB_ENTRY_COUNT * sizeof(tsb_entry_t)) >> FRAME_WIDTH); |
|
uintptr_t tsb = (uintptr_t) frame_alloc(order, flags | FRAME_KA); |
uintptr_t tsb = (uintptr_t) frame_alloc(order, flags); |
|
if (!tsb) |
return -1; |
77,8 → 77,9 |
as->arch.tsb_description.pgsize_mask = 1 << PAGESIZE_8K; |
as->arch.tsb_description.tsb_base = tsb; |
as->arch.tsb_description.reserved = 0; |
as->arch.tsb_description.context = 0; |
|
memsetb((void *) as->arch.tsb_description.tsb_base, |
memsetb((void *) PA2KA(as->arch.tsb_description.tsb_base), |
TSB_ENTRY_COUNT * sizeof(tsb_entry_t), 0); |
#endif |
return 0; |
88,7 → 89,7 |
{ |
#ifdef CONFIG_TSB |
count_t cnt = (TSB_ENTRY_COUNT * sizeof(tsb_entry_t)) >> FRAME_WIDTH; |
frame_free(KA2PA((uintptr_t) as->arch.tsb_description.tsb_base)); |
frame_free((uintptr_t) as->arch.tsb_description.tsb_base); |
return cnt; |
#else |
return 0; |
99,7 → 100,6 |
{ |
#ifdef CONFIG_TSB |
tsb_invalidate(as, 0, (count_t) -1); |
as->arch.tsb_description.context = as->asid; |
#endif |
return 0; |
} |
119,7 → 119,7 |
uintptr_t base = ALIGN_DOWN(config.base, 1 << KERNEL_PAGE_WIDTH); |
|
ASSERT(as->arch.tsb_description.tsb_base); |
uintptr_t tsb = as->arch.tsb_description.tsb_base; |
uintptr_t tsb = PA2KA(as->arch.tsb_description.tsb_base); |
|
if (!overlaps(tsb, 8 * MMU_PAGE_SIZE, base, 1 << KERNEL_PAGE_WIDTH)) { |
/* |
131,7 → 131,7 |
dtlb_insert_mapping(tsb, KA2PA(tsb), PAGESIZE_64K, true, true); |
} |
|
__hypercall_fast2(MMU_TSB_CTX0, 1, as->arch.tsb_description.tsb_base); |
__hypercall_fast2(MMU_TSB_CTXNON0, 1, KA2PA(&(as->arch.tsb_description))); |
|
#endif |
} |
156,7 → 156,7 |
|
ASSERT(as->arch.tsb_description.tsb_base); |
|
uintptr_t tsb = as->arch.tsb_description.tsb_base; |
uintptr_t tsb = PA2KA(as->arch.tsb_description.tsb_base); |
|
if (!overlaps(tsb, 8 * MMU_PAGE_SIZE, base, 1 << KERNEL_PAGE_WIDTH)) { |
/* |