Commit 23683174 authored by Paolo Bonzini's avatar Paolo Bonzini
Browse files

Merge tag 'kvm-x86-gmem-6.19' of https://github.com/kvm-x86/linux into HEAD

KVM guest_memfd changes for 6.19:

 - Add NUMA mempolicy support for guest_memfd, and clean up a variety of
   rough edges in guest_memfd along the way.

 - Define a CLASS to automatically handle get+put when grabbing a guest_memfd
   from a memslot to make it harder to leak references.

 - Enhance KVM selftests to make it easer to develop and debug selftests like
   those added for guest_memfd NUMA support, e.g. where test and/or KVM bugs
   often result in hard-to-debug SIGBUS errors.

 - Misc cleanups.
parents 9aca52b5 83e0e122
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -491,8 +491,8 @@ static noinline int add_ra_bio_pages(struct inode *inode,
			continue;
		}

		folio = filemap_alloc_folio(mapping_gfp_constraint(mapping,
								   ~__GFP_FS), 0);
		folio = filemap_alloc_folio(mapping_gfp_constraint(mapping, ~__GFP_FS),
					    0, NULL);
		if (!folio)
			break;

+1 −1
Original line number Diff line number Diff line
@@ -742,7 +742,7 @@ static struct page *btrfs_read_merkle_tree_page(struct inode *inode,
	}

	folio = filemap_alloc_folio(mapping_gfp_constraint(inode->i_mapping, ~__GFP_FS),
				    0);
				    0, NULL);
	if (!folio)
		return ERR_PTR(-ENOMEM);

+1 −1
Original line number Diff line number Diff line
@@ -562,7 +562,7 @@ static void z_erofs_bind_cache(struct z_erofs_frontend *fe)
			 * Allocate a managed folio for cached I/O, or it may be
			 * then filled with a file-backed folio for in-place I/O
			 */
			newfolio = filemap_alloc_folio(gfp, 0);
			newfolio = filemap_alloc_folio(gfp, 0, NULL);
			if (!newfolio)
				continue;
			newfolio->private = Z_EROFS_PREALLOCATED_FOLIO;
+1 −1
Original line number Diff line number Diff line
@@ -1947,7 +1947,7 @@ static void f2fs_cache_compressed_page(struct f2fs_sb_info *sbi,
		return;
	}

	cfolio = filemap_alloc_folio(__GFP_NOWARN | __GFP_IO, 0);
	cfolio = filemap_alloc_folio(__GFP_NOWARN | __GFP_IO, 0, NULL);
	if (!cfolio)
		return;

+13 −5
Original line number Diff line number Diff line
@@ -654,9 +654,11 @@ static inline void *detach_page_private(struct page *page)
}

#ifdef CONFIG_NUMA
struct folio *filemap_alloc_folio_noprof(gfp_t gfp, unsigned int order);
struct folio *filemap_alloc_folio_noprof(gfp_t gfp, unsigned int order,
		struct mempolicy *policy);
#else
static inline struct folio *filemap_alloc_folio_noprof(gfp_t gfp, unsigned int order)
static inline struct folio *filemap_alloc_folio_noprof(gfp_t gfp, unsigned int order,
		struct mempolicy *policy)
{
	return folio_alloc_noprof(gfp, order);
}
@@ -667,7 +669,7 @@ static inline struct folio *filemap_alloc_folio_noprof(gfp_t gfp, unsigned int o

static inline struct page *__page_cache_alloc(gfp_t gfp)
{
	return &filemap_alloc_folio(gfp, 0)->page;
	return &filemap_alloc_folio(gfp, 0, NULL)->page;
}

static inline gfp_t readahead_gfp_mask(struct address_space *x)
@@ -753,11 +755,17 @@ static inline fgf_t fgf_set_order(size_t size)
}

void *filemap_get_entry(struct address_space *mapping, pgoff_t index);
struct folio *__filemap_get_folio(struct address_space *mapping, pgoff_t index,
		fgf_t fgp_flags, gfp_t gfp);
struct folio *__filemap_get_folio_mpol(struct address_space *mapping,
		pgoff_t index, fgf_t fgf_flags, gfp_t gfp, struct mempolicy *policy);
struct page *pagecache_get_page(struct address_space *mapping, pgoff_t index,
		fgf_t fgp_flags, gfp_t gfp);

static inline struct folio *__filemap_get_folio(struct address_space *mapping,
		pgoff_t index, fgf_t fgf_flags, gfp_t gfp)
{
	return __filemap_get_folio_mpol(mapping, index, fgf_flags, gfp, NULL);
}

/**
 * write_begin_get_folio - Get folio for write_begin with flags.
 * @iocb: The kiocb passed from write_begin (may be NULL).
Loading