1 #ifndef _LINUX_HUGETLB_H 2 #define _LINUX_HUGETLB_H 3 4 #include <linux/mm_types.h> 5 #include <linux/mmdebug.h> 6 #include <linux/fs.h> 7 #include <linux/hugetlb_inline.h> 8 #include <linux/cgroup.h> 9 #include <linux/list.h> 10 #include <linux/kref.h> 11 #include <asm/pgtable.h> 12 13 struct ctl_table; 14 struct user_struct; 15 struct mmu_gather; 16 17 #ifdef CONFIG_HUGETLB_PAGE 18 19 #include <linux/mempolicy.h> 20 #include <linux/shm.h> 21 #include <asm/tlbflush.h> 22 23 struct hugepage_subpool { 24 spinlock_t lock; 25 long count; 26 long max_hpages; /* Maximum huge pages or -1 if no maximum. */ 27 long used_hpages; /* Used count against maximum, includes */ 28 /* both alloced and reserved pages. */ 29 struct hstate *hstate; 30 long min_hpages; /* Minimum huge pages or -1 if no minimum. */ 31 long rsv_hpages; /* Pages reserved against global pool to */ 32 /* sasitfy minimum size. */ 33 }; 34 35 struct resv_map { 36 struct kref refs; 37 spinlock_t lock; 38 struct list_head regions; 39 long adds_in_progress; 40 struct list_head region_cache; 41 long region_cache_count; 42 }; 43 extern struct resv_map *resv_map_alloc(void); 44 void resv_map_release(struct kref *ref); 45 46 extern spinlock_t hugetlb_lock; 47 extern int hugetlb_max_hstate __read_mostly; 48 #define for_each_hstate(h) \ 49 for ((h) = hstates; (h) < &hstates[hugetlb_max_hstate]; (h)++) 50 51 struct hugepage_subpool *hugepage_new_subpool(struct hstate *h, long max_hpages, 52 long min_hpages); 53 void hugepage_put_subpool(struct hugepage_subpool *spool); 54 55 void reset_vma_resv_huge_pages(struct vm_area_struct *vma); 56 int hugetlb_sysctl_handler(struct ctl_table *, int, void __user *, size_t *, loff_t *); 57 int hugetlb_overcommit_handler(struct ctl_table *, int, void __user *, size_t *, loff_t *); 58 int hugetlb_treat_movable_handler(struct ctl_table *, int, void __user *, size_t *, loff_t *); 59 60 #ifdef CONFIG_NUMA 61 int hugetlb_mempolicy_sysctl_handler(struct ctl_table *, int, 62 void __user *, size_t *, loff_t *); 63 #endif 64 65 int copy_hugetlb_page_range(struct mm_struct *, struct mm_struct *, struct vm_area_struct *); 66 long follow_hugetlb_page(struct mm_struct *, struct vm_area_struct *, 67 struct page **, struct vm_area_struct **, 68 unsigned long *, unsigned long *, long, unsigned int, 69 int *); 70 void unmap_hugepage_range(struct vm_area_struct *, 71 unsigned long, unsigned long, struct page *); 72 void __unmap_hugepage_range_final(struct mmu_gather *tlb, 73 struct vm_area_struct *vma, 74 unsigned long start, unsigned long end, 75 struct page *ref_page); 76 void __unmap_hugepage_range(struct mmu_gather *tlb, struct vm_area_struct *vma, 77 unsigned long start, unsigned long end, 78 struct page *ref_page); 79 void hugetlb_report_meminfo(struct seq_file *); 80 int hugetlb_report_node_meminfo(int, char *); 81 void hugetlb_show_meminfo(void); 82 unsigned long hugetlb_total_pages(void); 83 int hugetlb_fault(struct mm_struct *mm, struct vm_area_struct *vma, 84 unsigned long address, unsigned int flags); 85 int hugetlb_mcopy_atomic_pte(struct mm_struct *dst_mm, pte_t *dst_pte, 86 struct vm_area_struct *dst_vma, 87 unsigned long dst_addr, 88 unsigned long src_addr, 89 struct page **pagep); 90 int hugetlb_reserve_pages(struct inode *inode, long from, long to, 91 struct vm_area_struct *vma, 92 vm_flags_t vm_flags); 93 long hugetlb_unreserve_pages(struct inode *inode, long start, long end, 94 long freed); 95 int dequeue_hwpoisoned_huge_page(struct page *page); 96 bool isolate_huge_page(struct page *page, struct list_head *list); 97 void putback_active_hugepage(struct page *page); 98 void free_huge_page(struct page *page); 99 void hugetlb_fix_reserve_counts(struct inode *inode); 100 extern struct mutex *hugetlb_fault_mutex_table; 101 u32 hugetlb_fault_mutex_hash(struct hstate *h, struct mm_struct *mm, 102 struct vm_area_struct *vma, 103 struct address_space *mapping, 104 pgoff_t idx, unsigned long address); 105 106 pte_t *huge_pmd_share(struct mm_struct *mm, unsigned long addr, pud_t *pud); 107 108 extern int hugepages_treat_as_movable; 109 extern int sysctl_hugetlb_shm_group; 110 extern struct list_head huge_boot_pages; 111 112 /* arch callbacks */ 113 114 pte_t *huge_pte_alloc(struct mm_struct *mm, 115 unsigned long addr, unsigned long sz); 116 pte_t *huge_pte_offset(struct mm_struct *mm, unsigned long addr); 117 int huge_pmd_unshare(struct mm_struct *mm, unsigned long *addr, pte_t *ptep); 118 struct page *follow_huge_addr(struct mm_struct *mm, unsigned long address, 119 int write); 120 struct page *follow_huge_pmd(struct mm_struct *mm, unsigned long address, 121 pmd_t *pmd, int flags); 122 struct page *follow_huge_pud(struct mm_struct *mm, unsigned long address, 123 pud_t *pud, int flags); 124 int pmd_huge(pmd_t pmd); 125 int pud_huge(pud_t pmd); 126 unsigned long hugetlb_change_protection(struct vm_area_struct *vma, 127 unsigned long address, unsigned long end, pgprot_t newprot); 128 129 #else /* !CONFIG_HUGETLB_PAGE */ 130 131 static inline void reset_vma_resv_huge_pages(struct vm_area_struct *vma) 132 { 133 } 134 135 static inline unsigned long hugetlb_total_pages(void) 136 { 137 return 0; 138 } 139 140 #define follow_hugetlb_page(m,v,p,vs,a,b,i,w,n) ({ BUG(); 0; }) 141 #define follow_huge_addr(mm, addr, write) ERR_PTR(-EINVAL) 142 #define copy_hugetlb_page_range(src, dst, vma) ({ BUG(); 0; }) 143 static inline void hugetlb_report_meminfo(struct seq_file *m) 144 { 145 } 146 #define hugetlb_report_node_meminfo(n, buf) 0 147 static inline void hugetlb_show_meminfo(void) 148 { 149 } 150 #define follow_huge_pmd(mm, addr, pmd, flags) NULL 151 #define follow_huge_pud(mm, addr, pud, flags) NULL 152 #define prepare_hugepage_range(file, addr, len) (-EINVAL) 153 #define pmd_huge(x) 0 154 #define pud_huge(x) 0 155 #define is_hugepage_only_range(mm, addr, len) 0 156 #define hugetlb_free_pgd_range(tlb, addr, end, floor, ceiling) ({BUG(); 0; }) 157 #define hugetlb_fault(mm, vma, addr, flags) ({ BUG(); 0; }) 158 #define hugetlb_mcopy_atomic_pte(dst_mm, dst_pte, dst_vma, dst_addr, \ 159 src_addr, pagep) ({ BUG(); 0; }) 160 #define huge_pte_offset(mm, address) 0 161 static inline int dequeue_hwpoisoned_huge_page(struct page *page) 162 { 163 return 0; 164 } 165 166 static inline bool isolate_huge_page(struct page *page, struct list_head *list) 167 { 168 return false; 169 } 170 #define putback_active_hugepage(p) do {} while (0) 171 172 static inline unsigned long hugetlb_change_protection(struct vm_area_struct *vma, 173 unsigned long address, unsigned long end, pgprot_t newprot) 174 { 175 return 0; 176 } 177 178 static inline void __unmap_hugepage_range_final(struct mmu_gather *tlb, 179 struct vm_area_struct *vma, unsigned long start, 180 unsigned long end, struct page *ref_page) 181 { 182 BUG(); 183 } 184 185 static inline void __unmap_hugepage_range(struct mmu_gather *tlb, 186 struct vm_area_struct *vma, unsigned long start, 187 unsigned long end, struct page *ref_page) 188 { 189 BUG(); 190 } 191 192 #endif /* !CONFIG_HUGETLB_PAGE */ 193 /* 194 * hugepages at page global directory. If arch support 195 * hugepages at pgd level, they need to define this. 196 */ 197 #ifndef pgd_huge 198 #define pgd_huge(x) 0 199 #endif 200 201 #ifndef pgd_write 202 static inline int pgd_write(pgd_t pgd) 203 { 204 BUG(); 205 return 0; 206 } 207 #endif 208 209 #ifndef pud_write 210 static inline int pud_write(pud_t pud) 211 { 212 BUG(); 213 return 0; 214 } 215 #endif 216 217 #ifndef is_hugepd 218 /* 219 * Some architectures requires a hugepage directory format that is 220 * required to support multiple hugepage sizes. For example 221 * a4fe3ce76 "powerpc/mm: Allow more flexible layouts for hugepage pagetables" 222 * introduced the same on powerpc. This allows for a more flexible hugepage 223 * pagetable layout. 224 */ 225 typedef struct { unsigned long pd; } hugepd_t; 226 #define is_hugepd(hugepd) (0) 227 #define __hugepd(x) ((hugepd_t) { (x) }) 228 static inline int gup_huge_pd(hugepd_t hugepd, unsigned long addr, 229 unsigned pdshift, unsigned long end, 230 int write, struct page **pages, int *nr) 231 { 232 return 0; 233 } 234 #else 235 extern int gup_huge_pd(hugepd_t hugepd, unsigned long addr, 236 unsigned pdshift, unsigned long end, 237 int write, struct page **pages, int *nr); 238 #endif 239 240 #define HUGETLB_ANON_FILE "anon_hugepage" 241 242 enum { 243 /* 244 * The file will be used as an shm file so shmfs accounting rules 245 * apply 246 */ 247 HUGETLB_SHMFS_INODE = 1, 248 /* 249 * The file is being created on the internal vfs mount and shmfs 250 * accounting rules do not apply 251 */ 252 HUGETLB_ANONHUGE_INODE = 2, 253 }; 254 255 #ifdef CONFIG_HUGETLBFS 256 struct hugetlbfs_sb_info { 257 long max_inodes; /* inodes allowed */ 258 long free_inodes; /* inodes free */ 259 spinlock_t stat_lock; 260 struct hstate *hstate; 261 struct hugepage_subpool *spool; 262 }; 263 264 static inline struct hugetlbfs_sb_info *HUGETLBFS_SB(struct super_block *sb) 265 { 266 return sb->s_fs_info; 267 } 268 269 extern const struct file_operations hugetlbfs_file_operations; 270 extern const struct vm_operations_struct hugetlb_vm_ops; 271 struct file *hugetlb_file_setup(const char *name, size_t size, vm_flags_t acct, 272 struct user_struct **user, int creat_flags, 273 int page_size_log); 274 275 static inline bool is_file_hugepages(struct file *file) 276 { 277 if (file->f_op == &hugetlbfs_file_operations) 278 return true; 279 280 return is_file_shm_hugepages(file); 281 } 282 283 284 #else /* !CONFIG_HUGETLBFS */ 285 286 #define is_file_hugepages(file) false 287 static inline struct file * 288 hugetlb_file_setup(const char *name, size_t size, vm_flags_t acctflag, 289 struct user_struct **user, int creat_flags, 290 int page_size_log) 291 { 292 return ERR_PTR(-ENOSYS); 293 } 294 295 #endif /* !CONFIG_HUGETLBFS */ 296 297 #ifdef HAVE_ARCH_HUGETLB_UNMAPPED_AREA 298 unsigned long hugetlb_get_unmapped_area(struct file *file, unsigned long addr, 299 unsigned long len, unsigned long pgoff, 300 unsigned long flags); 301 #endif /* HAVE_ARCH_HUGETLB_UNMAPPED_AREA */ 302 303 #ifdef CONFIG_HUGETLB_PAGE 304 305 #define HSTATE_NAME_LEN 32 306 /* Defines one hugetlb page size */ 307 struct hstate { 308 int next_nid_to_alloc; 309 int next_nid_to_free; 310 unsigned int order; 311 unsigned long mask; 312 unsigned long max_huge_pages; 313 unsigned long nr_huge_pages; 314 unsigned long free_huge_pages; 315 unsigned long resv_huge_pages; 316 unsigned long surplus_huge_pages; 317 unsigned long nr_overcommit_huge_pages; 318 struct list_head hugepage_activelist; 319 struct list_head hugepage_freelists[MAX_NUMNODES]; 320 unsigned int nr_huge_pages_node[MAX_NUMNODES]; 321 unsigned int free_huge_pages_node[MAX_NUMNODES]; 322 unsigned int surplus_huge_pages_node[MAX_NUMNODES]; 323 #ifdef CONFIG_CGROUP_HUGETLB 324 /* cgroup control files */ 325 struct cftype cgroup_files[5]; 326 #endif 327 char name[HSTATE_NAME_LEN]; 328 }; 329 330 struct huge_bootmem_page { 331 struct list_head list; 332 struct hstate *hstate; 333 #ifdef CONFIG_HIGHMEM 334 phys_addr_t phys; 335 #endif 336 }; 337 338 struct page *alloc_huge_page(struct vm_area_struct *vma, 339 unsigned long addr, int avoid_reserve); 340 struct page *alloc_huge_page_node(struct hstate *h, int nid); 341 struct page *alloc_huge_page_noerr(struct vm_area_struct *vma, 342 unsigned long addr, int avoid_reserve); 343 int huge_add_to_page_cache(struct page *page, struct address_space *mapping, 344 pgoff_t idx); 345 346 /* arch callback */ 347 int __init alloc_bootmem_huge_page(struct hstate *h); 348 349 void __init hugetlb_bad_size(void); 350 void __init hugetlb_add_hstate(unsigned order); 351 struct hstate *size_to_hstate(unsigned long size); 352 353 #ifndef HUGE_MAX_HSTATE 354 #define HUGE_MAX_HSTATE 1 355 #endif 356 357 extern struct hstate hstates[HUGE_MAX_HSTATE]; 358 extern unsigned int default_hstate_idx; 359 360 #define default_hstate (hstates[default_hstate_idx]) 361 362 static inline struct hstate *hstate_inode(struct inode *i) 363 { 364 return HUGETLBFS_SB(i->i_sb)->hstate; 365 } 366 367 static inline struct hstate *hstate_file(struct file *f) 368 { 369 return hstate_inode(file_inode(f)); 370 } 371 372 static inline struct hstate *hstate_sizelog(int page_size_log) 373 { 374 if (!page_size_log) 375 return &default_hstate; 376 377 return size_to_hstate(1UL << page_size_log); 378 } 379 380 static inline struct hstate *hstate_vma(struct vm_area_struct *vma) 381 { 382 return hstate_file(vma->vm_file); 383 } 384 385 static inline unsigned long huge_page_size(struct hstate *h) 386 { 387 return (unsigned long)PAGE_SIZE << h->order; 388 } 389 390 extern unsigned long vma_kernel_pagesize(struct vm_area_struct *vma); 391 392 extern unsigned long vma_mmu_pagesize(struct vm_area_struct *vma); 393 394 static inline unsigned long huge_page_mask(struct hstate *h) 395 { 396 return h->mask; 397 } 398 399 static inline unsigned int huge_page_order(struct hstate *h) 400 { 401 return h->order; 402 } 403 404 static inline unsigned huge_page_shift(struct hstate *h) 405 { 406 return h->order + PAGE_SHIFT; 407 } 408 409 static inline bool hstate_is_gigantic(struct hstate *h) 410 { 411 return huge_page_order(h) >= MAX_ORDER; 412 } 413 414 static inline unsigned int pages_per_huge_page(struct hstate *h) 415 { 416 return 1 << h->order; 417 } 418 419 static inline unsigned int blocks_per_huge_page(struct hstate *h) 420 { 421 return huge_page_size(h) / 512; 422 } 423 424 #include <asm/hugetlb.h> 425 426 #ifndef arch_make_huge_pte 427 static inline pte_t arch_make_huge_pte(pte_t entry, struct vm_area_struct *vma, 428 struct page *page, int writable) 429 { 430 return entry; 431 } 432 #endif 433 434 static inline struct hstate *page_hstate(struct page *page) 435 { 436 VM_BUG_ON_PAGE(!PageHuge(page), page); 437 return size_to_hstate(PAGE_SIZE << compound_order(page)); 438 } 439 440 static inline unsigned hstate_index_to_shift(unsigned index) 441 { 442 return hstates[index].order + PAGE_SHIFT; 443 } 444 445 static inline int hstate_index(struct hstate *h) 446 { 447 return h - hstates; 448 } 449 450 pgoff_t __basepage_index(struct page *page); 451 452 /* Return page->index in PAGE_SIZE units */ 453 static inline pgoff_t basepage_index(struct page *page) 454 { 455 if (!PageCompound(page)) 456 return page->index; 457 458 return __basepage_index(page); 459 } 460 461 extern int dissolve_free_huge_pages(unsigned long start_pfn, 462 unsigned long end_pfn); 463 static inline bool hugepage_migration_supported(struct hstate *h) 464 { 465 #ifdef CONFIG_ARCH_ENABLE_HUGEPAGE_MIGRATION 466 return huge_page_shift(h) == PMD_SHIFT; 467 #else 468 return false; 469 #endif 470 } 471 472 static inline spinlock_t *huge_pte_lockptr(struct hstate *h, 473 struct mm_struct *mm, pte_t *pte) 474 { 475 if (huge_page_size(h) == PMD_SIZE) 476 return pmd_lockptr(mm, (pmd_t *) pte); 477 VM_BUG_ON(huge_page_size(h) == PAGE_SIZE); 478 return &mm->page_table_lock; 479 } 480 481 #ifndef hugepages_supported 482 /* 483 * Some platform decide whether they support huge pages at boot 484 * time. Some of them, such as powerpc, set HPAGE_SHIFT to 0 485 * when there is no such support 486 */ 487 #define hugepages_supported() (HPAGE_SHIFT != 0) 488 #endif 489 490 void hugetlb_report_usage(struct seq_file *m, struct mm_struct *mm); 491 492 static inline void hugetlb_count_add(long l, struct mm_struct *mm) 493 { 494 atomic_long_add(l, &mm->hugetlb_usage); 495 } 496 497 static inline void hugetlb_count_sub(long l, struct mm_struct *mm) 498 { 499 atomic_long_sub(l, &mm->hugetlb_usage); 500 } 501 #else /* CONFIG_HUGETLB_PAGE */ 502 struct hstate {}; 503 #define alloc_huge_page(v, a, r) NULL 504 #define alloc_huge_page_node(h, nid) NULL 505 #define alloc_huge_page_noerr(v, a, r) NULL 506 #define alloc_bootmem_huge_page(h) NULL 507 #define hstate_file(f) NULL 508 #define hstate_sizelog(s) NULL 509 #define hstate_vma(v) NULL 510 #define hstate_inode(i) NULL 511 #define page_hstate(page) NULL 512 #define huge_page_size(h) PAGE_SIZE 513 #define huge_page_mask(h) PAGE_MASK 514 #define vma_kernel_pagesize(v) PAGE_SIZE 515 #define vma_mmu_pagesize(v) PAGE_SIZE 516 #define huge_page_order(h) 0 517 #define huge_page_shift(h) PAGE_SHIFT 518 static inline unsigned int pages_per_huge_page(struct hstate *h) 519 { 520 return 1; 521 } 522 #define hstate_index_to_shift(index) 0 523 #define hstate_index(h) 0 524 525 static inline pgoff_t basepage_index(struct page *page) 526 { 527 return page->index; 528 } 529 #define dissolve_free_huge_pages(s, e) 0 530 #define hugepage_migration_supported(h) false 531 532 static inline spinlock_t *huge_pte_lockptr(struct hstate *h, 533 struct mm_struct *mm, pte_t *pte) 534 { 535 return &mm->page_table_lock; 536 } 537 538 static inline void hugetlb_report_usage(struct seq_file *f, struct mm_struct *m) 539 { 540 } 541 542 static inline void hugetlb_count_sub(long l, struct mm_struct *mm) 543 { 544 } 545 #endif /* CONFIG_HUGETLB_PAGE */ 546 547 static inline spinlock_t *huge_pte_lock(struct hstate *h, 548 struct mm_struct *mm, pte_t *pte) 549 { 550 spinlock_t *ptl; 551 552 ptl = huge_pte_lockptr(h, mm, pte); 553 spin_lock(ptl); 554 return ptl; 555 } 556 557 #endif /* _LINUX_HUGETLB_H */ 558