Skip to content

Commit

Permalink
x86/mm/pageattr: Add a PTE pagetable populating function
Browse files Browse the repository at this point in the history
Handle last level by unconditionally writing the PTEs into the PTE page
while paying attention to the NX bit.

Signed-off-by: Borislav Petkov <bp@suse.de>
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
  • Loading branch information
Borislav Petkov authored and Matt Fleming committed Nov 2, 2013
1 parent f900a4b commit c6b6f36
Showing 1 changed file with 21 additions and 1 deletion.
22 changes: 21 additions & 1 deletion arch/x86/mm/pageattr.c
Original file line number Diff line number Diff line change
Expand Up @@ -686,7 +686,27 @@ static int alloc_pmd_page(pud_t *pud)
return 0;
}

#define populate_pte(cpa, start, end, pages, pmd, pgprot) do {} while (0)
static void populate_pte(struct cpa_data *cpa,
unsigned long start, unsigned long end,
unsigned num_pages, pmd_t *pmd, pgprot_t pgprot)
{
pte_t *pte;

pte = pte_offset_kernel(pmd, start);

while (num_pages-- && start < end) {

/* deal with the NX bit */
if (!(pgprot_val(pgprot) & _PAGE_NX))
cpa->pfn &= ~_PAGE_NX;

set_pte(pte, pfn_pte(cpa->pfn >> PAGE_SHIFT, pgprot));

start += PAGE_SIZE;
cpa->pfn += PAGE_SIZE;
pte++;
}
}

static int populate_pmd(struct cpa_data *cpa,
unsigned long start, unsigned long end,
Expand Down

0 comments on commit c6b6f36

Please sign in to comment.