#define MODULES_END   __fix_to_virt(__end_of_fixed_addresses + 1)
 #define MODULES_LEN   (MODULES_END - MODULES_VADDR)
 #define ESPFIX_PGD_ENTRY _AC(-2, UL)
-#define ESPFIX_BASE_ADDR (ESPFIX_PGD_ENTRY << PGDIR_SHIFT)
+#define ESPFIX_BASE_ADDR (ESPFIX_PGD_ENTRY << P4D_SHIFT)
 #define EFI_VA_START    ( -4 * (_AC(1, UL) << 30))
 #define EFI_VA_END      (-68 * (_AC(1, UL) << 30))
 
 
 #define ESPFIX_STACKS_PER_PAGE (PAGE_SIZE/ESPFIX_STACK_SIZE)
 
 /* There is address space for how many espfix pages? */
-#define ESPFIX_PAGE_SPACE      (1UL << (PGDIR_SHIFT-PAGE_SHIFT-16))
+#define ESPFIX_PAGE_SPACE      (1UL << (P4D_SHIFT-PAGE_SHIFT-16))
 
 #define ESPFIX_MAX_CPUS                (ESPFIX_STACKS_PER_PAGE * ESPFIX_PAGE_SPACE)
 #if CONFIG_NR_CPUS > ESPFIX_MAX_CPUS
-# error "Need more than one PGD for the ESPFIX hack"
+# error "Need more virtual address space for the ESPFIX hack"
 #endif
 
 #define PGALLOC_GFP (GFP_KERNEL | __GFP_NOTRACK | __GFP_ZERO)
 
 void __init init_espfix_bsp(void)
 {
-       pgd_t *pgd_p;
+       pgd_t *pgd;
+       p4d_t *p4d;
 
        /* Install the espfix pud into the kernel page directory */
-       pgd_p = &init_level4_pgt[pgd_index(ESPFIX_BASE_ADDR)];
-       pgd_populate(&init_mm, pgd_p, (pud_t *)espfix_pud_page);
+       pgd = &init_level4_pgt[pgd_index(ESPFIX_BASE_ADDR)];
+       p4d = p4d_alloc(&init_mm, pgd, ESPFIX_BASE_ADDR);
+       p4d_populate(&init_mm, p4d, espfix_pud_page);
 
        /* Randomize the locations */
        init_espfix_random();