Lines Matching refs:spool

85 static inline void unlock_or_release_subpool(struct hugepage_subpool *spool)  in unlock_or_release_subpool()  argument
87 bool free = (spool->count == 0) && (spool->used_hpages == 0); in unlock_or_release_subpool()
89 spin_unlock(&spool->lock); in unlock_or_release_subpool()
95 if (spool->min_hpages != -1) in unlock_or_release_subpool()
96 hugetlb_acct_memory(spool->hstate, in unlock_or_release_subpool()
97 -spool->min_hpages); in unlock_or_release_subpool()
98 kfree(spool); in unlock_or_release_subpool()
105 struct hugepage_subpool *spool; in hugepage_new_subpool() local
107 spool = kzalloc(sizeof(*spool), GFP_KERNEL); in hugepage_new_subpool()
108 if (!spool) in hugepage_new_subpool()
111 spin_lock_init(&spool->lock); in hugepage_new_subpool()
112 spool->count = 1; in hugepage_new_subpool()
113 spool->max_hpages = max_hpages; in hugepage_new_subpool()
114 spool->hstate = h; in hugepage_new_subpool()
115 spool->min_hpages = min_hpages; in hugepage_new_subpool()
118 kfree(spool); in hugepage_new_subpool()
121 spool->rsv_hpages = min_hpages; in hugepage_new_subpool()
123 return spool; in hugepage_new_subpool()
126 void hugepage_put_subpool(struct hugepage_subpool *spool) in hugepage_put_subpool() argument
128 spin_lock(&spool->lock); in hugepage_put_subpool()
129 BUG_ON(!spool->count); in hugepage_put_subpool()
130 spool->count--; in hugepage_put_subpool()
131 unlock_or_release_subpool(spool); in hugepage_put_subpool()
142 static long hugepage_subpool_get_pages(struct hugepage_subpool *spool, in hugepage_subpool_get_pages() argument
147 if (!spool) in hugepage_subpool_get_pages()
150 spin_lock(&spool->lock); in hugepage_subpool_get_pages()
152 if (spool->max_hpages != -1) { /* maximum size accounting */ in hugepage_subpool_get_pages()
153 if ((spool->used_hpages + delta) <= spool->max_hpages) in hugepage_subpool_get_pages()
154 spool->used_hpages += delta; in hugepage_subpool_get_pages()
162 if (spool->min_hpages != -1 && spool->rsv_hpages) { in hugepage_subpool_get_pages()
163 if (delta > spool->rsv_hpages) { in hugepage_subpool_get_pages()
168 ret = delta - spool->rsv_hpages; in hugepage_subpool_get_pages()
169 spool->rsv_hpages = 0; in hugepage_subpool_get_pages()
172 spool->rsv_hpages -= delta; in hugepage_subpool_get_pages()
177 spin_unlock(&spool->lock); in hugepage_subpool_get_pages()
187 static long hugepage_subpool_put_pages(struct hugepage_subpool *spool, in hugepage_subpool_put_pages() argument
192 if (!spool) in hugepage_subpool_put_pages()
195 spin_lock(&spool->lock); in hugepage_subpool_put_pages()
197 if (spool->max_hpages != -1) /* maximum size accounting */ in hugepage_subpool_put_pages()
198 spool->used_hpages -= delta; in hugepage_subpool_put_pages()
201 if (spool->min_hpages != -1 && spool->used_hpages < spool->min_hpages) { in hugepage_subpool_put_pages()
202 if (spool->rsv_hpages + delta <= spool->min_hpages) in hugepage_subpool_put_pages()
205 ret = spool->rsv_hpages + delta - spool->min_hpages; in hugepage_subpool_put_pages()
207 spool->rsv_hpages += delta; in hugepage_subpool_put_pages()
208 if (spool->rsv_hpages > spool->min_hpages) in hugepage_subpool_put_pages()
209 spool->rsv_hpages = spool->min_hpages; in hugepage_subpool_put_pages()
216 unlock_or_release_subpool(spool); in hugepage_subpool_put_pages()
223 return HUGETLBFS_SB(inode->i_sb)->spool; in subpool_inode()
710 struct hugepage_subpool *spool = subpool_inode(inode); in hugetlb_fix_reserve_counts() local
713 rsv_adjust = hugepage_subpool_get_pages(spool, 1); in hugetlb_fix_reserve_counts()
1394 struct hugepage_subpool *spool = in __free_huge_page() local
1421 if (hugepage_subpool_put_pages(spool, 1) == 0) in __free_huge_page()
2259 struct hugepage_subpool *spool = subpool_vma(vma); in alloc_huge_page() local
2286 gbl_chg = hugepage_subpool_get_pages(spool, 1); in alloc_huge_page()
2349 set_page_private(page, (unsigned long)spool); in alloc_huge_page()
2364 rsv_adjust = hugepage_subpool_put_pages(spool, 1); in alloc_huge_page()
2380 hugepage_subpool_put_pages(spool, 1); in alloc_huge_page()
3615 struct hugepage_subpool *spool = subpool_vma(vma); in hugetlb_vm_op_close() local
3632 gbl_reserve = hugepage_subpool_put_pages(spool, reserve); in hugetlb_vm_op_close()
5015 struct hugepage_subpool *spool = subpool_inode(inode); in hugetlb_reserve_pages() local
5087 gbl_reserve = hugepage_subpool_get_pages(spool, chg); in hugetlb_reserve_pages()
5133 rsv_adjust = hugepage_subpool_put_pages(spool, in hugetlb_reserve_pages()
5141 (void)hugepage_subpool_put_pages(spool, chg); in hugetlb_reserve_pages()
5163 struct hugepage_subpool *spool = subpool_inode(inode); in hugetlb_unreserve_pages() local
5189 gbl_reserve = hugepage_subpool_put_pages(spool, (chg - freed)); in hugetlb_unreserve_pages()