Ignore:
File:
1 edited

Legend:

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

    r8f80c77 r402eda5  
    239239       
    240240        spinlock_unlock(&asidlock);
     241        interrupts_restore(ipl);
     242
    241243       
    242244        /*
     
    265267        page_table_destroy(NULL);
    266268#endif
    267        
    268         interrupts_restore(ipl);
    269269       
    270270        slab_free(as_slab, as);
     
    327327                return NULL;
    328328       
    329         ipl_t ipl = interrupts_disable();
    330329        mutex_lock(&as->lock);
    331330       
    332331        if (!check_area_conflicts(as, base, size, NULL)) {
    333332                mutex_unlock(&as->lock);
    334                 interrupts_restore(ipl);
    335333                return NULL;
    336334        }
     
    357355       
    358356        mutex_unlock(&as->lock);
    359         interrupts_restore(ipl);
    360357       
    361358        return area;
     
    376373int as_area_resize(as_t *as, uintptr_t address, size_t size, unsigned int flags)
    377374{
    378         ipl_t ipl = interrupts_disable();
    379375        mutex_lock(&as->lock);
    380376       
     
    386382        if (!area) {
    387383                mutex_unlock(&as->lock);
    388                 interrupts_restore(ipl);
    389384                return ENOENT;
    390385        }
     
    398393                mutex_unlock(&area->lock);
    399394                mutex_unlock(&as->lock);
    400                 interrupts_restore(ipl);
    401395                return ENOTSUP;
    402396        }
     
    410404                mutex_unlock(&area->lock);
    411405                mutex_unlock(&as->lock);
    412                 interrupts_restore(ipl);
    413406                return ENOTSUP;
    414407        }
     
    422415                mutex_unlock(&area->lock);
    423416                mutex_unlock(&as->lock);
    424                 interrupts_restore(ipl);
    425417                return EPERM;
    426418        }
     
    441433                 *
    442434                 */
    443                 tlb_shootdown_start(TLB_INVL_PAGES, as->asid, area->base +
    444                     pages * PAGE_SIZE, area->pages - pages);
     435                ipl_t ipl = tlb_shootdown_start(TLB_INVL_PAGES, as->asid,
     436                    area->base + pages * PAGE_SIZE, area->pages - pages);
    445437               
    446438                /*
     
    536528                as_invalidate_translation_cache(as, area->base +
    537529                    pages * PAGE_SIZE, area->pages - pages);
    538                 tlb_shootdown_finalize();
     530                tlb_shootdown_finalize(ipl);
    539531               
    540532                page_table_unlock(as, false);
     
    549541                        mutex_unlock(&area->lock);
    550542                        mutex_unlock(&as->lock);
    551                         interrupts_restore(ipl);
    552543                        return EADDRNOTAVAIL;
    553544                }
     
    558549        mutex_unlock(&area->lock);
    559550        mutex_unlock(&as->lock);
    560         interrupts_restore(ipl);
    561551       
    562552        return 0;
     
    573563int as_area_destroy(as_t *as, uintptr_t address)
    574564{
    575         ipl_t ipl = interrupts_disable();
    576565        mutex_lock(&as->lock);
    577566       
     
    579568        if (!area) {
    580569                mutex_unlock(&as->lock);
    581                 interrupts_restore(ipl);
    582570                return ENOENT;
    583571        }
     
    590578         * Start TLB shootdown sequence.
    591579         */
    592         tlb_shootdown_start(TLB_INVL_PAGES, as->asid, area->base, area->pages);
     580        ipl_t ipl = tlb_shootdown_start(TLB_INVL_PAGES, as->asid, area->base,
     581            area->pages);
    593582       
    594583        /*
     
    637626         */
    638627        as_invalidate_translation_cache(as, area->base, area->pages);
    639         tlb_shootdown_finalize();
     628        tlb_shootdown_finalize(ipl);
    640629       
    641630        page_table_unlock(as, false);
     
    659648       
    660649        mutex_unlock(&as->lock);
    661         interrupts_restore(ipl);
    662650        return 0;
    663651}
     
    690678    as_t *dst_as, uintptr_t dst_base, unsigned int dst_flags_mask)
    691679{
    692         ipl_t ipl = interrupts_disable();
    693680        mutex_lock(&src_as->lock);
    694681        as_area_t *src_area = find_area_and_lock(src_as, src_base);
     
    699686                 */
    700687                mutex_unlock(&src_as->lock);
    701                 interrupts_restore(ipl);
    702688                return ENOENT;
    703689        }
     
    711697                mutex_unlock(&src_area->lock);
    712698                mutex_unlock(&src_as->lock);
    713                 interrupts_restore(ipl);
    714699                return ENOTSUP;
    715700        }
     
    728713                mutex_unlock(&src_area->lock);
    729714                mutex_unlock(&src_as->lock);
    730                 interrupts_restore(ipl);
    731715                return EPERM;
    732716        }
     
    777761                sh_info_remove_reference(sh_info);
    778762               
    779                 interrupts_restore(ipl);
    780763                return ENOMEM;
    781764        }
     
    794777        mutex_unlock(&dst_as->lock);
    795778       
    796         interrupts_restore(ipl);
    797        
    798779        return 0;
    799780}
     
    816797        };
    817798
    818         ASSERT(interrupts_disabled());
    819799        ASSERT(mutex_locked(&area->lock));
    820800       
     
    844824        unsigned int page_flags = area_flags_to_page_flags(flags);
    845825       
    846         ipl_t ipl = interrupts_disable();
    847826        mutex_lock(&as->lock);
    848827       
     
    850829        if (!area) {
    851830                mutex_unlock(&as->lock);
    852                 interrupts_restore(ipl);
    853831                return ENOENT;
    854832        }
     
    859837                mutex_unlock(&area->lock);
    860838                mutex_unlock(&as->lock);
    861                 interrupts_restore(ipl);
    862839                return ENOTSUP;
    863840        }
     
    889866         *
    890867         */
    891         tlb_shootdown_start(TLB_INVL_PAGES, as->asid, area->base, area->pages);
     868        ipl_t ipl = tlb_shootdown_start(TLB_INVL_PAGES, as->asid, area->base,
     869            area->pages);
    892870       
    893871        /*
     
    936914         */
    937915        as_invalidate_translation_cache(as, area->base, area->pages);
    938         tlb_shootdown_finalize();
     916        tlb_shootdown_finalize(ipl);
    939917       
    940918        page_table_unlock(as, false);
     
    978956        mutex_unlock(&area->lock);
    979957        mutex_unlock(&as->lock);
    980         interrupts_restore(ipl);
    981958       
    982959        return 0;
     
    12191196unsigned int as_area_get_flags(as_area_t *area)
    12201197{
    1221         ASSERT(interrupts_disabled());
    12221198        ASSERT(mutex_locked(&area->lock));
    12231199
     
    13211297as_area_t *find_area_and_lock(as_t *as, uintptr_t va)
    13221298{
    1323         ASSERT(interrupts_disabled());
    13241299        ASSERT(mutex_locked(&as->lock));
    13251300
     
    13861361    as_area_t *avoid_area)
    13871362{
    1388         ASSERT(interrupts_disabled());
    13891363        ASSERT(mutex_locked(&as->lock));
    13901364
     
    14861460        size_t size;
    14871461       
    1488         ipl_t ipl = interrupts_disable();
    14891462        page_table_lock(AS, true);
    14901463        as_area_t *src_area = find_area_and_lock(AS, base);
     
    14971470       
    14981471        page_table_unlock(AS, true);
    1499         interrupts_restore(ipl);
    15001472        return size;
    15011473}
     
    20702042void as_get_area_info(as_t *as, as_area_info_t **obuf, size_t *osize)
    20712043{
    2072         ipl_t ipl = interrupts_disable();
    20732044        mutex_lock(&as->lock);
    20742045       
     
    21142085       
    21152086        mutex_unlock(&as->lock);
    2116         interrupts_restore(ipl);
    21172087       
    21182088        *obuf = info;
     
    21272097void as_print(as_t *as)
    21282098{
    2129         ipl_t ipl = interrupts_disable();
    21302099        mutex_lock(&as->lock);
    21312100       
     
    21502119       
    21512120        mutex_unlock(&as->lock);
    2152         interrupts_restore(ipl);
    21532121}
    21542122
Note: See TracChangeset for help on using the changeset viewer.