Skip to content

Commit d4ab031

Browse files
sidkumar99akpm00
authored andcommitted
mm/hugetlb_cgroup: convert hugetlb_cgroup_uncharge_page() to folios
Continue to use a folio inside free_huge_page() by converting hugetlb_cgroup_uncharge_page*() to folios. Link: https://lkml.kernel.org/r/[email protected] Signed-off-by: Sidhartha Kumar <[email protected]> Reviewed-by: Mike Kravetz <[email protected]> Reviewed-by: Muchun Song <[email protected]> Cc: Aneesh Kumar K.V <[email protected]> Cc: Bui Quang Minh <[email protected]> Cc: Matthew Wilcox (Oracle) <[email protected]> Cc: Miaohe Lin <[email protected]> Cc: Mina Almasry <[email protected]> Signed-off-by: Andrew Morton <[email protected]>
1 parent 0356c4b commit d4ab031

File tree

3 files changed

+27
-25
lines changed

3 files changed

+27
-25
lines changed

include/linux/hugetlb_cgroup.h

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -158,10 +158,10 @@ extern void hugetlb_cgroup_commit_charge(int idx, unsigned long nr_pages,
158158
extern void hugetlb_cgroup_commit_charge_rsvd(int idx, unsigned long nr_pages,
159159
struct hugetlb_cgroup *h_cg,
160160
struct page *page);
161-
extern void hugetlb_cgroup_uncharge_page(int idx, unsigned long nr_pages,
162-
struct page *page);
163-
extern void hugetlb_cgroup_uncharge_page_rsvd(int idx, unsigned long nr_pages,
164-
struct page *page);
161+
extern void hugetlb_cgroup_uncharge_folio(int idx, unsigned long nr_pages,
162+
struct folio *folio);
163+
extern void hugetlb_cgroup_uncharge_folio_rsvd(int idx, unsigned long nr_pages,
164+
struct folio *folio);
165165

166166
extern void hugetlb_cgroup_uncharge_cgroup(int idx, unsigned long nr_pages,
167167
struct hugetlb_cgroup *h_cg);
@@ -254,14 +254,14 @@ hugetlb_cgroup_commit_charge_rsvd(int idx, unsigned long nr_pages,
254254
{
255255
}
256256

257-
static inline void hugetlb_cgroup_uncharge_page(int idx, unsigned long nr_pages,
258-
struct page *page)
257+
static inline void hugetlb_cgroup_uncharge_folio(int idx, unsigned long nr_pages,
258+
struct folio *folio)
259259
{
260260
}
261261

262-
static inline void hugetlb_cgroup_uncharge_page_rsvd(int idx,
262+
static inline void hugetlb_cgroup_uncharge_folio_rsvd(int idx,
263263
unsigned long nr_pages,
264-
struct page *page)
264+
struct folio *folio)
265265
{
266266
}
267267
static inline void hugetlb_cgroup_uncharge_cgroup(int idx,

mm/hugetlb.c

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1742,10 +1742,10 @@ void free_huge_page(struct page *page)
17421742

17431743
spin_lock_irqsave(&hugetlb_lock, flags);
17441744
folio_clear_hugetlb_migratable(folio);
1745-
hugetlb_cgroup_uncharge_page(hstate_index(h),
1746-
pages_per_huge_page(h), page);
1747-
hugetlb_cgroup_uncharge_page_rsvd(hstate_index(h),
1748-
pages_per_huge_page(h), page);
1745+
hugetlb_cgroup_uncharge_folio(hstate_index(h),
1746+
pages_per_huge_page(h), folio);
1747+
hugetlb_cgroup_uncharge_folio_rsvd(hstate_index(h),
1748+
pages_per_huge_page(h), folio);
17491749
if (restore_reserve)
17501750
h->resv_huge_pages++;
17511751

@@ -2872,6 +2872,7 @@ struct page *alloc_huge_page(struct vm_area_struct *vma,
28722872
struct hugepage_subpool *spool = subpool_vma(vma);
28732873
struct hstate *h = hstate_vma(vma);
28742874
struct page *page;
2875+
struct folio *folio;
28752876
long map_chg, map_commit;
28762877
long gbl_chg;
28772878
int ret, idx;
@@ -2935,6 +2936,7 @@ struct page *alloc_huge_page(struct vm_area_struct *vma,
29352936
* a reservation exists for the allocation.
29362937
*/
29372938
page = dequeue_huge_page_vma(h, vma, addr, avoid_reserve, gbl_chg);
2939+
29382940
if (!page) {
29392941
spin_unlock_irq(&hugetlb_lock);
29402942
page = alloc_buddy_huge_page_with_mpol(h, vma, addr);
@@ -2949,6 +2951,7 @@ struct page *alloc_huge_page(struct vm_area_struct *vma,
29492951
set_page_refcounted(page);
29502952
/* Fall through */
29512953
}
2954+
folio = page_folio(page);
29522955
hugetlb_cgroup_commit_charge(idx, pages_per_huge_page(h), h_cg, page);
29532956
/* If allocation is not consuming a reservation, also store the
29542957
* hugetlb_cgroup pointer on the page.
@@ -2978,8 +2981,8 @@ struct page *alloc_huge_page(struct vm_area_struct *vma,
29782981
rsv_adjust = hugepage_subpool_put_pages(spool, 1);
29792982
hugetlb_acct_memory(h, -rsv_adjust);
29802983
if (deferred_reserve)
2981-
hugetlb_cgroup_uncharge_page_rsvd(hstate_index(h),
2982-
pages_per_huge_page(h), page);
2984+
hugetlb_cgroup_uncharge_folio_rsvd(hstate_index(h),
2985+
pages_per_huge_page(h), folio);
29832986
}
29842987
return page;
29852988

mm/hugetlb_cgroup.c

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -346,11 +346,10 @@ void hugetlb_cgroup_commit_charge_rsvd(int idx, unsigned long nr_pages,
346346
/*
347347
* Should be called with hugetlb_lock held
348348
*/
349-
static void __hugetlb_cgroup_uncharge_page(int idx, unsigned long nr_pages,
350-
struct page *page, bool rsvd)
349+
static void __hugetlb_cgroup_uncharge_folio(int idx, unsigned long nr_pages,
350+
struct folio *folio, bool rsvd)
351351
{
352352
struct hugetlb_cgroup *h_cg;
353-
struct folio *folio = page_folio(page);
354353

355354
if (hugetlb_cgroup_disabled())
356355
return;
@@ -368,27 +367,27 @@ static void __hugetlb_cgroup_uncharge_page(int idx, unsigned long nr_pages,
368367
css_put(&h_cg->css);
369368
else {
370369
unsigned long usage =
371-
h_cg->nodeinfo[page_to_nid(page)]->usage[idx];
370+
h_cg->nodeinfo[folio_nid(folio)]->usage[idx];
372371
/*
373372
* This write is not atomic due to fetching usage and writing
374373
* to it, but that's fine because we call this with
375374
* hugetlb_lock held anyway.
376375
*/
377-
WRITE_ONCE(h_cg->nodeinfo[page_to_nid(page)]->usage[idx],
376+
WRITE_ONCE(h_cg->nodeinfo[folio_nid(folio)]->usage[idx],
378377
usage - nr_pages);
379378
}
380379
}
381380

382-
void hugetlb_cgroup_uncharge_page(int idx, unsigned long nr_pages,
383-
struct page *page)
381+
void hugetlb_cgroup_uncharge_folio(int idx, unsigned long nr_pages,
382+
struct folio *folio)
384383
{
385-
__hugetlb_cgroup_uncharge_page(idx, nr_pages, page, false);
384+
__hugetlb_cgroup_uncharge_folio(idx, nr_pages, folio, false);
386385
}
387386

388-
void hugetlb_cgroup_uncharge_page_rsvd(int idx, unsigned long nr_pages,
389-
struct page *page)
387+
void hugetlb_cgroup_uncharge_folio_rsvd(int idx, unsigned long nr_pages,
388+
struct folio *folio)
390389
{
391-
__hugetlb_cgroup_uncharge_page(idx, nr_pages, page, true);
390+
__hugetlb_cgroup_uncharge_folio(idx, nr_pages, folio, true);
392391
}
393392

394393
static void __hugetlb_cgroup_uncharge_cgroup(int idx, unsigned long nr_pages,

0 commit comments

Comments
 (0)