diff --git a/mm/usercopy.c b/mm/usercopy.c
index cb8ccc8..a3e2a71 100644
--- a/mm/usercopy.c
+++ b/mm/usercopy.c
@@ -93,10 +93,13 @@ void* __kmap_atomic_user_page(unsigned long addr,
 	pte_t pte;
 	void* maddr;
 
-	*page = pin_page(addr, write, &pte);
 	*ptlp = &mm->page_table_lock;
-	if ((*page == (struct page *)-1UL) || (!(*page) && !pte_present(pte)))
+	spin_lock(*ptlp);
+	*page = pin_page(addr, write, &pte);
+	if ((*page == (struct page *)-1UL) || (!(*page) && !pte_present(pte))) {
+		spin_unlock(*ptlp);
 		return NULL;
+	}
 
 	if (*page)
 		maddr = kmap_atomic(*page, KM_USER_COPY);
