diff options
| author | Mark Brown <broonie@kernel.org> | 2020-08-25 11:01:46 +0100 | 
|---|---|---|
| committer | Mark Brown <broonie@kernel.org> | 2020-08-25 11:01:46 +0100 | 
| commit | 3bec5b6aae830355e786e204b20a7cea38c3a8ed (patch) | |
| tree | fd597b87faf55ceb2a207ee94f4feca6276696db /include/linux/hugetlb.h | |
| parent | a577f3456c0a2fac3dee037c483753e6e68f3e49 (diff) | |
| parent | d012a7190fc1fd72ed48911e77ca97ba4521bccd (diff) | |
Merge tag 'v5.9-rc2' into regulator-5.9
Linux 5.9-rc2
Diffstat (limited to 'include/linux/hugetlb.h')
| -rw-r--r-- | include/linux/hugetlb.h | 53 | 
1 files changed, 40 insertions, 13 deletions
diff --git a/include/linux/hugetlb.h b/include/linux/hugetlb.h index 50650d0d01b9..d5cc5f802dd4 100644 --- a/include/linux/hugetlb.h +++ b/include/linux/hugetlb.h @@ -10,6 +10,7 @@  #include <linux/list.h>  #include <linux/kref.h>  #include <linux/pgtable.h> +#include <linux/gfp.h>  struct ctl_table;  struct user_struct; @@ -164,7 +165,8 @@ pte_t *huge_pte_alloc(struct mm_struct *mm,  			unsigned long addr, unsigned long sz);  pte_t *huge_pte_offset(struct mm_struct *mm,  		       unsigned long addr, unsigned long sz); -int huge_pmd_unshare(struct mm_struct *mm, unsigned long *addr, pte_t *ptep); +int huge_pmd_unshare(struct mm_struct *mm, struct vm_area_struct *vma, +				unsigned long *addr, pte_t *ptep);  void adjust_range_if_pmd_sharing_possible(struct vm_area_struct *vma,  				unsigned long *start, unsigned long *end);  struct page *follow_huge_addr(struct mm_struct *mm, unsigned long address, @@ -203,8 +205,9 @@ static inline struct address_space *hugetlb_page_mapping_lock_write(  	return NULL;  } -static inline int huge_pmd_unshare(struct mm_struct *mm, unsigned long *addr, -					pte_t *ptep) +static inline int huge_pmd_unshare(struct mm_struct *mm, +					struct vm_area_struct *vma, +					unsigned long *addr, pte_t *ptep)  {  	return 0;  } @@ -504,13 +507,10 @@ struct huge_bootmem_page {  struct page *alloc_huge_page(struct vm_area_struct *vma,  				unsigned long addr, int avoid_reserve); -struct page *alloc_huge_page_node(struct hstate *h, int nid);  struct page *alloc_huge_page_nodemask(struct hstate *h, int preferred_nid, -				nodemask_t *nmask); +				nodemask_t *nmask, gfp_t gfp_mask);  struct page *alloc_huge_page_vma(struct hstate *h, struct vm_area_struct *vma,  				unsigned long address); -struct page *alloc_migrate_huge_page(struct hstate *h, gfp_t gfp_mask, -				     int nid, nodemask_t *nmask);  int huge_add_to_page_cache(struct page *page, struct address_space *mapping,  			pgoff_t idx); @@ -692,6 +692,27 @@ static inline bool hugepage_movable_supported(struct hstate *h)  	return true;  } +/* Movability of hugepages depends on migration support. */ +static inline gfp_t htlb_alloc_mask(struct hstate *h) +{ +	if (hugepage_movable_supported(h)) +		return GFP_HIGHUSER_MOVABLE; +	else +		return GFP_HIGHUSER; +} + +static inline gfp_t htlb_modify_alloc_mask(struct hstate *h, gfp_t gfp_mask) +{ +	gfp_t modified_mask = htlb_alloc_mask(h); + +	/* Some callers might want to enforce node */ +	modified_mask |= (gfp_mask & __GFP_THISNODE); + +	modified_mask |= (gfp_mask & __GFP_NOWARN); + +	return modified_mask; +} +  static inline spinlock_t *huge_pte_lockptr(struct hstate *h,  					   struct mm_struct *mm, pte_t *pte)  { @@ -759,13 +780,9 @@ static inline struct page *alloc_huge_page(struct vm_area_struct *vma,  	return NULL;  } -static inline struct page *alloc_huge_page_node(struct hstate *h, int nid) -{ -	return NULL; -} -  static inline struct page * -alloc_huge_page_nodemask(struct hstate *h, int preferred_nid, nodemask_t *nmask) +alloc_huge_page_nodemask(struct hstate *h, int preferred_nid, +			nodemask_t *nmask, gfp_t gfp_mask)  {  	return NULL;  } @@ -878,6 +895,16 @@ static inline bool hugepage_movable_supported(struct hstate *h)  	return false;  } +static inline gfp_t htlb_alloc_mask(struct hstate *h) +{ +	return 0; +} + +static inline gfp_t htlb_modify_alloc_mask(struct hstate *h, gfp_t gfp_mask) +{ +	return 0; +} +  static inline spinlock_t *huge_pte_lockptr(struct hstate *h,  					   struct mm_struct *mm, pte_t *pte)  {  | 
