Lines Matching defs:spool

102 static inline bool subpool_is_free(struct hugepage_subpool *spool)
104 if (spool->count)
106 if (spool->max_hpages != -1)
107 return spool->used_hpages == 0;
108 if (spool->min_hpages != -1)
109 return spool->rsv_hpages == spool->min_hpages;
114 static inline void unlock_or_release_subpool(struct hugepage_subpool *spool,
117 spin_unlock_irqrestore(&spool->lock, irq_flags);
122 if (subpool_is_free(spool)) {
123 if (spool->min_hpages != -1)
124 hugetlb_acct_memory(spool->hstate,
125 -spool->min_hpages);
126 kfree(spool);
133 struct hugepage_subpool *spool;
135 spool = kzalloc(sizeof(*spool), GFP_KERNEL);
136 if (!spool)
139 spin_lock_init(&spool->lock);
140 spool->count = 1;
141 spool->max_hpages = max_hpages;
142 spool->hstate = h;
143 spool->min_hpages = min_hpages;
146 kfree(spool);
149 spool->rsv_hpages = min_hpages;
151 return spool;
154 void hugepage_put_subpool(struct hugepage_subpool *spool)
158 spin_lock_irqsave(&spool->lock, flags);
159 BUG_ON(!spool->count);
160 spool->count--;
161 unlock_or_release_subpool(spool, flags);
172 static long hugepage_subpool_get_pages(struct hugepage_subpool *spool,
177 if (!spool)
180 spin_lock_irq(&spool->lock);
182 if (spool->max_hpages != -1) { /* maximum size accounting */
183 if ((spool->used_hpages + delta) <= spool->max_hpages)
184 spool->used_hpages += delta;
192 if (spool->min_hpages != -1 && spool->rsv_hpages) {
193 if (delta > spool->rsv_hpages) {
198 ret = delta - spool->rsv_hpages;
199 spool->rsv_hpages = 0;
202 spool->rsv_hpages -= delta;
207 spin_unlock_irq(&spool->lock);
217 static long hugepage_subpool_put_pages(struct hugepage_subpool *spool,
223 if (!spool)
226 spin_lock_irqsave(&spool->lock, flags);
228 if (spool->max_hpages != -1) /* maximum size accounting */
229 spool->used_hpages -= delta;
232 if (spool->min_hpages != -1 && spool->used_hpages < spool->min_hpages) {
233 if (spool->rsv_hpages + delta <= spool->min_hpages)
236 ret = spool->rsv_hpages + delta - spool->min_hpages;
238 spool->rsv_hpages += delta;
239 if (spool->rsv_hpages > spool->min_hpages)
240 spool->rsv_hpages = spool->min_hpages;
244 * If hugetlbfs_put_super couldn't free spool due to an outstanding
247 unlock_or_release_subpool(spool, flags);
254 return HUGETLBFS_SB(inode->i_sb)->spool;
936 struct hugepage_subpool *spool = subpool_inode(inode);
940 rsv_adjust = hugepage_subpool_get_pages(spool, 1);
1902 struct hugepage_subpool *spool = hugetlb_folio_subpool(folio);
1931 if (hugepage_subpool_put_pages(spool, 1) == 0)
3047 struct hugepage_subpool *spool = subpool_vma(vma);
3074 gbl_chg = hugepage_subpool_get_pages(spool, 1);
3139 hugetlb_set_folio_subpool(folio, spool);
3154 rsv_adjust = hugepage_subpool_put_pages(spool, 1);
3170 hugepage_subpool_put_pages(spool, 1);
4880 struct hugepage_subpool *spool = subpool_vma(vma);
4900 gbl_reserve = hugepage_subpool_put_pages(spool, reserve);
6717 struct hugepage_subpool *spool = subpool_inode(inode);
6788 gbl_reserve = hugepage_subpool_get_pages(spool, chg);
6834 rsv_adjust = hugepage_subpool_put_pages(spool,
6851 (void)hugepage_subpool_put_pages(spool, chg);
6876 struct hugepage_subpool *spool = subpool_inode(inode);
6905 gbl_reserve = hugepage_subpool_put_pages(spool, (chg - freed));