Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/generic/src/mm/as.c

    rc4c2406 rf97f1e51  
    665665               
    666666                page_table_lock(as, false);
     667               
     668                /*
     669                 * Start TLB shootdown sequence.
     670                 */
     671                ipl_t ipl = tlb_shootdown_start(TLB_INVL_PAGES, as->asid,
     672                    area->base + P2SZ(pages), area->pages - pages);
    667673               
    668674                /*
     
    720726                                }
    721727                               
    722                                 /*
    723                                  * Start TLB shootdown sequence.
    724                                  *
    725                                  * The sequence is rather short and can be
    726                                  * repeated multiple times. The reason is that
    727                                  * we don't want to have used_space_remove()
    728                                  * inside the sequence as it may use a blocking
    729                                  * memory allocation for its B+tree. Blocking
    730                                  * while holding the tlblock spinlock is
    731                                  * forbidden and would hit a kernel assertion.
    732                                  */
    733 
    734                                 ipl_t ipl = tlb_shootdown_start(TLB_INVL_PAGES,
    735                                     as->asid, area->base + P2SZ(pages),
    736                                     area->pages - pages);
    737                
    738728                                for (; i < size; i++) {
    739729                                        pte_t *pte = page_mapping_find(as,
     
    753743                                        page_mapping_remove(as, ptr + P2SZ(i));
    754744                                }
    755                
    756                                 /*
    757                                  * Finish TLB shootdown sequence.
    758                                  */
    759                
    760                                 tlb_invalidate_pages(as->asid,
    761                                     area->base + P2SZ(pages),
    762                                     area->pages - pages);
    763                
    764                                 /*
    765                                  * Invalidate software translation caches
    766                                  * (e.g. TSB on sparc64, PHT on ppc32).
    767                                  */
    768                                 as_invalidate_translation_cache(as,
    769                                     area->base + P2SZ(pages),
    770                                     area->pages - pages);
    771                                 tlb_shootdown_finalize(ipl);
    772745                        }
    773746                }
     747               
     748                /*
     749                 * Finish TLB shootdown sequence.
     750                 */
     751               
     752                tlb_invalidate_pages(as->asid, area->base + P2SZ(pages),
     753                    area->pages - pages);
     754               
     755                /*
     756                 * Invalidate software translation caches
     757                 * (e.g. TSB on sparc64, PHT on ppc32).
     758                 */
     759                as_invalidate_translation_cache(as, area->base + P2SZ(pages),
     760                    area->pages - pages);
     761                tlb_shootdown_finalize(ipl);
     762               
    774763                page_table_unlock(as, false);
    775764        } else {
     
    20542043{
    20552044        uintptr_t virt = base;
    2056         as_area_t *area = as_area_create(AS, flags, size,
     2045        as_area_t *area = as_area_create(AS, flags | AS_AREA_CACHEABLE, size,
    20572046            AS_AREA_ATTR_NONE, &anon_backend, NULL, &virt, bound);
    20582047        if (area == NULL)
Note: See TracChangeset for help on using the changeset viewer.