Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 11470983 authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "mm/page_owner: introduce split_page_owner and replace manual handling"

parents 09437acc df3b4bfc
Loading
Loading
Loading
Loading
+5 −7
Original line number Diff line number Diff line
@@ -10,7 +10,7 @@ extern struct page_ext_operations page_owner_ops;
extern void __reset_page_owner(struct page *page, unsigned int order);
extern void __set_page_owner(struct page *page,
			unsigned int order, gfp_t gfp_mask);
extern gfp_t __get_page_owner_gfp(struct page *page);
extern void __split_page_owner(struct page *page, unsigned int order);
extern void __copy_page_owner(struct page *oldpage, struct page *newpage);
extern void __set_page_owner_migrate_reason(struct page *page, int reason);
extern void __dump_page_owner(struct page *page);
@@ -28,12 +28,10 @@ static inline void set_page_owner(struct page *page,
		__set_page_owner(page, order, gfp_mask);
}

static inline gfp_t get_page_owner_gfp(struct page *page)
static inline void split_page_owner(struct page *page, unsigned int order)
{
	if (static_branch_unlikely(&page_owner_inited))
		return __get_page_owner_gfp(page);
	else
		return 0;
		__split_page_owner(page, order);
}
static inline void copy_page_owner(struct page *oldpage, struct page *newpage)
{
@@ -58,9 +56,9 @@ static inline void set_page_owner(struct page *page,
			unsigned int order, gfp_t gfp_mask)
{
}
static inline gfp_t get_page_owner_gfp(struct page *page)
static inline void split_page_owner(struct page *page,
			unsigned int order)
{
	return 0;
}
static inline void copy_page_owner(struct page *oldpage, struct page *newpage)
{
+2 −6
Original line number Diff line number Diff line
@@ -2232,7 +2232,6 @@ void free_hot_cold_page_list(struct list_head *list, bool cold)
void split_page(struct page *page, unsigned int order)
{
	int i;
	gfp_t gfp_mask;

	VM_BUG_ON_PAGE(PageCompound(page), page);
	VM_BUG_ON_PAGE(!page_count(page), page);
@@ -2246,12 +2245,9 @@ void split_page(struct page *page, unsigned int order)
		split_page(virt_to_page(page[0].shadow), order);
#endif

	gfp_mask = get_page_owner_gfp(page);
	set_page_owner(page, 0, gfp_mask);
	for (i = 1; i < (1 << order); i++) {
	for (i = 1; i < (1 << order); i++)
		set_page_refcounted(page + i);
		set_page_owner(page + i, 0, gfp_mask);
	}
	split_page_owner(page, order);
}
EXPORT_SYMBOL_GPL(split_page);

+5 −2
Original line number Diff line number Diff line
@@ -90,11 +90,14 @@ void __set_page_owner_migrate_reason(struct page *page, int reason)
	page_ext->last_migrate_reason = reason;
}

gfp_t __get_page_owner_gfp(struct page *page)
void __split_page_owner(struct page *page, unsigned int order)
{
	int i;
	struct page_ext *page_ext = lookup_page_ext(page);

	return page_ext->gfp_mask;
	page_ext->order = 0;
	for (i = 1; i < (1 << order); i++)
		__copy_page_owner(page, page + i);
}

void __copy_page_owner(struct page *oldpage, struct page *newpage)