Lines Matching refs:spool

104 static inline bool subpool_is_free(struct hugepage_subpool *spool)  in subpool_is_free()  argument
106 if (spool->count) in subpool_is_free()
108 if (spool->max_hpages != -1) in subpool_is_free()
109 return spool->used_hpages == 0; in subpool_is_free()
110 if (spool->min_hpages != -1) in subpool_is_free()
111 return spool->rsv_hpages == spool->min_hpages; in subpool_is_free()
116 static inline void unlock_or_release_subpool(struct hugepage_subpool *spool, in unlock_or_release_subpool() argument
119 spin_unlock_irqrestore(&spool->lock, irq_flags); in unlock_or_release_subpool()
124 if (subpool_is_free(spool)) { in unlock_or_release_subpool()
125 if (spool->min_hpages != -1) in unlock_or_release_subpool()
126 hugetlb_acct_memory(spool->hstate, in unlock_or_release_subpool()
127 -spool->min_hpages); in unlock_or_release_subpool()
128 kfree(spool); in unlock_or_release_subpool()
135 struct hugepage_subpool *spool; in hugepage_new_subpool() local
137 spool = kzalloc(sizeof(*spool), GFP_KERNEL); in hugepage_new_subpool()
138 if (!spool) in hugepage_new_subpool()
141 spin_lock_init(&spool->lock); in hugepage_new_subpool()
142 spool->count = 1; in hugepage_new_subpool()
143 spool->max_hpages = max_hpages; in hugepage_new_subpool()
144 spool->hstate = h; in hugepage_new_subpool()
145 spool->min_hpages = min_hpages; in hugepage_new_subpool()
148 kfree(spool); in hugepage_new_subpool()
151 spool->rsv_hpages = min_hpages; in hugepage_new_subpool()
153 return spool; in hugepage_new_subpool()
156 void hugepage_put_subpool(struct hugepage_subpool *spool) in hugepage_put_subpool() argument
160 spin_lock_irqsave(&spool->lock, flags); in hugepage_put_subpool()
161 BUG_ON(!spool->count); in hugepage_put_subpool()
162 spool->count--; in hugepage_put_subpool()
163 unlock_or_release_subpool(spool, flags); in hugepage_put_subpool()
174 static long hugepage_subpool_get_pages(struct hugepage_subpool *spool, in hugepage_subpool_get_pages() argument
179 if (!spool) in hugepage_subpool_get_pages()
182 spin_lock_irq(&spool->lock); in hugepage_subpool_get_pages()
184 if (spool->max_hpages != -1) { /* maximum size accounting */ in hugepage_subpool_get_pages()
185 if ((spool->used_hpages + delta) <= spool->max_hpages) in hugepage_subpool_get_pages()
186 spool->used_hpages += delta; in hugepage_subpool_get_pages()
194 if (spool->min_hpages != -1 && spool->rsv_hpages) { in hugepage_subpool_get_pages()
195 if (delta > spool->rsv_hpages) { in hugepage_subpool_get_pages()
200 ret = delta - spool->rsv_hpages; in hugepage_subpool_get_pages()
201 spool->rsv_hpages = 0; in hugepage_subpool_get_pages()
204 spool->rsv_hpages -= delta; in hugepage_subpool_get_pages()
209 spin_unlock_irq(&spool->lock); in hugepage_subpool_get_pages()
219 static long hugepage_subpool_put_pages(struct hugepage_subpool *spool, in hugepage_subpool_put_pages() argument
225 if (!spool) in hugepage_subpool_put_pages()
228 spin_lock_irqsave(&spool->lock, flags); in hugepage_subpool_put_pages()
230 if (spool->max_hpages != -1) /* maximum size accounting */ in hugepage_subpool_put_pages()
231 spool->used_hpages -= delta; in hugepage_subpool_put_pages()
234 if (spool->min_hpages != -1 && spool->used_hpages < spool->min_hpages) { in hugepage_subpool_put_pages()
235 if (spool->rsv_hpages + delta <= spool->min_hpages) in hugepage_subpool_put_pages()
238 ret = spool->rsv_hpages + delta - spool->min_hpages; in hugepage_subpool_put_pages()
240 spool->rsv_hpages += delta; in hugepage_subpool_put_pages()
241 if (spool->rsv_hpages > spool->min_hpages) in hugepage_subpool_put_pages()
242 spool->rsv_hpages = spool->min_hpages; in hugepage_subpool_put_pages()
249 unlock_or_release_subpool(spool, flags); in hugepage_subpool_put_pages()
256 return HUGETLBFS_SB(inode->i_sb)->spool; in subpool_inode()
938 struct hugepage_subpool *spool = subpool_inode(inode); in hugetlb_fix_reserve_counts() local
942 rsv_adjust = hugepage_subpool_get_pages(spool, 1); in hugetlb_fix_reserve_counts()
1889 struct hugepage_subpool *spool = hugetlb_folio_subpool(folio); in free_huge_folio() local
1918 if (hugepage_subpool_put_pages(spool, 1) == 0) in free_huge_folio()
2966 struct hugepage_subpool *spool = subpool_vma(vma); in alloc_hugetlb_folio() local
3006 gbl_chg = hugepage_subpool_get_pages(spool, 1); in alloc_hugetlb_folio()
3069 hugetlb_set_folio_subpool(folio, spool); in alloc_hugetlb_folio()
3084 rsv_adjust = hugepage_subpool_put_pages(spool, 1); in alloc_hugetlb_folio()
3108 hugepage_subpool_put_pages(spool, 1); in alloc_hugetlb_folio()
5051 struct hugepage_subpool *spool = subpool_vma(vma); in hugetlb_vm_op_close() local
5071 gbl_reserve = hugepage_subpool_put_pages(spool, reserve); in hugetlb_vm_op_close()
6903 struct hugepage_subpool *spool = subpool_inode(inode); in hugetlb_reserve_pages() local
6974 gbl_reserve = hugepage_subpool_get_pages(spool, chg); in hugetlb_reserve_pages()
7020 rsv_adjust = hugepage_subpool_put_pages(spool, in hugetlb_reserve_pages()
7037 (void)hugepage_subpool_put_pages(spool, chg); in hugetlb_reserve_pages()
7062 struct hugepage_subpool *spool = subpool_inode(inode); in hugetlb_unreserve_pages() local
7091 gbl_reserve = hugepage_subpool_put_pages(spool, (chg - freed)); in hugetlb_unreserve_pages()