|
@@ -50,11 +50,11 @@
|
|
|
#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)
|
|
@@ -121,11 +121,13 @@ static void init_espfix_random(void)
|
|
|
|
|
|
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();
|