asm-generic-pgalloc-provide-generic-pud_alloc_one-and-pud_free_one.patch removed from -mm tree
The patch titled
Subject: asm-generic: pgalloc: provide generic pud_alloc_one() and pud_free_one()
has been removed from the -mm tree. Its filename was
asm-generic-pgalloc-provide-generic-pud_alloc_one-and-pud_free_one.patch
This patch was dropped because it was merged into mainline or a subsystem tree
------------------------------------------------------
From: Mike Rapoport <[email protected]>
Subject: asm-generic: pgalloc: provide generic pud_alloc_one() and pud_free_one()
Several architectures define pud_alloc_one() as a wrapper for __get_free_page() and pud_free() as a wrapper for free_page().
Provide a generic implementation in asm-generic/pgalloc.h and use it where appropriate.
---
arch/arm64/include/asm/pgalloc.h | 11 ---------- arch/ia64/include/asm/pgalloc.h | 9 -------- arch/mips/include/asm/pgalloc.h | 6 ----- arch/x86/include/asm/pgalloc.h | 15 -------------- include/asm-generic/pgalloc.h | 30 +++++++++++++++++++++++++++++ 5 files changed, 31 insertions(+), 40 deletions(-)
arch/arm64/include/asm/pgalloc.h renamed from arch/arm64/include/asm/pgalloc.h~asm-generic-pgalloc-provide-generic-pud_alloc_one-and-pud_free_one +0 -11
@@ -37,17 +37,6 @@ static inline void __pud_populate(pud_t#if CONFIG_PGTABLE_LEVELS >3 -static inline pud_t *pud_alloc_one (struct mm_struct *mm,unsigned long addr) -{ -return (pud_t *)__get_free_page (GFP_PGTABLE_USER ); -} - -static inline void pud_free (struct mm_struct *mm,pud_t *pudp) -{ -BUG_ON ((unsigned long )pudp & (PAGE_SIZE -1 )); -free_page ((unsigned long )pudp); -} -static inline void __p4d_populate (p4d_t *p4dp,phys_addr_t pudp,p4dval_t prot) {set_p4d (p4dp,__p4d (__phys_to_p4d_val (pudp) | prot));
arch/ia64/include/asm/pgalloc.h renamed from arch/ia64/include/asm/pgalloc.h~asm-generic-pgalloc-provide-generic-pud_alloc_one-and-pud_free_one +0 -9
@@ -41,15 +41,6 @@ p4d_populate(struct mm_struct *mm, p4d_t p4d_val(*p4d_entry) = __pa(pud); } -static inline pud_t *pud_alloc_one (struct mm_struct *mm,unsigned long addr) -{ -return (pud_t *)__get_free_page (GFP_KERNEL | __GFP_ZERO); -} - -static inline void pud_free (struct mm_struct *mm,pud_t *pud) -{ -free_page ((unsigned long )pud); -}#define __pud_free_tlb (tlb, pud, address) pud_free((tlb)->mm, pud)#endif /* CONFIG_PGTABLE_LEVELS == 4 */
arch/mips/include/asm/pgalloc.h renamed from arch/mips/include/asm/pgalloc.h~asm-generic-pgalloc-provide-generic-pud_alloc_one-and-pud_free_one +1 -5
@@ -14,6 +14,7 @@#include <linux/sched.h> #define __HAVE_ARCH_PMD_ALLOC_ONE +#define __HAVE_ARCH_PUD_ALLOC_ONE#include <asm-generic/pgalloc.h> static inline void pmd_populate_kernel(struct mm_struct *mm, pmd_t *pmd,
@@ -87,11 +88,6 @@ static inline pud_t *pud_alloc_one(strucreturn pud; } -static inline void pud_free (struct mm_struct *mm,pud_t *pud) -{ -free_pages ((unsigned long )pud,PUD_ORDER ); -} -static inline void p4d_populate (struct mm_struct *mm,p4d_t *p4d,pud_t *pud) {set_p4d (p4d,__p4d ((unsigned long )pud));
arch/x86/include/asm/pgalloc.h renamed from arch/x86/include/asm/pgalloc.h~asm-generic-pgalloc-provide-generic-pud_alloc_one-and-pud_free_one +0 -15
@@ -123,21 +123,6 @@ static inline void p4d_populate_safe(strset_p4d_safe (p4d,__p4d (_PAGE_TABLE |__pa (pud))); } -static inline pud_t *pud_alloc_one (struct mm_struct *mm,unsigned long addr) -{ -gfp_t gfp =GFP_KERNEL_ACCOUNT ; - -if (mm == &init_mm) - gfp &= ~__GFP_ACCOUNT; -return (pud_t *)get_zeroed_page (gfp); -} - -static inline void pud_free (struct mm_struct *mm,pud_t *pud) -{ -BUG_ON ((unsigned long )pud & (PAGE_SIZE -1 )); -free_page ((unsigned long )pud); -} -extern void ___pud_free_tlb (struct mmu_gather *tlb,pud_t *pud); static inline void __pud_free_tlb(struct mmu_gather *tlb, pud_t *pud,
include/asm-generic/pgalloc.h renamed from include/asm-generic/pgalloc.h~asm-generic-pgalloc-provide-generic-pud_alloc_one-and-pud_free_one +30 -0
@@ -145,6 +145,36 @@ static inline void pmd_free(struct mm_st#endif /* CONFIG_PGTABLE_LEVELS > 2 */ +#if CONFIG_PGTABLE_LEVELS >3 + +#ifndef __HAVE_ARCH_PUD_FREE +/** +* pud_alloc_one - allocate a page for PUD-level page table +* @mm: the mm_struct of the current context +* +* Allocates a page using %GFP_PGTABLE_USER for user context and +* %GFP_PGTABLE_KERNEL for kernel context. +* +* Return: pointer to the allocated memory or %NULL on error +*/ +static inline pud_t *pud_alloc_one (struct mm_struct *mm,unsigned long addr) +{ +gfp_t gfp =GFP_PGTABLE_USER ; + +if (mm == &init_mm) + gfp =GFP_PGTABLE_KERNEL ; +return (pud_t *)get_zeroed_page (gfp); +} +#endif + +static inline void pud_free (struct mm_struct *mm,pud_t *pud) +{ +BUG_ON ((unsigned long )pud & (PAGE_SIZE -1 )); +free_page ((unsigned long )pud); +} + +#endif /* CONFIG_PGTABLE_LEVELS > 3 */ +#endif /* CONFIG_MMU */ #endif /* __ASM_GENERIC_PGALLOC_H */
_
Patches currently in -mm which might be from [email protected] are