Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/arch/sparc64/src/mm/sun4v/tlb.c

    rcade9c1 r560b81c  
    211211{
    212212        uintptr_t va = ALIGN_DOWN(istate->tpc, PAGE_SIZE);
    213         pte_t *t;
    214 
    215         t = page_mapping_find(AS, va, true);
    216 
    217         if (t && PTE_EXECUTABLE(t)) {
     213        pte_t t;
     214
     215        bool found = page_mapping_find(AS, va, true, &t);
     216        if (found && PTE_EXECUTABLE(&t)) {
     217                ASSERT(t.p);
     218
    218219                /*
    219220                 * The mapping was found in the software page hash table.
    220221                 * Insert it into ITLB.
    221222                 */
    222                 t->a = true;
    223                 itlb_pte_copy(t);
     223                t.a = true;
     224                itlb_pte_copy(&t);
    224225#ifdef CONFIG_TSB
    225                 itsb_pte_copy(t);
    226 #endif
     226                itsb_pte_copy(&t);
     227#endif
     228                page_mapping_update(AS, va, true, &t);
    227229        } else {
    228230                /*
     
    244246void fast_data_access_mmu_miss(unsigned int tt, istate_t *istate)
    245247{
    246         pte_t *t;
     248        pte_t t;
    247249        uintptr_t va = DMISS_ADDRESS(istate->tlb_tag_access);
    248250        uint16_t ctx = DMISS_CONTEXT(istate->tlb_tag_access);
     
    261263        }
    262264
    263         t = page_mapping_find(as, va, true);
    264         if (t) {
     265        bool found = page_mapping_find(as, va, true, &t);
     266        if (found) {
     267                ASSERT(t.p);
     268
    265269                /*
    266270                 * The mapping was found in the software page hash table.
    267271                 * Insert it into DTLB.
    268272                 */
    269                 t->a = true;
    270                 dtlb_pte_copy(t, true);
     273                t.a = true;
     274                dtlb_pte_copy(&t, true);
    271275#ifdef CONFIG_TSB
    272                 dtsb_pte_copy(t, true);
    273 #endif
     276                dtsb_pte_copy(&t, true);
     277#endif
     278                page_mapping_update(as, va, true, &t);
    274279        } else {
    275280                /*
     
    288293void fast_data_access_protection(unsigned int tt, istate_t *istate)
    289294{
    290         pte_t *t;
     295        pte_t t;
    291296        uintptr_t va = DMISS_ADDRESS(istate->tlb_tag_access);
    292297        uint16_t ctx = DMISS_CONTEXT(istate->tlb_tag_access);
     
    296301                as = AS_KERNEL;
    297302
    298         t = page_mapping_find(as, va, true);
    299         if (t && PTE_WRITABLE(t)) {
     303        bool found = page_mapping_find(as, va, true, &t);
     304        if (found && PTE_WRITABLE(&t)) {
     305                ASSERT(t.p);
     306
    300307                /*
    301308                 * The mapping was found in the software page hash table and is
     
    303310                 * into DTLB.
    304311                 */
    305                 t->a = true;
    306                 t->d = true;
     312                t.a = true;
     313                t.d = true;
    307314                mmu_demap_page(va, ctx, MMU_FLAG_DTLB);
    308                 dtlb_pte_copy(t, false);
     315                dtlb_pte_copy(&t, false);
    309316#ifdef CONFIG_TSB
    310                 dtsb_pte_copy(t, false);
    311 #endif
     317                dtsb_pte_copy(&t, false);
     318#endif
     319                page_mapping_update(as, va, true, &t);
    312320        } else {
    313321                /*
     
    383391
    384392        for (i = 0; i < cnt; i++) {
    385                 __hypercall_fast5(MMU_DEMAP_PAGE, 0, 0, page, asid,
    386                         MMU_FLAG_DTLB | MMU_FLAG_ITLB);
     393                __hypercall_fast5(MMU_DEMAP_PAGE, 0, 0, page + i * PAGE_SIZE,
     394                    asid, MMU_FLAG_DTLB | MMU_FLAG_ITLB);
    387395        }
    388396
Note: See TracChangeset for help on using the changeset viewer.