diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c
index 5c3305e0507861321e9a81a3f344f6e04c726956..b10b7f17ea58d414576ded22b3c1b713fb06d6b6 100644
--- a/arch/x86/mm/init_64.c
+++ b/arch/x86/mm/init_64.c
@@ -320,7 +320,8 @@ phys_pmd_init(pmd_t *pmd_page, unsigned long address, unsigned long end)
 		}
 
 		if (pmd_val(*pmd)) {
-			phys_pte_update(pmd, address, end);
+			if (!pmd_large(*pmd))
+				phys_pte_update(pmd, address, end);
 			continue;
 		}