mirror of
https://github.com/lkl/linux.git
synced 2025-12-19 16:13:19 +09:00
mm: remove free_compound_page() and the compound_page_dtors array
The only remaining destructor is free_compound_page(). Inline it into destroy_large_folio() and remove the array it used to live in. Link: https://lkml.kernel.org/r/20230816151201.3655946-7-willy@infradead.org Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org> Cc: David Hildenbrand <david@redhat.com> Cc: Jens Axboe <axboe@kernel.dk> Cc: Sidhartha Kumar <sidhartha.kumar@oracle.com> Cc: Yanteng Si <siyanteng@loongson.cn> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
committed by
Andrew Morton
parent
da6e7bf3a0
commit
0f2f43fabb
@@ -1239,14 +1239,6 @@ void folio_copy(struct folio *dst, struct folio *src);
|
|||||||
|
|
||||||
unsigned long nr_free_buffer_pages(void);
|
unsigned long nr_free_buffer_pages(void);
|
||||||
|
|
||||||
/*
|
|
||||||
* Compound pages have a destructor function. Provide a
|
|
||||||
* prototype for that function and accessor functions.
|
|
||||||
* These are _only_ valid on the head of a compound page.
|
|
||||||
*/
|
|
||||||
typedef void compound_page_dtor(struct page *);
|
|
||||||
|
|
||||||
/* Keep the enum in sync with compound_page_dtors array in mm/page_alloc.c */
|
|
||||||
enum compound_dtor_id {
|
enum compound_dtor_id {
|
||||||
NULL_COMPOUND_DTOR,
|
NULL_COMPOUND_DTOR,
|
||||||
COMPOUND_PAGE_DTOR,
|
COMPOUND_PAGE_DTOR,
|
||||||
@@ -1299,8 +1291,6 @@ static inline unsigned long thp_size(struct page *page)
|
|||||||
return PAGE_SIZE << thp_order(page);
|
return PAGE_SIZE << thp_order(page);
|
||||||
}
|
}
|
||||||
|
|
||||||
void free_compound_page(struct page *page);
|
|
||||||
|
|
||||||
#ifdef CONFIG_MMU
|
#ifdef CONFIG_MMU
|
||||||
/*
|
/*
|
||||||
* Do pte_mkwrite, but only if the vma says VM_WRITE. We do this when
|
* Do pte_mkwrite, but only if the vma says VM_WRITE. We do this when
|
||||||
|
|||||||
@@ -284,11 +284,6 @@ const char * const migratetype_names[MIGRATE_TYPES] = {
|
|||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
static compound_page_dtor * const compound_page_dtors[NR_COMPOUND_DTORS] = {
|
|
||||||
[NULL_COMPOUND_DTOR] = NULL,
|
|
||||||
[COMPOUND_PAGE_DTOR] = free_compound_page,
|
|
||||||
};
|
|
||||||
|
|
||||||
int min_free_kbytes = 1024;
|
int min_free_kbytes = 1024;
|
||||||
int user_min_free_kbytes = -1;
|
int user_min_free_kbytes = -1;
|
||||||
static int watermark_boost_factor __read_mostly = 15000;
|
static int watermark_boost_factor __read_mostly = 15000;
|
||||||
@@ -577,19 +572,13 @@ static inline void free_the_page(struct page *page, unsigned int order)
|
|||||||
* The remaining PAGE_SIZE pages are called "tail pages". PageTail() is encoded
|
* The remaining PAGE_SIZE pages are called "tail pages". PageTail() is encoded
|
||||||
* in bit 0 of page->compound_head. The rest of bits is pointer to head page.
|
* in bit 0 of page->compound_head. The rest of bits is pointer to head page.
|
||||||
*
|
*
|
||||||
* The first tail page's ->compound_dtor holds the offset in array of compound
|
* The first tail page's ->compound_dtor describes how to destroy the
|
||||||
* page destructors. See compound_page_dtors.
|
* compound page.
|
||||||
*
|
*
|
||||||
* The first tail page's ->compound_order holds the order of allocation.
|
* The first tail page's ->compound_order holds the order of allocation.
|
||||||
* This usage means that zero-order pages may not be compound.
|
* This usage means that zero-order pages may not be compound.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
void free_compound_page(struct page *page)
|
|
||||||
{
|
|
||||||
mem_cgroup_uncharge(page_folio(page));
|
|
||||||
free_the_page(page, compound_order(page));
|
|
||||||
}
|
|
||||||
|
|
||||||
void prep_compound_page(struct page *page, unsigned int order)
|
void prep_compound_page(struct page *page, unsigned int order)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
@@ -611,14 +600,11 @@ void destroy_large_folio(struct folio *folio)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (folio_test_transhuge(folio) && dtor == TRANSHUGE_PAGE_DTOR) {
|
if (folio_test_transhuge(folio) && dtor == TRANSHUGE_PAGE_DTOR)
|
||||||
folio_undo_large_rmappable(folio);
|
folio_undo_large_rmappable(folio);
|
||||||
free_compound_page(&folio->page);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
VM_BUG_ON_FOLIO(dtor >= NR_COMPOUND_DTORS, folio);
|
mem_cgroup_uncharge(folio);
|
||||||
compound_page_dtors[dtor](&folio->page);
|
free_the_page(&folio->page, folio_order(folio));
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void set_buddy_order(struct page *page, unsigned int order)
|
static inline void set_buddy_order(struct page *page, unsigned int order)
|
||||||
|
|||||||
Reference in New Issue
Block a user