Loading arch/x86/mm/pageattr.c +15 −6 Original line number Diff line number Diff line Loading @@ -16,6 +16,9 @@ #include <asm/uaccess.h> #include <asm/pgalloc.h> /* * The current flushing context - we pass it instead of 5 arguments: */ struct cpa_data { unsigned long vaddr; pgprot_t mask_set; Loading Loading @@ -206,6 +209,7 @@ pte_t *lookup_address(unsigned long address, int *level) if (pgd_none(*pgd)) return NULL; pud = pud_offset(pgd, address); if (pud_none(*pud)) return NULL; Loading @@ -223,9 +227,13 @@ pte_t *lookup_address(unsigned long address, int *level) return (pte_t *)pmd; *level = PG_LEVEL_4K; return pte_offset_kernel(pmd, address); } /* * Set the new pmd in all the pgds we know about: */ static void __set_pmd_pte(pte_t *kpte, unsigned long address, pte_t pte) { /* change init_mm */ Loading @@ -248,7 +256,8 @@ static void __set_pmd_pte(pte_t *kpte, unsigned long address, pte_t pte) #endif } static int try_preserve_large_page(pte_t *kpte, unsigned long address, static int try_preserve_large_page(pte_t *kpte, unsigned long address, struct cpa_data *cpa) { unsigned long nextpage_addr, numpages, pmask, psize, flags; Loading Loading @@ -341,17 +350,18 @@ static int try_preserve_large_page(pte_t *kpte, unsigned long address, out_unlock: spin_unlock_irqrestore(&pgd_lock, flags); return res; } static int split_large_page(pte_t *kpte, unsigned long address) { pgprot_t ref_prot; gfp_t gfp_flags = GFP_KERNEL; unsigned long flags, addr, pfn, pfninc = 1; gfp_t gfp_flags = GFP_KERNEL; unsigned int i, level; pte_t *pbase, *tmp; pgprot_t ref_prot; struct page *base; unsigned int i, level; #ifdef CONFIG_DEBUG_PAGEALLOC gfp_flags = GFP_ATOMIC | __GFP_NOWARN; Loading Loading @@ -505,7 +515,6 @@ static int __change_page_attr(unsigned long address, struct cpa_data *cpa) * * Modules and drivers should use the set_memory_* APIs instead. */ static int change_page_attr_addr(struct cpa_data *cpa) { int err; Loading Loading
arch/x86/mm/pageattr.c +15 −6 Original line number Diff line number Diff line Loading @@ -16,6 +16,9 @@ #include <asm/uaccess.h> #include <asm/pgalloc.h> /* * The current flushing context - we pass it instead of 5 arguments: */ struct cpa_data { unsigned long vaddr; pgprot_t mask_set; Loading Loading @@ -206,6 +209,7 @@ pte_t *lookup_address(unsigned long address, int *level) if (pgd_none(*pgd)) return NULL; pud = pud_offset(pgd, address); if (pud_none(*pud)) return NULL; Loading @@ -223,9 +227,13 @@ pte_t *lookup_address(unsigned long address, int *level) return (pte_t *)pmd; *level = PG_LEVEL_4K; return pte_offset_kernel(pmd, address); } /* * Set the new pmd in all the pgds we know about: */ static void __set_pmd_pte(pte_t *kpte, unsigned long address, pte_t pte) { /* change init_mm */ Loading @@ -248,7 +256,8 @@ static void __set_pmd_pte(pte_t *kpte, unsigned long address, pte_t pte) #endif } static int try_preserve_large_page(pte_t *kpte, unsigned long address, static int try_preserve_large_page(pte_t *kpte, unsigned long address, struct cpa_data *cpa) { unsigned long nextpage_addr, numpages, pmask, psize, flags; Loading Loading @@ -341,17 +350,18 @@ static int try_preserve_large_page(pte_t *kpte, unsigned long address, out_unlock: spin_unlock_irqrestore(&pgd_lock, flags); return res; } static int split_large_page(pte_t *kpte, unsigned long address) { pgprot_t ref_prot; gfp_t gfp_flags = GFP_KERNEL; unsigned long flags, addr, pfn, pfninc = 1; gfp_t gfp_flags = GFP_KERNEL; unsigned int i, level; pte_t *pbase, *tmp; pgprot_t ref_prot; struct page *base; unsigned int i, level; #ifdef CONFIG_DEBUG_PAGEALLOC gfp_flags = GFP_ATOMIC | __GFP_NOWARN; Loading Loading @@ -505,7 +515,6 @@ static int __change_page_attr(unsigned long address, struct cpa_data *cpa) * * Modules and drivers should use the set_memory_* APIs instead. */ static int change_page_attr_addr(struct cpa_data *cpa) { int err; Loading