diff options
author | Linus Torvalds <torvalds@ppc970.osdl.org> | 2005-04-16 18:20:36 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@ppc970.osdl.org> | 2005-04-16 18:20:36 -0400 |
commit | 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 (patch) | |
tree | 0bba044c4ce775e45a88a51686b5d9f90697ea9d /include/linux/hugetlb.h |
Linux-2.6.12-rc2v2.6.12-rc2
Initial git repository build. I'm not bothering with the full history,
even though we have it. We can create a separate "historical" git
archive of that later if we want to, and in the meantime it's about
3.2GB when imported into git - space that would just make the early
git days unnecessarily complicated, when we don't have a lot of good
infrastructure for it.
Let it rip!
Diffstat (limited to 'include/linux/hugetlb.h')
-rw-r--r-- | include/linux/hugetlb.h | 142 |
1 files changed, 142 insertions, 0 deletions
diff --git a/include/linux/hugetlb.h b/include/linux/hugetlb.h new file mode 100644 index 000000000000..ae45676d27ba --- /dev/null +++ b/include/linux/hugetlb.h | |||
@@ -0,0 +1,142 @@ | |||
1 | #ifndef _LINUX_HUGETLB_H | ||
2 | #define _LINUX_HUGETLB_H | ||
3 | |||
4 | #ifdef CONFIG_HUGETLB_PAGE | ||
5 | |||
6 | #include <linux/mempolicy.h> | ||
7 | |||
8 | struct ctl_table; | ||
9 | |||
10 | static inline int is_vm_hugetlb_page(struct vm_area_struct *vma) | ||
11 | { | ||
12 | return vma->vm_flags & VM_HUGETLB; | ||
13 | } | ||
14 | |||
15 | int hugetlb_sysctl_handler(struct ctl_table *, int, struct file *, void __user *, size_t *, loff_t *); | ||
16 | int copy_hugetlb_page_range(struct mm_struct *, struct mm_struct *, struct vm_area_struct *); | ||
17 | int follow_hugetlb_page(struct mm_struct *, struct vm_area_struct *, struct page **, struct vm_area_struct **, unsigned long *, int *, int); | ||
18 | void zap_hugepage_range(struct vm_area_struct *, unsigned long, unsigned long); | ||
19 | void unmap_hugepage_range(struct vm_area_struct *, unsigned long, unsigned long); | ||
20 | int hugetlb_prefault(struct address_space *, struct vm_area_struct *); | ||
21 | int hugetlb_report_meminfo(char *); | ||
22 | int hugetlb_report_node_meminfo(int, char *); | ||
23 | int is_hugepage_mem_enough(size_t); | ||
24 | unsigned long hugetlb_total_pages(void); | ||
25 | struct page *follow_huge_addr(struct mm_struct *mm, unsigned long address, | ||
26 | int write); | ||
27 | struct page *follow_huge_pmd(struct mm_struct *mm, unsigned long address, | ||
28 | pmd_t *pmd, int write); | ||
29 | int is_aligned_hugepage_range(unsigned long addr, unsigned long len); | ||
30 | int pmd_huge(pmd_t pmd); | ||
31 | struct page *alloc_huge_page(void); | ||
32 | void free_huge_page(struct page *); | ||
33 | |||
34 | extern unsigned long max_huge_pages; | ||
35 | extern const unsigned long hugetlb_zero, hugetlb_infinity; | ||
36 | extern int sysctl_hugetlb_shm_group; | ||
37 | |||
38 | #ifndef ARCH_HAS_HUGEPAGE_ONLY_RANGE | ||
39 | #define is_hugepage_only_range(mm, addr, len) 0 | ||
40 | #define hugetlb_free_pgtables(tlb, prev, start, end) do { } while (0) | ||
41 | #endif | ||
42 | |||
43 | #ifndef ARCH_HAS_PREPARE_HUGEPAGE_RANGE | ||
44 | #define prepare_hugepage_range(addr, len) \ | ||
45 | is_aligned_hugepage_range(addr, len) | ||
46 | #else | ||
47 | int prepare_hugepage_range(unsigned long addr, unsigned long len); | ||
48 | #endif | ||
49 | |||
50 | #else /* !CONFIG_HUGETLB_PAGE */ | ||
51 | |||
52 | static inline int is_vm_hugetlb_page(struct vm_area_struct *vma) | ||
53 | { | ||
54 | return 0; | ||
55 | } | ||
56 | static inline unsigned long hugetlb_total_pages(void) | ||
57 | { | ||
58 | return 0; | ||
59 | } | ||
60 | |||
61 | #define follow_hugetlb_page(m,v,p,vs,a,b,i) ({ BUG(); 0; }) | ||
62 | #define follow_huge_addr(mm, addr, write) ERR_PTR(-EINVAL) | ||
63 | #define copy_hugetlb_page_range(src, dst, vma) ({ BUG(); 0; }) | ||
64 | #define hugetlb_prefault(mapping, vma) ({ BUG(); 0; }) | ||
65 | #define zap_hugepage_range(vma, start, len) BUG() | ||
66 | #define unmap_hugepage_range(vma, start, end) BUG() | ||
67 | #define is_hugepage_mem_enough(size) 0 | ||
68 | #define hugetlb_report_meminfo(buf) 0 | ||
69 | #define hugetlb_report_node_meminfo(n, buf) 0 | ||
70 | #define follow_huge_pmd(mm, addr, pmd, write) NULL | ||
71 | #define is_aligned_hugepage_range(addr, len) 0 | ||
72 | #define prepare_hugepage_range(addr, len) (-EINVAL) | ||
73 | #define pmd_huge(x) 0 | ||
74 | #define is_hugepage_only_range(mm, addr, len) 0 | ||
75 | #define hugetlb_free_pgtables(tlb, prev, start, end) do { } while (0) | ||
76 | #define alloc_huge_page() ({ NULL; }) | ||
77 | #define free_huge_page(p) ({ (void)(p); BUG(); }) | ||
78 | |||
79 | #ifndef HPAGE_MASK | ||
80 | #define HPAGE_MASK 0 /* Keep the compiler happy */ | ||
81 | #define HPAGE_SIZE 0 | ||
82 | #endif | ||
83 | |||
84 | #endif /* !CONFIG_HUGETLB_PAGE */ | ||
85 | |||
86 | #ifdef CONFIG_HUGETLBFS | ||
87 | struct hugetlbfs_config { | ||
88 | uid_t uid; | ||
89 | gid_t gid; | ||
90 | umode_t mode; | ||
91 | long nr_blocks; | ||
92 | long nr_inodes; | ||
93 | }; | ||
94 | |||
95 | struct hugetlbfs_sb_info { | ||
96 | long max_blocks; /* blocks allowed */ | ||
97 | long free_blocks; /* blocks free */ | ||
98 | long max_inodes; /* inodes allowed */ | ||
99 | long free_inodes; /* inodes free */ | ||
100 | spinlock_t stat_lock; | ||
101 | }; | ||
102 | |||
103 | |||
104 | struct hugetlbfs_inode_info { | ||
105 | struct shared_policy policy; | ||
106 | struct inode vfs_inode; | ||
107 | }; | ||
108 | |||
109 | static inline struct hugetlbfs_inode_info *HUGETLBFS_I(struct inode *inode) | ||
110 | { | ||
111 | return container_of(inode, struct hugetlbfs_inode_info, vfs_inode); | ||
112 | } | ||
113 | |||
114 | static inline struct hugetlbfs_sb_info *HUGETLBFS_SB(struct super_block *sb) | ||
115 | { | ||
116 | return sb->s_fs_info; | ||
117 | } | ||
118 | |||
119 | extern struct file_operations hugetlbfs_file_operations; | ||
120 | extern struct vm_operations_struct hugetlb_vm_ops; | ||
121 | struct file *hugetlb_zero_setup(size_t); | ||
122 | int hugetlb_get_quota(struct address_space *mapping); | ||
123 | void hugetlb_put_quota(struct address_space *mapping); | ||
124 | |||
125 | static inline int is_file_hugepages(struct file *file) | ||
126 | { | ||
127 | return file->f_op == &hugetlbfs_file_operations; | ||
128 | } | ||
129 | |||
130 | static inline void set_file_hugepages(struct file *file) | ||
131 | { | ||
132 | file->f_op = &hugetlbfs_file_operations; | ||
133 | } | ||
134 | #else /* !CONFIG_HUGETLBFS */ | ||
135 | |||
136 | #define is_file_hugepages(file) 0 | ||
137 | #define set_file_hugepages(file) BUG() | ||
138 | #define hugetlb_zero_setup(size) ERR_PTR(-ENOSYS) | ||
139 | |||
140 | #endif /* !CONFIG_HUGETLBFS */ | ||
141 | |||
142 | #endif /* _LINUX_HUGETLB_H */ | ||