diff --git a/arch/um/include/asm/Kbuild b/arch/um/include/asm/Kbuild
index b30f34a..db2d885 100644
--- a/arch/um/include/asm/Kbuild
+++ b/arch/um/include/asm/Kbuild
@@ -3,3 +3,4 @@ generic-y += hw_irq.h irq_regs.h kdebug.h percpu.h sections.h topology.h xor.h
 generic-y += ftrace.h pci.h io.h param.h delay.h mutex.h current.h exec.h
 generic-y += switch_to.h clkdev.h
 generic-y += trace_clock.h
+header-y += mman.h
diff --git a/arch/um/kernel/skas/mmu.c b/arch/um/kernel/skas/mmu.c
index ff03067..cdcf1a4 100644
--- a/arch/um/kernel/skas/mmu.c
+++ b/arch/um/kernel/skas/mmu.c
@@ -21,6 +21,7 @@ static int init_stub_pte(struct mm_struct *mm, unsigned long proc,
 	pud_t *pud;
 	pmd_t *pmd;
 	pte_t *pte;
+	unsigned long nr_ptes = mm->nr_ptes;
 
 	pgd = pgd_offset(mm, proc);
 	pud = pud_alloc(mm, pgd, proc);
@@ -37,6 +38,10 @@ static int init_stub_pte(struct mm_struct *mm, unsigned long proc,
 
 	*pte = mk_pte(virt_to_page(kernel), __pgprot(_PAGE_PRESENT));
 	*pte = pte_mkread(*pte);
+
+	if (mm->nr_ptes > nr_ptes)
+		mm->nr_ptes--;
+
 	return 0;
 
  out_pte:
@@ -103,7 +108,7 @@ int init_new_context(struct task_struct *task, struct mm_struct *mm)
 
 void uml_setup_stubs(struct mm_struct *mm)
 {
-	int err, ret;
+	int ret;
 
 	if (!skas_needs_stub)
 		return;
@@ -120,15 +125,6 @@ void uml_setup_stubs(struct mm_struct *mm)
 	mm->context.stub_pages[0] = virt_to_page(&__syscall_stub_start);
 	mm->context.stub_pages[1] = virt_to_page(mm->context.id.stack);
 
-	/* dup_mmap already holds mmap_sem */
-	err = install_special_mapping(mm, STUB_START, STUB_END - STUB_START,
-				      VM_READ | VM_MAYREAD | VM_EXEC |
-				      VM_MAYEXEC | VM_DONTCOPY,
-				      mm->context.stub_pages);
-	if (err) {
-		printk(KERN_ERR "install_special_mapping returned %d\n", err);
-		goto out;
-	}
 	return;
 
 out:
diff --git a/mm/mmap.c b/mm/mmap.c
index f681e18..cbd387d 100644
--- a/mm/mmap.c
+++ b/mm/mmap.c
@@ -2754,7 +2754,8 @@ void exit_mmap(struct mm_struct *mm)
 	}
 	vm_unacct_memory(nr_accounted);
 
-	WARN_ON(mm->nr_ptes > (FIRST_USER_ADDRESS+PMD_SIZE-1)>>PMD_SHIFT);
+	if (WARN_ON(mm->nr_ptes > (FIRST_USER_ADDRESS+PMD_SIZE-1)>>PMD_SHIFT))
+		printk(KERN_ERR "XXX mm->nr_ptes: %lu\n", mm->nr_ptes);
 }
 
 /* Insert vm structure into process list sorted by address
