Commit 2516a871 authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge tag 'mm-stable-2025-12-11-11-39' of git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm

Pull more MM updates from Andrew Morton:

 - "powerpc/pseries/cmm: two smaller fixes" (David Hildenbrand)
   fixes a couple of minor things in ppc land

 - "Improve folio split related functions" (Zi Yan)
   some cleanups and minorish fixes in the folio splitting code

* tag 'mm-stable-2025-12-11-11-39' of git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm:
  mm/damon/tests/core-kunit: avoid damos_test_commit stack warning
  mm: vmscan: correct nr_requested tracing in scan_folios
  MAINTAINERS: add idr core-api doc file to XARRAY
  mm/hugetlb: fix incorrect error return from hugetlb_reserve_pages()
  mm: fix CONFIG_STACK_GROWSUP typo in mm.h
  mm/huge_memory: fix folio split stats counting
  mm/huge_memory: make min_order_for_split() always return an order
  mm/huge_memory: replace can_split_folio() with direct refcount calculation
  mm/huge_memory: change folio_split_supported() to folio_check_splittable()
  mm/sparse: fix sparse_vmemmap_init_nid_early definition without CONFIG_SPARSEMEM
  powerpc/pseries/cmm: adjust BALLOON_MIGRATE when migrating pages
  powerpc/pseries/cmm: call balloon_devinfo_init() also without CONFIG_BALLOON_COMPACTION
parents d2ea4d25 dafdba09
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -28321,6 +28321,7 @@ M: Matthew Wilcox <willy@infradead.org>
L:	linux-fsdevel@vger.kernel.org
L:	linux-mm@kvack.org
S:	Supported
F:	Documentation/core-api/idr.rst
F:	Documentation/core-api/xarray.rst
F:	include/linux/idr.h
F:	include/linux/xarray.h
+2 −1
Original line number Diff line number Diff line
@@ -532,6 +532,7 @@ static int cmm_migratepage(struct balloon_dev_info *b_dev_info,

	spin_lock_irqsave(&b_dev_info->pages_lock, flags);
	balloon_page_insert(b_dev_info, newpage);
	__count_vm_event(BALLOON_MIGRATE);
	b_dev_info->isolated_pages--;
	spin_unlock_irqrestore(&b_dev_info->pages_lock, flags);

@@ -550,7 +551,6 @@ static int cmm_migratepage(struct balloon_dev_info *b_dev_info,

static void cmm_balloon_compaction_init(void)
{
	balloon_devinfo_init(&b_dev_info);
	b_dev_info.migratepage = cmm_migratepage;
}
#else /* CONFIG_BALLOON_COMPACTION */
@@ -572,6 +572,7 @@ static int cmm_init(void)
	if (!firmware_has_feature(FW_FEATURE_CMO) && !simulate)
		return -EOPNOTSUPP;

	balloon_devinfo_init(&b_dev_info);
	cmm_balloon_compaction_init();

	rc = register_oom_notifier(&cmm_oom_nb);
+6 −7
Original line number Diff line number Diff line
@@ -369,14 +369,13 @@ enum split_type {
	SPLIT_TYPE_NON_UNIFORM,
};

bool can_split_folio(struct folio *folio, int caller_pins, int *pextra_pins);
int __split_huge_page_to_list_to_order(struct page *page, struct list_head *list,
		unsigned int new_order);
int folio_split_unmapped(struct folio *folio, unsigned int new_order);
int min_order_for_split(struct folio *folio);
unsigned int min_order_for_split(struct folio *folio);
int split_folio_to_list(struct folio *folio, struct list_head *list);
bool folio_split_supported(struct folio *folio, unsigned int new_order,
		enum split_type split_type, bool warns);
int folio_check_splittable(struct folio *folio, unsigned int new_order,
			   enum split_type split_type);
int folio_split(struct folio *folio, unsigned int new_order, struct page *page,
		struct list_head *list);

@@ -407,7 +406,7 @@ static inline int split_huge_page_to_order(struct page *page, unsigned int new_o
static inline int try_folio_split_to_order(struct folio *folio,
		struct page *page, unsigned int new_order)
{
	if (!folio_split_supported(folio, new_order, SPLIT_TYPE_NON_UNIFORM, /* warns= */ false))
	if (folio_check_splittable(folio, new_order, SPLIT_TYPE_NON_UNIFORM))
		return split_huge_page_to_order(&folio->page, new_order);
	return folio_split(folio, new_order, page, NULL);
}
@@ -631,10 +630,10 @@ static inline int split_huge_page(struct page *page)
	return -EINVAL;
}

static inline int min_order_for_split(struct folio *folio)
static inline unsigned int min_order_for_split(struct folio *folio)
{
	VM_WARN_ON_ONCE_FOLIO(1, folio);
	return -EINVAL;
	return 0;
}

static inline int split_folio_to_list(struct folio *folio, struct list_head *list)
+1 −1
Original line number Diff line number Diff line
@@ -438,7 +438,7 @@ enum {
#define VM_NOHUGEPAGE	INIT_VM_FLAG(NOHUGEPAGE)
#define VM_MERGEABLE	INIT_VM_FLAG(MERGEABLE)
#define VM_STACK	INIT_VM_FLAG(STACK)
#ifdef CONFIG_STACK_GROWS_UP
#ifdef CONFIG_STACK_GROWSUP
#define VM_STACK_EARLY	INIT_VM_FLAG(STACK_EARLY)
#else
#define VM_STACK_EARLY	VM_NONE
+1 −1
Original line number Diff line number Diff line
@@ -2289,7 +2289,7 @@ void sparse_init(void);
#else
#define sparse_init()	do {} while (0)
#define sparse_index_init(_sec, _nid)  do {} while (0)
#define sparse_vmemmap_init_nid_early(_nid, _use) do {} while (0)
#define sparse_vmemmap_init_nid_early(_nid) do {} while (0)
#define sparse_vmemmap_init_nid_late(_nid) do {} while (0)
#define pfn_in_present_section pfn_valid
#define subsection_map_init(_pfn, _nr_pages) do {} while (0)
Loading