diff --git a/hermit/arch/x86/mm/page.c b/hermit/arch/x86/mm/page.c index f2b62aa3d..9c415a620 100644 --- a/hermit/arch/x86/mm/page.c +++ b/hermit/arch/x86/mm/page.c @@ -173,7 +173,7 @@ out: int page_unmap(size_t viraddr, size_t npages) { - //uint8_t ipi = 0; + uint8_t ipi = 0; spinlock_irqsave_lock(&page_lock); @@ -186,11 +186,8 @@ int page_unmap(size_t viraddr, size_t npages) //ipi = 1; } - /* - * IPI isn't required because unmaping is only used by shutdown the system - */ - /*if (ipi) - ipi_tlb_flush();*/ + if (ipi) + ipi_tlb_flush(); spinlock_irqsave_unlock(&page_lock); diff --git a/hermit/mm/malloc.c b/hermit/mm/malloc.c index acd2ec4b3..204a358d5 100644 --- a/hermit/mm/malloc.c +++ b/hermit/mm/malloc.c @@ -223,9 +223,11 @@ int destroy_stack(void* viraddr, size_t sz) return -ENOMEM; // unmap and destroy stack + int8_t flag = irq_nested_disable(); vma_free((size_t)viraddr-PAGE_SIZE, (size_t)viraddr+(npages+1)*PAGE_SIZE); page_unmap((size_t)viraddr, npages); put_pages(phyaddr, npages); + irq_nested_enable(flag); return 0; }