All of lore.kernel.org
 help / color / mirror / Atom feed
diff for duplicates of <20170126120948.GK6590@dhcp22.suse.cz>

diff --git a/a/1.txt b/N1/1.txt
index 64e963a..3e00d86 100644
--- a/a/1.txt
+++ b/N1/1.txt
@@ -41,673 +41,4 @@ if there is none then I would simply pull __GFP_HIGHMEM handling into
 the vmalloc.
 
 So before I resend the full series again, can I keep acks with the
-following?
-
->From e53038d7fc947519830b6d29a20ec1ff66ae53f0 Mon Sep 17 00:00:00 2001
-From: Michal Hocko <mhocko@suse.com>
-Date: Thu, 8 Dec 2016 09:19:32 +0100
-Subject: [PATCH] mm: introduce kv[mz]alloc helpers
-
-Using kmalloc with the vmalloc fallback for larger allocations is a
-common pattern in the kernel code. Yet we do not have any common helper
-for that and so users have invented their own helpers. Some of them are
-really creative when doing so. Let's just add kv[mz]alloc and make sure
-it is implemented properly. This implementation makes sure to not make
-a large memory pressure for > PAGE_SZE requests (__GFP_NORETRY) and also
-to not warn about allocation failures. This also rules out the OOM
-killer as the vmalloc is a more approapriate fallback than a disruptive
-user visible action.
-
-This patch also changes some existing users and removes helpers which
-are specific for them. In some cases this is not possible (e.g.
-ext4_kvmalloc, libcfs_kvzalloc) because those seems to be
-broken and require GFP_NO{FS,IO} context which is not vmalloc compatible
-in general (note that the page table allocation is GFP_KERNEL). Those
-need to be fixed separately.
-
-While we are at it, document that __vmalloc{_node} about unsupported
-gfp mask because there seems to be a lot of confusion out there.
-kvmalloc_node will warn about GFP_KERNEL incompatible (which are not
-superset) flags to catch new abusers. Existing ones would have to die
-slowly.
-
-Changes since v3
-- add __GFP_HIGHMEM for the vmalloc fallback
-- document gfp_mask in __vmalloc_node
-- change ipc_alloc to use the library kvmalloc
-- __aa_kvmalloc doesn't rely on GFP_NOIO anymore so we can drop and
-use the library kvmalloc directly
-- bpf has grown its own kvmalloc open coded variant so replace it by
-the library one
-
-Changes since v2
-- s@WARN_ON@WARN_ON_ONCE@ as per Vlastimil
-- do not fallback to vmalloc for size = PAGE_SIZE as per Vlastimil
-
-Changes since v1
-- define __vmalloc_node_flags for CONFIG_MMU=n
-
-Cc: John Hubbard <jhubbard@nvidia.com>
-Reviewed-by: Andreas Dilger <adilger@dilger.ca> # ext4 part
-Acked-by: Vlastimil Babka <vbabka@suse.cz>
-Signed-off-by: Michal Hocko <mhocko@suse.com>
----
- arch/x86/kvm/lapic.c              |  4 ++--
- arch/x86/kvm/page_track.c         |  4 ++--
- arch/x86/kvm/x86.c                |  4 ++--
- drivers/md/dm-stats.c             |  7 +-----
- fs/ext4/mballoc.c                 |  2 +-
- fs/ext4/super.c                   |  4 ++--
- fs/f2fs/f2fs.h                    | 20 -----------------
- fs/f2fs/file.c                    |  4 ++--
- fs/f2fs/segment.c                 | 14 ++++++------
- fs/seq_file.c                     | 16 +-------------
- include/linux/kvm_host.h          |  2 --
- include/linux/mm.h                | 14 ++++++++++++
- include/linux/vmalloc.h           |  1 +
- ipc/util.c                        |  7 +-----
- kernel/bpf/syscall.c              | 16 +-------------
- mm/nommu.c                        |  5 +++++
- mm/util.c                         | 45 +++++++++++++++++++++++++++++++++++++++
- mm/vmalloc.c                      |  9 +++++++-
- security/apparmor/apparmorfs.c    |  2 +-
- security/apparmor/include/lib.h   | 11 ----------
- security/apparmor/lib.c           | 30 --------------------------
- security/apparmor/match.c         |  2 +-
- security/apparmor/policy_unpack.c |  2 +-
- virt/kvm/kvm_main.c               | 18 +++-------------
- 24 files changed, 101 insertions(+), 142 deletions(-)
-
-diff --git a/arch/x86/kvm/lapic.c b/arch/x86/kvm/lapic.c
-index 33b799fd3a6e..42562348bed2 100644
---- a/arch/x86/kvm/lapic.c
-+++ b/arch/x86/kvm/lapic.c
-@@ -177,8 +177,8 @@ static void recalculate_apic_map(struct kvm *kvm)
- 		if (kvm_apic_present(vcpu))
- 			max_id = max(max_id, kvm_x2apic_id(vcpu->arch.apic));
- 
--	new = kvm_kvzalloc(sizeof(struct kvm_apic_map) +
--	                   sizeof(struct kvm_lapic *) * ((u64)max_id + 1));
-+	new = kvzalloc(sizeof(struct kvm_apic_map) +
-+	                   sizeof(struct kvm_lapic *) * ((u64)max_id + 1), GFP_KERNEL);
- 
- 	if (!new)
- 		goto out;
-diff --git a/arch/x86/kvm/page_track.c b/arch/x86/kvm/page_track.c
-index 4a1c13eaa518..d46663e655b0 100644
---- a/arch/x86/kvm/page_track.c
-+++ b/arch/x86/kvm/page_track.c
-@@ -38,8 +38,8 @@ int kvm_page_track_create_memslot(struct kvm_memory_slot *slot,
- 	int  i;
- 
- 	for (i = 0; i < KVM_PAGE_TRACK_MAX; i++) {
--		slot->arch.gfn_track[i] = kvm_kvzalloc(npages *
--					    sizeof(*slot->arch.gfn_track[i]));
-+		slot->arch.gfn_track[i] = kvzalloc(npages *
-+					    sizeof(*slot->arch.gfn_track[i]), GFP_KERNEL);
- 		if (!slot->arch.gfn_track[i])
- 			goto track_free;
- 	}
-diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
-index 313f2cecbc57..07b0d17df9ea 100644
---- a/arch/x86/kvm/x86.c
-+++ b/arch/x86/kvm/x86.c
-@@ -8121,13 +8121,13 @@ int kvm_arch_create_memslot(struct kvm *kvm, struct kvm_memory_slot *slot,
- 				      slot->base_gfn, level) + 1;
- 
- 		slot->arch.rmap[i] =
--			kvm_kvzalloc(lpages * sizeof(*slot->arch.rmap[i]));
-+			kvzalloc(lpages * sizeof(*slot->arch.rmap[i]), GFP_KERNEL);
- 		if (!slot->arch.rmap[i])
- 			goto out_free;
- 		if (i == 0)
- 			continue;
- 
--		linfo = kvm_kvzalloc(lpages * sizeof(*linfo));
-+		linfo = kvzalloc(lpages * sizeof(*linfo), GFP_KERNEL);
- 		if (!linfo)
- 			goto out_free;
- 
-diff --git a/drivers/md/dm-stats.c b/drivers/md/dm-stats.c
-index 38b05f23b96c..674f9a1686f7 100644
---- a/drivers/md/dm-stats.c
-+++ b/drivers/md/dm-stats.c
-@@ -146,12 +146,7 @@ static void *dm_kvzalloc(size_t alloc_size, int node)
- 	if (!claim_shared_memory(alloc_size))
- 		return NULL;
- 
--	if (alloc_size <= KMALLOC_MAX_SIZE) {
--		p = kzalloc_node(alloc_size, GFP_KERNEL | __GFP_NORETRY | __GFP_NOMEMALLOC | __GFP_NOWARN, node);
--		if (p)
--			return p;
--	}
--	p = vzalloc_node(alloc_size, node);
-+	p = kvzalloc_node(alloc_size, GFP_KERNEL | __GFP_NOMEMALLOC, node);
- 	if (p)
- 		return p;
- 
-diff --git a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c
-index d9fd184b049e..31a761dd76f5 100644
---- a/fs/ext4/mballoc.c
-+++ b/fs/ext4/mballoc.c
-@@ -2381,7 +2381,7 @@ int ext4_mb_alloc_groupinfo(struct super_block *sb, ext4_group_t ngroups)
- 		return 0;
- 
- 	size = roundup_pow_of_two(sizeof(*sbi->s_group_info) * size);
--	new_groupinfo = ext4_kvzalloc(size, GFP_KERNEL);
-+	new_groupinfo = kvzalloc(size, GFP_KERNEL);
- 	if (!new_groupinfo) {
- 		ext4_msg(sb, KERN_ERR, "can't allocate buddy meta group");
- 		return -ENOMEM;
-diff --git a/fs/ext4/super.c b/fs/ext4/super.c
-index 9d15a6293124..e3f1ff04a85f 100644
---- a/fs/ext4/super.c
-+++ b/fs/ext4/super.c
-@@ -2110,7 +2110,7 @@ int ext4_alloc_flex_bg_array(struct super_block *sb, ext4_group_t ngroup)
- 		return 0;
- 
- 	size = roundup_pow_of_two(size * sizeof(struct flex_groups));
--	new_groups = ext4_kvzalloc(size, GFP_KERNEL);
-+	new_groups = kvzalloc(size, GFP_KERNEL);
- 	if (!new_groups) {
- 		ext4_msg(sb, KERN_ERR, "not enough memory for %d flex groups",
- 			 size / (int) sizeof(struct flex_groups));
-@@ -3844,7 +3844,7 @@ static int ext4_fill_super(struct super_block *sb, void *data, int silent)
- 			goto failed_mount;
- 		}
- 	}
--	sbi->s_group_desc = ext4_kvmalloc(db_count *
-+	sbi->s_group_desc = kvmalloc(db_count *
- 					  sizeof(struct buffer_head *),
- 					  GFP_KERNEL);
- 	if (sbi->s_group_desc == NULL) {
-diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
-index 4cce13d0a1a4..83dc25025277 100644
---- a/fs/f2fs/f2fs.h
-+++ b/fs/f2fs/f2fs.h
-@@ -1935,26 +1935,6 @@ static inline void *f2fs_kmalloc(struct f2fs_sb_info *sbi,
- 	return kmalloc(size, flags);
- }
- 
--static inline void *f2fs_kvmalloc(size_t size, gfp_t flags)
--{
--	void *ret;
--
--	ret = kmalloc(size, flags | __GFP_NOWARN);
--	if (!ret)
--		ret = __vmalloc(size, flags, PAGE_KERNEL);
--	return ret;
--}
--
--static inline void *f2fs_kvzalloc(size_t size, gfp_t flags)
--{
--	void *ret;
--
--	ret = kzalloc(size, flags | __GFP_NOWARN);
--	if (!ret)
--		ret = __vmalloc(size, flags | __GFP_ZERO, PAGE_KERNEL);
--	return ret;
--}
--
- #define get_inode_mode(i) \
- 	((is_inode_flag_set(i, FI_ACL_MODE)) ? \
- 	 (F2FS_I(i)->i_acl_mode) : ((i)->i_mode))
-diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c
-index 2752bcf98f95..82ca8c038ecf 100644
---- a/fs/f2fs/file.c
-+++ b/fs/f2fs/file.c
-@@ -1014,11 +1014,11 @@ static int __exchange_data_block(struct inode *src_inode,
- 	while (len) {
- 		olen = min((pgoff_t)4 * ADDRS_PER_BLOCK, len);
- 
--		src_blkaddr = f2fs_kvzalloc(sizeof(block_t) * olen, GFP_KERNEL);
-+		src_blkaddr = kvzalloc(sizeof(block_t) * olen, GFP_KERNEL);
- 		if (!src_blkaddr)
- 			return -ENOMEM;
- 
--		do_replace = f2fs_kvzalloc(sizeof(int) * olen, GFP_KERNEL);
-+		do_replace = kvzalloc(sizeof(int) * olen, GFP_KERNEL);
- 		if (!do_replace) {
- 			kvfree(src_blkaddr);
- 			return -ENOMEM;
-diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c
-index fb57ab9f6aa6..127d875a79f7 100644
---- a/fs/f2fs/segment.c
-+++ b/fs/f2fs/segment.c
-@@ -2351,13 +2351,13 @@ static int build_sit_info(struct f2fs_sb_info *sbi)
- 
- 	SM_I(sbi)->sit_info = sit_i;
- 
--	sit_i->sentries = f2fs_kvzalloc(MAIN_SEGS(sbi) *
-+	sit_i->sentries = kvzalloc(MAIN_SEGS(sbi) *
- 					sizeof(struct seg_entry), GFP_KERNEL);
- 	if (!sit_i->sentries)
- 		return -ENOMEM;
- 
- 	bitmap_size = f2fs_bitmap_size(MAIN_SEGS(sbi));
--	sit_i->dirty_sentries_bitmap = f2fs_kvzalloc(bitmap_size, GFP_KERNEL);
-+	sit_i->dirty_sentries_bitmap = kvzalloc(bitmap_size, GFP_KERNEL);
- 	if (!sit_i->dirty_sentries_bitmap)
- 		return -ENOMEM;
- 
-@@ -2390,7 +2390,7 @@ static int build_sit_info(struct f2fs_sb_info *sbi)
- 		return -ENOMEM;
- 
- 	if (sbi->segs_per_sec > 1) {
--		sit_i->sec_entries = f2fs_kvzalloc(MAIN_SECS(sbi) *
-+		sit_i->sec_entries = kvzalloc(MAIN_SECS(sbi) *
- 					sizeof(struct sec_entry), GFP_KERNEL);
- 		if (!sit_i->sec_entries)
- 			return -ENOMEM;
-@@ -2441,12 +2441,12 @@ static int build_free_segmap(struct f2fs_sb_info *sbi)
- 	SM_I(sbi)->free_info = free_i;
- 
- 	bitmap_size = f2fs_bitmap_size(MAIN_SEGS(sbi));
--	free_i->free_segmap = f2fs_kvmalloc(bitmap_size, GFP_KERNEL);
-+	free_i->free_segmap = kvmalloc(bitmap_size, GFP_KERNEL);
- 	if (!free_i->free_segmap)
- 		return -ENOMEM;
- 
- 	sec_bitmap_size = f2fs_bitmap_size(MAIN_SECS(sbi));
--	free_i->free_secmap = f2fs_kvmalloc(sec_bitmap_size, GFP_KERNEL);
-+	free_i->free_secmap = kvmalloc(sec_bitmap_size, GFP_KERNEL);
- 	if (!free_i->free_secmap)
- 		return -ENOMEM;
- 
-@@ -2614,7 +2614,7 @@ static int init_victim_secmap(struct f2fs_sb_info *sbi)
- 	struct dirty_seglist_info *dirty_i = DIRTY_I(sbi);
- 	unsigned int bitmap_size = f2fs_bitmap_size(MAIN_SECS(sbi));
- 
--	dirty_i->victim_secmap = f2fs_kvzalloc(bitmap_size, GFP_KERNEL);
-+	dirty_i->victim_secmap = kvzalloc(bitmap_size, GFP_KERNEL);
- 	if (!dirty_i->victim_secmap)
- 		return -ENOMEM;
- 	return 0;
-@@ -2636,7 +2636,7 @@ static int build_dirty_segmap(struct f2fs_sb_info *sbi)
- 	bitmap_size = f2fs_bitmap_size(MAIN_SEGS(sbi));
- 
- 	for (i = 0; i < NR_DIRTY_TYPE; i++) {
--		dirty_i->dirty_segmap[i] = f2fs_kvzalloc(bitmap_size, GFP_KERNEL);
-+		dirty_i->dirty_segmap[i] = kvzalloc(bitmap_size, GFP_KERNEL);
- 		if (!dirty_i->dirty_segmap[i])
- 			return -ENOMEM;
- 	}
-diff --git a/fs/seq_file.c b/fs/seq_file.c
-index ca69fb99e41a..dc7c2be963ed 100644
---- a/fs/seq_file.c
-+++ b/fs/seq_file.c
-@@ -25,21 +25,7 @@ static void seq_set_overflow(struct seq_file *m)
- 
- static void *seq_buf_alloc(unsigned long size)
- {
--	void *buf;
--	gfp_t gfp = GFP_KERNEL;
--
--	/*
--	 * For high order allocations, use __GFP_NORETRY to avoid oom-killing -
--	 * it's better to fall back to vmalloc() than to kill things.  For small
--	 * allocations, just use GFP_KERNEL which will oom kill, thus no need
--	 * for vmalloc fallback.
--	 */
--	if (size > PAGE_SIZE)
--		gfp |= __GFP_NORETRY | __GFP_NOWARN;
--	buf = kmalloc(size, gfp);
--	if (!buf && size > PAGE_SIZE)
--		buf = vmalloc(size);
--	return buf;
-+	return kvmalloc(size, GFP_KERNEL);
- }
- 
- /**
-diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h
-index 1c5190dab2c1..00e6f93d1ee0 100644
---- a/include/linux/kvm_host.h
-+++ b/include/linux/kvm_host.h
-@@ -768,8 +768,6 @@ void kvm_arch_check_processor_compat(void *rtn);
- int kvm_arch_vcpu_runnable(struct kvm_vcpu *vcpu);
- int kvm_arch_vcpu_should_kick(struct kvm_vcpu *vcpu);
- 
--void *kvm_kvzalloc(unsigned long size);
--
- #ifndef __KVM_HAVE_ARCH_VM_ALLOC
- static inline struct kvm *kvm_arch_alloc_vm(void)
- {
-diff --git a/include/linux/mm.h b/include/linux/mm.h
-index a6b9ab0945c4..0d9fdc0a2a7b 100644
---- a/include/linux/mm.h
-+++ b/include/linux/mm.h
-@@ -498,6 +498,20 @@ static inline int is_vmalloc_or_module_addr(const void *x)
- }
- #endif
- 
-+extern void *kvmalloc_node(size_t size, gfp_t flags, int node);
-+static inline void *kvmalloc(size_t size, gfp_t flags)
-+{
-+	return kvmalloc_node(size, flags, NUMA_NO_NODE);
-+}
-+static inline void *kvzalloc_node(size_t size, gfp_t flags, int node)
-+{
-+	return kvmalloc_node(size, flags | __GFP_ZERO, node);
-+}
-+static inline void *kvzalloc(size_t size, gfp_t flags)
-+{
-+	return kvmalloc(size, flags | __GFP_ZERO);
-+}
-+
- extern void kvfree(const void *addr);
- 
- static inline atomic_t *compound_mapcount_ptr(struct page *page)
-diff --git a/include/linux/vmalloc.h b/include/linux/vmalloc.h
-index d68edffbf142..46991ad3ddd5 100644
---- a/include/linux/vmalloc.h
-+++ b/include/linux/vmalloc.h
-@@ -80,6 +80,7 @@ extern void *__vmalloc_node_range(unsigned long size, unsigned long align,
- 			unsigned long start, unsigned long end, gfp_t gfp_mask,
- 			pgprot_t prot, unsigned long vm_flags, int node,
- 			const void *caller);
-+extern void *__vmalloc_node_flags(unsigned long size, int node, gfp_t flags);
- 
- extern void vfree(const void *addr);
- extern void vfree_atomic(const void *addr);
-diff --git a/ipc/util.c b/ipc/util.c
-index 798cad18dd87..74c2adc62086 100644
---- a/ipc/util.c
-+++ b/ipc/util.c
-@@ -403,12 +403,7 @@ void ipc_rmid(struct ipc_ids *ids, struct kern_ipc_perm *ipcp)
-  */
- void *ipc_alloc(int size)
- {
--	void *out;
--	if (size > PAGE_SIZE)
--		out = vmalloc(size);
--	else
--		out = kmalloc(size, GFP_KERNEL);
--	return out;
-+	return kvmalloc(size, GFP_KERNEL);
- }
- 
- /**
-diff --git a/kernel/bpf/syscall.c b/kernel/bpf/syscall.c
-index 19b6129eab23..8697f43cf93c 100644
---- a/kernel/bpf/syscall.c
-+++ b/kernel/bpf/syscall.c
-@@ -53,21 +53,7 @@ void bpf_register_map_type(struct bpf_map_type_list *tl)
- 
- void *bpf_map_area_alloc(size_t size)
- {
--	/* We definitely need __GFP_NORETRY, so OOM killer doesn't
--	 * trigger under memory pressure as we really just want to
--	 * fail instead.
--	 */
--	const gfp_t flags = __GFP_NOWARN | __GFP_NORETRY | __GFP_ZERO;
--	void *area;
--
--	if (size <= (PAGE_SIZE << PAGE_ALLOC_COSTLY_ORDER)) {
--		area = kmalloc(size, GFP_USER | flags);
--		if (area != NULL)
--			return area;
--	}
--
--	return __vmalloc(size, GFP_KERNEL | __GFP_HIGHMEM | flags,
--			 PAGE_KERNEL);
-+	return kvzalloc(size, GFP_USER);
- }
- 
- void bpf_map_area_free(void *area)
-diff --git a/mm/nommu.c b/mm/nommu.c
-index 215c62296028..bee76e6cd4e5 100644
---- a/mm/nommu.c
-+++ b/mm/nommu.c
-@@ -236,6 +236,11 @@ void *__vmalloc(unsigned long size, gfp_t gfp_mask, pgprot_t prot)
- }
- EXPORT_SYMBOL(__vmalloc);
- 
-+void *__vmalloc_node_flags(unsigned long size, int node, gfp_t flags)
-+{
-+	return __vmalloc(size, flags, PAGE_KERNEL);
-+}
-+
- void *vmalloc_user(unsigned long size)
- {
- 	void *ret;
-diff --git a/mm/util.c b/mm/util.c
-index 3cb2164f4099..ef72e2554edb 100644
---- a/mm/util.c
-+++ b/mm/util.c
-@@ -324,6 +324,51 @@ unsigned long vm_mmap(struct file *file, unsigned long addr,
- }
- EXPORT_SYMBOL(vm_mmap);
- 
-+/**
-+ * kvmalloc_node - attempt to allocate physically contiguous memory, but upon
-+ * failure, fall back to non-contiguous (vmalloc) allocation.
-+ * @size: size of the request.
-+ * @flags: gfp mask for the allocation - must be compatible (superset) with GFP_KERNEL.
-+ * @node: numa node to allocate from
-+ *
-+ * Uses kmalloc to get the memory but if the allocation fails then falls back
-+ * to the vmalloc allocator. Use kvfree for freeing the memory.
-+ *
-+ * Reclaim modifiers - __GFP_NORETRY, __GFP_REPEAT and __GFP_NOFAIL are not supported
-+ *
-+ * Any use of gfp flags outside of GFP_KERNEL should be consulted with mm people.
-+ */
-+void *kvmalloc_node(size_t size, gfp_t flags, int node)
-+{
-+	gfp_t kmalloc_flags = flags;
-+	void *ret;
-+
-+	/*
-+	 * vmalloc uses GFP_KERNEL for some internal allocations (e.g page tables)
-+	 * so the given set of flags has to be compatible.
-+	 */
-+	WARN_ON_ONCE((flags & GFP_KERNEL) != GFP_KERNEL);
-+
-+	/*
-+	 * Make sure that larger requests are not too disruptive - no OOM
-+	 * killer and no allocation failure warnings as we have a fallback
-+	 */
-+	if (size > PAGE_SIZE)
-+		kmalloc_flags |= __GFP_NORETRY | __GFP_NOWARN;
-+
-+	ret = kmalloc_node(size, kmalloc_flags, node);
-+
-+	/*
-+	 * It doesn't really make sense to fallback to vmalloc for sub page
-+	 * requests
-+	 */
-+	if (ret || size <= PAGE_SIZE)
-+		return ret;
-+
-+	return __vmalloc_node_flags(size, node, flags | __GFP_HIGHMEM);
-+}
-+EXPORT_SYMBOL(kvmalloc_node);
-+
- void kvfree(const void *addr)
- {
- 	if (is_vmalloc_addr(addr))
-diff --git a/mm/vmalloc.c b/mm/vmalloc.c
-index d89034a393f2..6c1aa2c68887 100644
---- a/mm/vmalloc.c
-+++ b/mm/vmalloc.c
-@@ -1741,6 +1741,13 @@ void *__vmalloc_node_range(unsigned long size, unsigned long align,
-  *	Allocate enough pages to cover @size from the page level
-  *	allocator with @gfp_mask flags.  Map them into contiguous
-  *	kernel virtual space, using a pagetable protection of @prot.
-+ *
-+ *	Reclaim modifiers in @gfp_mask - __GFP_NORETRY, __GFP_REPEAT
-+ *	and __GFP_NOFAIL are not supported
-+ *
-+ *	Any use of gfp flags outside of GFP_KERNEL should be consulted
-+ *	with mm people.
-+ *
-  */
- static void *__vmalloc_node(unsigned long size, unsigned long align,
- 			    gfp_t gfp_mask, pgprot_t prot,
-@@ -1757,7 +1764,7 @@ void *__vmalloc(unsigned long size, gfp_t gfp_mask, pgprot_t prot)
- }
- EXPORT_SYMBOL(__vmalloc);
- 
--static inline void *__vmalloc_node_flags(unsigned long size,
-+void *__vmalloc_node_flags(unsigned long size,
- 					int node, gfp_t flags)
- {
- 	return __vmalloc_node(size, 1, flags, PAGE_KERNEL,
-diff --git a/security/apparmor/apparmorfs.c b/security/apparmor/apparmorfs.c
-index 41073f70eb41..be0b49897a67 100644
---- a/security/apparmor/apparmorfs.c
-+++ b/security/apparmor/apparmorfs.c
-@@ -98,7 +98,7 @@ static struct aa_loaddata *aa_simple_write_to_buffer(const char __user *userbuf,
- 		return ERR_PTR(-ESPIPE);
- 
- 	/* freed by caller to simple_write_to_buffer */
--	data = kvmalloc(sizeof(*data) + alloc_size);
-+	data = kvmalloc(sizeof(*data) + alloc_size, GFP_KERNEL);
- 	if (data == NULL)
- 		return ERR_PTR(-ENOMEM);
- 	kref_init(&data->count);
-diff --git a/security/apparmor/include/lib.h b/security/apparmor/include/lib.h
-index 65ff492a9807..75733baa6702 100644
---- a/security/apparmor/include/lib.h
-+++ b/security/apparmor/include/lib.h
-@@ -64,17 +64,6 @@ char *aa_split_fqname(char *args, char **ns_name);
- const char *aa_splitn_fqname(const char *fqname, size_t n, const char **ns_name,
- 			     size_t *ns_len);
- void aa_info_message(const char *str);
--void *__aa_kvmalloc(size_t size, gfp_t flags);
--
--static inline void *kvmalloc(size_t size)
--{
--	return __aa_kvmalloc(size, 0);
--}
--
--static inline void *kvzalloc(size_t size)
--{
--	return __aa_kvmalloc(size, __GFP_ZERO);
--}
- 
- /**
-  * aa_strneq - compare null terminated @str to a non null terminated substring
-diff --git a/security/apparmor/lib.c b/security/apparmor/lib.c
-index 66475bda6f72..1a13494bc7c7 100644
---- a/security/apparmor/lib.c
-+++ b/security/apparmor/lib.c
-@@ -129,36 +129,6 @@ void aa_info_message(const char *str)
- }
- 
- /**
-- * __aa_kvmalloc - do allocation preferring kmalloc but falling back to vmalloc
-- * @size: how many bytes of memory are required
-- * @flags: the type of memory to allocate (see kmalloc).
-- *
-- * Return: allocated buffer or NULL if failed
-- *
-- * It is possible that policy being loaded from the user is larger than
-- * what can be allocated by kmalloc, in those cases fall back to vmalloc.
-- */
--void *__aa_kvmalloc(size_t size, gfp_t flags)
--{
--	void *buffer = NULL;
--
--	if (size == 0)
--		return NULL;
--
--	/* do not attempt kmalloc if we need more than 16 pages at once */
--	if (size <= (16*PAGE_SIZE))
--		buffer = kmalloc(size, flags | GFP_KERNEL | __GFP_NORETRY |
--				 __GFP_NOWARN);
--	if (!buffer) {
--		if (flags & __GFP_ZERO)
--			buffer = vzalloc(size);
--		else
--			buffer = vmalloc(size);
--	}
--	return buffer;
--}
--
--/**
-  * aa_policy_init - initialize a policy structure
-  * @policy: policy to initialize  (NOT NULL)
-  * @prefix: prefix name if any is required.  (MAYBE NULL)
-diff --git a/security/apparmor/match.c b/security/apparmor/match.c
-index eb0efef746f5..960c913381e2 100644
---- a/security/apparmor/match.c
-+++ b/security/apparmor/match.c
-@@ -88,7 +88,7 @@ static struct table_header *unpack_table(char *blob, size_t bsize)
- 	if (bsize < tsize)
- 		goto out;
- 
--	table = kvzalloc(tsize);
-+	table = kvzalloc(tsize, GFP_KERNEL);
- 	if (table) {
- 		table->td_id = th.td_id;
- 		table->td_flags = th.td_flags;
-diff --git a/security/apparmor/policy_unpack.c b/security/apparmor/policy_unpack.c
-index 2e37c9c26bbd..f3422a91353c 100644
---- a/security/apparmor/policy_unpack.c
-+++ b/security/apparmor/policy_unpack.c
-@@ -487,7 +487,7 @@ static bool unpack_rlimits(struct aa_ext *e, struct aa_profile *profile)
- 
- static void *kvmemdup(const void *src, size_t len)
- {
--	void *p = kvmalloc(len);
-+	void *p = kvmalloc(len, GFP_KERNEL);
- 
- 	if (p)
- 		memcpy(p, src, len);
-diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c
-index dcd1c12940e6..795c8269ef63 100644
---- a/virt/kvm/kvm_main.c
-+++ b/virt/kvm/kvm_main.c
-@@ -502,7 +502,7 @@ static struct kvm_memslots *kvm_alloc_memslots(void)
- 	int i;
- 	struct kvm_memslots *slots;
- 
--	slots = kvm_kvzalloc(sizeof(struct kvm_memslots));
-+	slots = kvzalloc(sizeof(struct kvm_memslots), GFP_KERNEL);
- 	if (!slots)
- 		return NULL;
- 
-@@ -685,18 +685,6 @@ static struct kvm *kvm_create_vm(unsigned long type)
- 	return ERR_PTR(r);
- }
- 
--/*
-- * Avoid using vmalloc for a small buffer.
-- * Should not be used when the size is statically known.
-- */
--void *kvm_kvzalloc(unsigned long size)
--{
--	if (size > PAGE_SIZE)
--		return vzalloc(size);
--	else
--		return kzalloc(size, GFP_KERNEL);
--}
--
- static void kvm_destroy_devices(struct kvm *kvm)
- {
- 	struct kvm_device *dev, *tmp;
-@@ -775,7 +763,7 @@ static int kvm_create_dirty_bitmap(struct kvm_memory_slot *memslot)
- {
- 	unsigned long dirty_bytes = 2 * kvm_dirty_bitmap_bytes(memslot);
- 
--	memslot->dirty_bitmap = kvm_kvzalloc(dirty_bytes);
-+	memslot->dirty_bitmap = kvzalloc(dirty_bytes, GFP_KERNEL);
- 	if (!memslot->dirty_bitmap)
- 		return -ENOMEM;
- 
-@@ -995,7 +983,7 @@ int __kvm_set_memory_region(struct kvm *kvm,
- 			goto out_free;
- 	}
- 
--	slots = kvm_kvzalloc(sizeof(struct kvm_memslots));
-+	slots = kvzalloc(sizeof(struct kvm_memslots), GFP_KERNEL);
- 	if (!slots)
- 		goto out_free;
- 	memcpy(slots, __kvm_memslots(kvm, as_id), sizeof(struct kvm_memslots));
--- 
-2.11.0
-
--- 
-Michal Hocko
-SUSE Labs
\ No newline at end of file
+following?
\ No newline at end of file
diff --git a/a/content_digest b/N1/content_digest
index b3006b4..efd6b8a 100644
--- a/a/content_digest
+++ b/N1/content_digest
@@ -81,676 +81,7 @@
   "the vmalloc.\n",
   "\n",
   "So before I resend the full series again, can I keep acks with the\n",
-  "following?\n",
-  "\n",
-  ">From e53038d7fc947519830b6d29a20ec1ff66ae53f0 Mon Sep 17 00:00:00 2001\n",
-  "From: Michal Hocko <mhocko\@suse.com>\n",
-  "Date: Thu, 8 Dec 2016 09:19:32 +0100\n",
-  "Subject: [PATCH] mm: introduce kv[mz]alloc helpers\n",
-  "\n",
-  "Using kmalloc with the vmalloc fallback for larger allocations is a\n",
-  "common pattern in the kernel code. Yet we do not have any common helper\n",
-  "for that and so users have invented their own helpers. Some of them are\n",
-  "really creative when doing so. Let's just add kv[mz]alloc and make sure\n",
-  "it is implemented properly. This implementation makes sure to not make\n",
-  "a large memory pressure for > PAGE_SZE requests (__GFP_NORETRY) and also\n",
-  "to not warn about allocation failures. This also rules out the OOM\n",
-  "killer as the vmalloc is a more approapriate fallback than a disruptive\n",
-  "user visible action.\n",
-  "\n",
-  "This patch also changes some existing users and removes helpers which\n",
-  "are specific for them. In some cases this is not possible (e.g.\n",
-  "ext4_kvmalloc, libcfs_kvzalloc) because those seems to be\n",
-  "broken and require GFP_NO{FS,IO} context which is not vmalloc compatible\n",
-  "in general (note that the page table allocation is GFP_KERNEL). Those\n",
-  "need to be fixed separately.\n",
-  "\n",
-  "While we are at it, document that __vmalloc{_node} about unsupported\n",
-  "gfp mask because there seems to be a lot of confusion out there.\n",
-  "kvmalloc_node will warn about GFP_KERNEL incompatible (which are not\n",
-  "superset) flags to catch new abusers. Existing ones would have to die\n",
-  "slowly.\n",
-  "\n",
-  "Changes since v3\n",
-  "- add __GFP_HIGHMEM for the vmalloc fallback\n",
-  "- document gfp_mask in __vmalloc_node\n",
-  "- change ipc_alloc to use the library kvmalloc\n",
-  "- __aa_kvmalloc doesn't rely on GFP_NOIO anymore so we can drop and\n",
-  "use the library kvmalloc directly\n",
-  "- bpf has grown its own kvmalloc open coded variant so replace it by\n",
-  "the library one\n",
-  "\n",
-  "Changes since v2\n",
-  "- s\@WARN_ON\@WARN_ON_ONCE\@ as per Vlastimil\n",
-  "- do not fallback to vmalloc for size = PAGE_SIZE as per Vlastimil\n",
-  "\n",
-  "Changes since v1\n",
-  "- define __vmalloc_node_flags for CONFIG_MMU=n\n",
-  "\n",
-  "Cc: John Hubbard <jhubbard\@nvidia.com>\n",
-  "Reviewed-by: Andreas Dilger <adilger\@dilger.ca> # ext4 part\n",
-  "Acked-by: Vlastimil Babka <vbabka\@suse.cz>\n",
-  "Signed-off-by: Michal Hocko <mhocko\@suse.com>\n",
-  "---\n",
-  " arch/x86/kvm/lapic.c              |  4 ++--\n",
-  " arch/x86/kvm/page_track.c         |  4 ++--\n",
-  " arch/x86/kvm/x86.c                |  4 ++--\n",
-  " drivers/md/dm-stats.c             |  7 +-----\n",
-  " fs/ext4/mballoc.c                 |  2 +-\n",
-  " fs/ext4/super.c                   |  4 ++--\n",
-  " fs/f2fs/f2fs.h                    | 20 -----------------\n",
-  " fs/f2fs/file.c                    |  4 ++--\n",
-  " fs/f2fs/segment.c                 | 14 ++++++------\n",
-  " fs/seq_file.c                     | 16 +-------------\n",
-  " include/linux/kvm_host.h          |  2 --\n",
-  " include/linux/mm.h                | 14 ++++++++++++\n",
-  " include/linux/vmalloc.h           |  1 +\n",
-  " ipc/util.c                        |  7 +-----\n",
-  " kernel/bpf/syscall.c              | 16 +-------------\n",
-  " mm/nommu.c                        |  5 +++++\n",
-  " mm/util.c                         | 45 +++++++++++++++++++++++++++++++++++++++\n",
-  " mm/vmalloc.c                      |  9 +++++++-\n",
-  " security/apparmor/apparmorfs.c    |  2 +-\n",
-  " security/apparmor/include/lib.h   | 11 ----------\n",
-  " security/apparmor/lib.c           | 30 --------------------------\n",
-  " security/apparmor/match.c         |  2 +-\n",
-  " security/apparmor/policy_unpack.c |  2 +-\n",
-  " virt/kvm/kvm_main.c               | 18 +++-------------\n",
-  " 24 files changed, 101 insertions(+), 142 deletions(-)\n",
-  "\n",
-  "diff --git a/arch/x86/kvm/lapic.c b/arch/x86/kvm/lapic.c\n",
-  "index 33b799fd3a6e..42562348bed2 100644\n",
-  "--- a/arch/x86/kvm/lapic.c\n",
-  "+++ b/arch/x86/kvm/lapic.c\n",
-  "\@\@ -177,8 +177,8 \@\@ static void recalculate_apic_map(struct kvm *kvm)\n",
-  " \t\tif (kvm_apic_present(vcpu))\n",
-  " \t\t\tmax_id = max(max_id, kvm_x2apic_id(vcpu->arch.apic));\n",
-  " \n",
-  "-\tnew = kvm_kvzalloc(sizeof(struct kvm_apic_map) +\n",
-  "-\t                   sizeof(struct kvm_lapic *) * ((u64)max_id + 1));\n",
-  "+\tnew = kvzalloc(sizeof(struct kvm_apic_map) +\n",
-  "+\t                   sizeof(struct kvm_lapic *) * ((u64)max_id + 1), GFP_KERNEL);\n",
-  " \n",
-  " \tif (!new)\n",
-  " \t\tgoto out;\n",
-  "diff --git a/arch/x86/kvm/page_track.c b/arch/x86/kvm/page_track.c\n",
-  "index 4a1c13eaa518..d46663e655b0 100644\n",
-  "--- a/arch/x86/kvm/page_track.c\n",
-  "+++ b/arch/x86/kvm/page_track.c\n",
-  "\@\@ -38,8 +38,8 \@\@ int kvm_page_track_create_memslot(struct kvm_memory_slot *slot,\n",
-  " \tint  i;\n",
-  " \n",
-  " \tfor (i = 0; i < KVM_PAGE_TRACK_MAX; i++) {\n",
-  "-\t\tslot->arch.gfn_track[i] = kvm_kvzalloc(npages *\n",
-  "-\t\t\t\t\t    sizeof(*slot->arch.gfn_track[i]));\n",
-  "+\t\tslot->arch.gfn_track[i] = kvzalloc(npages *\n",
-  "+\t\t\t\t\t    sizeof(*slot->arch.gfn_track[i]), GFP_KERNEL);\n",
-  " \t\tif (!slot->arch.gfn_track[i])\n",
-  " \t\t\tgoto track_free;\n",
-  " \t}\n",
-  "diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c\n",
-  "index 313f2cecbc57..07b0d17df9ea 100644\n",
-  "--- a/arch/x86/kvm/x86.c\n",
-  "+++ b/arch/x86/kvm/x86.c\n",
-  "\@\@ -8121,13 +8121,13 \@\@ int kvm_arch_create_memslot(struct kvm *kvm, struct kvm_memory_slot *slot,\n",
-  " \t\t\t\t      slot->base_gfn, level) + 1;\n",
-  " \n",
-  " \t\tslot->arch.rmap[i] =\n",
-  "-\t\t\tkvm_kvzalloc(lpages * sizeof(*slot->arch.rmap[i]));\n",
-  "+\t\t\tkvzalloc(lpages * sizeof(*slot->arch.rmap[i]), GFP_KERNEL);\n",
-  " \t\tif (!slot->arch.rmap[i])\n",
-  " \t\t\tgoto out_free;\n",
-  " \t\tif (i == 0)\n",
-  " \t\t\tcontinue;\n",
-  " \n",
-  "-\t\tlinfo = kvm_kvzalloc(lpages * sizeof(*linfo));\n",
-  "+\t\tlinfo = kvzalloc(lpages * sizeof(*linfo), GFP_KERNEL);\n",
-  " \t\tif (!linfo)\n",
-  " \t\t\tgoto out_free;\n",
-  " \n",
-  "diff --git a/drivers/md/dm-stats.c b/drivers/md/dm-stats.c\n",
-  "index 38b05f23b96c..674f9a1686f7 100644\n",
-  "--- a/drivers/md/dm-stats.c\n",
-  "+++ b/drivers/md/dm-stats.c\n",
-  "\@\@ -146,12 +146,7 \@\@ static void *dm_kvzalloc(size_t alloc_size, int node)\n",
-  " \tif (!claim_shared_memory(alloc_size))\n",
-  " \t\treturn NULL;\n",
-  " \n",
-  "-\tif (alloc_size <= KMALLOC_MAX_SIZE) {\n",
-  "-\t\tp = kzalloc_node(alloc_size, GFP_KERNEL | __GFP_NORETRY | __GFP_NOMEMALLOC | __GFP_NOWARN, node);\n",
-  "-\t\tif (p)\n",
-  "-\t\t\treturn p;\n",
-  "-\t}\n",
-  "-\tp = vzalloc_node(alloc_size, node);\n",
-  "+\tp = kvzalloc_node(alloc_size, GFP_KERNEL | __GFP_NOMEMALLOC, node);\n",
-  " \tif (p)\n",
-  " \t\treturn p;\n",
-  " \n",
-  "diff --git a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c\n",
-  "index d9fd184b049e..31a761dd76f5 100644\n",
-  "--- a/fs/ext4/mballoc.c\n",
-  "+++ b/fs/ext4/mballoc.c\n",
-  "\@\@ -2381,7 +2381,7 \@\@ int ext4_mb_alloc_groupinfo(struct super_block *sb, ext4_group_t ngroups)\n",
-  " \t\treturn 0;\n",
-  " \n",
-  " \tsize = roundup_pow_of_two(sizeof(*sbi->s_group_info) * size);\n",
-  "-\tnew_groupinfo = ext4_kvzalloc(size, GFP_KERNEL);\n",
-  "+\tnew_groupinfo = kvzalloc(size, GFP_KERNEL);\n",
-  " \tif (!new_groupinfo) {\n",
-  " \t\text4_msg(sb, KERN_ERR, \"can't allocate buddy meta group\");\n",
-  " \t\treturn -ENOMEM;\n",
-  "diff --git a/fs/ext4/super.c b/fs/ext4/super.c\n",
-  "index 9d15a6293124..e3f1ff04a85f 100644\n",
-  "--- a/fs/ext4/super.c\n",
-  "+++ b/fs/ext4/super.c\n",
-  "\@\@ -2110,7 +2110,7 \@\@ int ext4_alloc_flex_bg_array(struct super_block *sb, ext4_group_t ngroup)\n",
-  " \t\treturn 0;\n",
-  " \n",
-  " \tsize = roundup_pow_of_two(size * sizeof(struct flex_groups));\n",
-  "-\tnew_groups = ext4_kvzalloc(size, GFP_KERNEL);\n",
-  "+\tnew_groups = kvzalloc(size, GFP_KERNEL);\n",
-  " \tif (!new_groups) {\n",
-  " \t\text4_msg(sb, KERN_ERR, \"not enough memory for %d flex groups\",\n",
-  " \t\t\t size / (int) sizeof(struct flex_groups));\n",
-  "\@\@ -3844,7 +3844,7 \@\@ static int ext4_fill_super(struct super_block *sb, void *data, int silent)\n",
-  " \t\t\tgoto failed_mount;\n",
-  " \t\t}\n",
-  " \t}\n",
-  "-\tsbi->s_group_desc = ext4_kvmalloc(db_count *\n",
-  "+\tsbi->s_group_desc = kvmalloc(db_count *\n",
-  " \t\t\t\t\t  sizeof(struct buffer_head *),\n",
-  " \t\t\t\t\t  GFP_KERNEL);\n",
-  " \tif (sbi->s_group_desc == NULL) {\n",
-  "diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h\n",
-  "index 4cce13d0a1a4..83dc25025277 100644\n",
-  "--- a/fs/f2fs/f2fs.h\n",
-  "+++ b/fs/f2fs/f2fs.h\n",
-  "\@\@ -1935,26 +1935,6 \@\@ static inline void *f2fs_kmalloc(struct f2fs_sb_info *sbi,\n",
-  " \treturn kmalloc(size, flags);\n",
-  " }\n",
-  " \n",
-  "-static inline void *f2fs_kvmalloc(size_t size, gfp_t flags)\n",
-  "-{\n",
-  "-\tvoid *ret;\n",
-  "-\n",
-  "-\tret = kmalloc(size, flags | __GFP_NOWARN);\n",
-  "-\tif (!ret)\n",
-  "-\t\tret = __vmalloc(size, flags, PAGE_KERNEL);\n",
-  "-\treturn ret;\n",
-  "-}\n",
-  "-\n",
-  "-static inline void *f2fs_kvzalloc(size_t size, gfp_t flags)\n",
-  "-{\n",
-  "-\tvoid *ret;\n",
-  "-\n",
-  "-\tret = kzalloc(size, flags | __GFP_NOWARN);\n",
-  "-\tif (!ret)\n",
-  "-\t\tret = __vmalloc(size, flags | __GFP_ZERO, PAGE_KERNEL);\n",
-  "-\treturn ret;\n",
-  "-}\n",
-  "-\n",
-  " #define get_inode_mode(i) \\\n",
-  " \t((is_inode_flag_set(i, FI_ACL_MODE)) ? \\\n",
-  " \t (F2FS_I(i)->i_acl_mode) : ((i)->i_mode))\n",
-  "diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c\n",
-  "index 2752bcf98f95..82ca8c038ecf 100644\n",
-  "--- a/fs/f2fs/file.c\n",
-  "+++ b/fs/f2fs/file.c\n",
-  "\@\@ -1014,11 +1014,11 \@\@ static int __exchange_data_block(struct inode *src_inode,\n",
-  " \twhile (len) {\n",
-  " \t\tolen = min((pgoff_t)4 * ADDRS_PER_BLOCK, len);\n",
-  " \n",
-  "-\t\tsrc_blkaddr = f2fs_kvzalloc(sizeof(block_t) * olen, GFP_KERNEL);\n",
-  "+\t\tsrc_blkaddr = kvzalloc(sizeof(block_t) * olen, GFP_KERNEL);\n",
-  " \t\tif (!src_blkaddr)\n",
-  " \t\t\treturn -ENOMEM;\n",
-  " \n",
-  "-\t\tdo_replace = f2fs_kvzalloc(sizeof(int) * olen, GFP_KERNEL);\n",
-  "+\t\tdo_replace = kvzalloc(sizeof(int) * olen, GFP_KERNEL);\n",
-  " \t\tif (!do_replace) {\n",
-  " \t\t\tkvfree(src_blkaddr);\n",
-  " \t\t\treturn -ENOMEM;\n",
-  "diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c\n",
-  "index fb57ab9f6aa6..127d875a79f7 100644\n",
-  "--- a/fs/f2fs/segment.c\n",
-  "+++ b/fs/f2fs/segment.c\n",
-  "\@\@ -2351,13 +2351,13 \@\@ static int build_sit_info(struct f2fs_sb_info *sbi)\n",
-  " \n",
-  " \tSM_I(sbi)->sit_info = sit_i;\n",
-  " \n",
-  "-\tsit_i->sentries = f2fs_kvzalloc(MAIN_SEGS(sbi) *\n",
-  "+\tsit_i->sentries = kvzalloc(MAIN_SEGS(sbi) *\n",
-  " \t\t\t\t\tsizeof(struct seg_entry), GFP_KERNEL);\n",
-  " \tif (!sit_i->sentries)\n",
-  " \t\treturn -ENOMEM;\n",
-  " \n",
-  " \tbitmap_size = f2fs_bitmap_size(MAIN_SEGS(sbi));\n",
-  "-\tsit_i->dirty_sentries_bitmap = f2fs_kvzalloc(bitmap_size, GFP_KERNEL);\n",
-  "+\tsit_i->dirty_sentries_bitmap = kvzalloc(bitmap_size, GFP_KERNEL);\n",
-  " \tif (!sit_i->dirty_sentries_bitmap)\n",
-  " \t\treturn -ENOMEM;\n",
-  " \n",
-  "\@\@ -2390,7 +2390,7 \@\@ static int build_sit_info(struct f2fs_sb_info *sbi)\n",
-  " \t\treturn -ENOMEM;\n",
-  " \n",
-  " \tif (sbi->segs_per_sec > 1) {\n",
-  "-\t\tsit_i->sec_entries = f2fs_kvzalloc(MAIN_SECS(sbi) *\n",
-  "+\t\tsit_i->sec_entries = kvzalloc(MAIN_SECS(sbi) *\n",
-  " \t\t\t\t\tsizeof(struct sec_entry), GFP_KERNEL);\n",
-  " \t\tif (!sit_i->sec_entries)\n",
-  " \t\t\treturn -ENOMEM;\n",
-  "\@\@ -2441,12 +2441,12 \@\@ static int build_free_segmap(struct f2fs_sb_info *sbi)\n",
-  " \tSM_I(sbi)->free_info = free_i;\n",
-  " \n",
-  " \tbitmap_size = f2fs_bitmap_size(MAIN_SEGS(sbi));\n",
-  "-\tfree_i->free_segmap = f2fs_kvmalloc(bitmap_size, GFP_KERNEL);\n",
-  "+\tfree_i->free_segmap = kvmalloc(bitmap_size, GFP_KERNEL);\n",
-  " \tif (!free_i->free_segmap)\n",
-  " \t\treturn -ENOMEM;\n",
-  " \n",
-  " \tsec_bitmap_size = f2fs_bitmap_size(MAIN_SECS(sbi));\n",
-  "-\tfree_i->free_secmap = f2fs_kvmalloc(sec_bitmap_size, GFP_KERNEL);\n",
-  "+\tfree_i->free_secmap = kvmalloc(sec_bitmap_size, GFP_KERNEL);\n",
-  " \tif (!free_i->free_secmap)\n",
-  " \t\treturn -ENOMEM;\n",
-  " \n",
-  "\@\@ -2614,7 +2614,7 \@\@ static int init_victim_secmap(struct f2fs_sb_info *sbi)\n",
-  " \tstruct dirty_seglist_info *dirty_i = DIRTY_I(sbi);\n",
-  " \tunsigned int bitmap_size = f2fs_bitmap_size(MAIN_SECS(sbi));\n",
-  " \n",
-  "-\tdirty_i->victim_secmap = f2fs_kvzalloc(bitmap_size, GFP_KERNEL);\n",
-  "+\tdirty_i->victim_secmap = kvzalloc(bitmap_size, GFP_KERNEL);\n",
-  " \tif (!dirty_i->victim_secmap)\n",
-  " \t\treturn -ENOMEM;\n",
-  " \treturn 0;\n",
-  "\@\@ -2636,7 +2636,7 \@\@ static int build_dirty_segmap(struct f2fs_sb_info *sbi)\n",
-  " \tbitmap_size = f2fs_bitmap_size(MAIN_SEGS(sbi));\n",
-  " \n",
-  " \tfor (i = 0; i < NR_DIRTY_TYPE; i++) {\n",
-  "-\t\tdirty_i->dirty_segmap[i] = f2fs_kvzalloc(bitmap_size, GFP_KERNEL);\n",
-  "+\t\tdirty_i->dirty_segmap[i] = kvzalloc(bitmap_size, GFP_KERNEL);\n",
-  " \t\tif (!dirty_i->dirty_segmap[i])\n",
-  " \t\t\treturn -ENOMEM;\n",
-  " \t}\n",
-  "diff --git a/fs/seq_file.c b/fs/seq_file.c\n",
-  "index ca69fb99e41a..dc7c2be963ed 100644\n",
-  "--- a/fs/seq_file.c\n",
-  "+++ b/fs/seq_file.c\n",
-  "\@\@ -25,21 +25,7 \@\@ static void seq_set_overflow(struct seq_file *m)\n",
-  " \n",
-  " static void *seq_buf_alloc(unsigned long size)\n",
-  " {\n",
-  "-\tvoid *buf;\n",
-  "-\tgfp_t gfp = GFP_KERNEL;\n",
-  "-\n",
-  "-\t/*\n",
-  "-\t * For high order allocations, use __GFP_NORETRY to avoid oom-killing -\n",
-  "-\t * it's better to fall back to vmalloc() than to kill things.  For small\n",
-  "-\t * allocations, just use GFP_KERNEL which will oom kill, thus no need\n",
-  "-\t * for vmalloc fallback.\n",
-  "-\t */\n",
-  "-\tif (size > PAGE_SIZE)\n",
-  "-\t\tgfp |= __GFP_NORETRY | __GFP_NOWARN;\n",
-  "-\tbuf = kmalloc(size, gfp);\n",
-  "-\tif (!buf && size > PAGE_SIZE)\n",
-  "-\t\tbuf = vmalloc(size);\n",
-  "-\treturn buf;\n",
-  "+\treturn kvmalloc(size, GFP_KERNEL);\n",
-  " }\n",
-  " \n",
-  " /**\n",
-  "diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h\n",
-  "index 1c5190dab2c1..00e6f93d1ee0 100644\n",
-  "--- a/include/linux/kvm_host.h\n",
-  "+++ b/include/linux/kvm_host.h\n",
-  "\@\@ -768,8 +768,6 \@\@ void kvm_arch_check_processor_compat(void *rtn);\n",
-  " int kvm_arch_vcpu_runnable(struct kvm_vcpu *vcpu);\n",
-  " int kvm_arch_vcpu_should_kick(struct kvm_vcpu *vcpu);\n",
-  " \n",
-  "-void *kvm_kvzalloc(unsigned long size);\n",
-  "-\n",
-  " #ifndef __KVM_HAVE_ARCH_VM_ALLOC\n",
-  " static inline struct kvm *kvm_arch_alloc_vm(void)\n",
-  " {\n",
-  "diff --git a/include/linux/mm.h b/include/linux/mm.h\n",
-  "index a6b9ab0945c4..0d9fdc0a2a7b 100644\n",
-  "--- a/include/linux/mm.h\n",
-  "+++ b/include/linux/mm.h\n",
-  "\@\@ -498,6 +498,20 \@\@ static inline int is_vmalloc_or_module_addr(const void *x)\n",
-  " }\n",
-  " #endif\n",
-  " \n",
-  "+extern void *kvmalloc_node(size_t size, gfp_t flags, int node);\n",
-  "+static inline void *kvmalloc(size_t size, gfp_t flags)\n",
-  "+{\n",
-  "+\treturn kvmalloc_node(size, flags, NUMA_NO_NODE);\n",
-  "+}\n",
-  "+static inline void *kvzalloc_node(size_t size, gfp_t flags, int node)\n",
-  "+{\n",
-  "+\treturn kvmalloc_node(size, flags | __GFP_ZERO, node);\n",
-  "+}\n",
-  "+static inline void *kvzalloc(size_t size, gfp_t flags)\n",
-  "+{\n",
-  "+\treturn kvmalloc(size, flags | __GFP_ZERO);\n",
-  "+}\n",
-  "+\n",
-  " extern void kvfree(const void *addr);\n",
-  " \n",
-  " static inline atomic_t *compound_mapcount_ptr(struct page *page)\n",
-  "diff --git a/include/linux/vmalloc.h b/include/linux/vmalloc.h\n",
-  "index d68edffbf142..46991ad3ddd5 100644\n",
-  "--- a/include/linux/vmalloc.h\n",
-  "+++ b/include/linux/vmalloc.h\n",
-  "\@\@ -80,6 +80,7 \@\@ extern void *__vmalloc_node_range(unsigned long size, unsigned long align,\n",
-  " \t\t\tunsigned long start, unsigned long end, gfp_t gfp_mask,\n",
-  " \t\t\tpgprot_t prot, unsigned long vm_flags, int node,\n",
-  " \t\t\tconst void *caller);\n",
-  "+extern void *__vmalloc_node_flags(unsigned long size, int node, gfp_t flags);\n",
-  " \n",
-  " extern void vfree(const void *addr);\n",
-  " extern void vfree_atomic(const void *addr);\n",
-  "diff --git a/ipc/util.c b/ipc/util.c\n",
-  "index 798cad18dd87..74c2adc62086 100644\n",
-  "--- a/ipc/util.c\n",
-  "+++ b/ipc/util.c\n",
-  "\@\@ -403,12 +403,7 \@\@ void ipc_rmid(struct ipc_ids *ids, struct kern_ipc_perm *ipcp)\n",
-  "  */\n",
-  " void *ipc_alloc(int size)\n",
-  " {\n",
-  "-\tvoid *out;\n",
-  "-\tif (size > PAGE_SIZE)\n",
-  "-\t\tout = vmalloc(size);\n",
-  "-\telse\n",
-  "-\t\tout = kmalloc(size, GFP_KERNEL);\n",
-  "-\treturn out;\n",
-  "+\treturn kvmalloc(size, GFP_KERNEL);\n",
-  " }\n",
-  " \n",
-  " /**\n",
-  "diff --git a/kernel/bpf/syscall.c b/kernel/bpf/syscall.c\n",
-  "index 19b6129eab23..8697f43cf93c 100644\n",
-  "--- a/kernel/bpf/syscall.c\n",
-  "+++ b/kernel/bpf/syscall.c\n",
-  "\@\@ -53,21 +53,7 \@\@ void bpf_register_map_type(struct bpf_map_type_list *tl)\n",
-  " \n",
-  " void *bpf_map_area_alloc(size_t size)\n",
-  " {\n",
-  "-\t/* We definitely need __GFP_NORETRY, so OOM killer doesn't\n",
-  "-\t * trigger under memory pressure as we really just want to\n",
-  "-\t * fail instead.\n",
-  "-\t */\n",
-  "-\tconst gfp_t flags = __GFP_NOWARN | __GFP_NORETRY | __GFP_ZERO;\n",
-  "-\tvoid *area;\n",
-  "-\n",
-  "-\tif (size <= (PAGE_SIZE << PAGE_ALLOC_COSTLY_ORDER)) {\n",
-  "-\t\tarea = kmalloc(size, GFP_USER | flags);\n",
-  "-\t\tif (area != NULL)\n",
-  "-\t\t\treturn area;\n",
-  "-\t}\n",
-  "-\n",
-  "-\treturn __vmalloc(size, GFP_KERNEL | __GFP_HIGHMEM | flags,\n",
-  "-\t\t\t PAGE_KERNEL);\n",
-  "+\treturn kvzalloc(size, GFP_USER);\n",
-  " }\n",
-  " \n",
-  " void bpf_map_area_free(void *area)\n",
-  "diff --git a/mm/nommu.c b/mm/nommu.c\n",
-  "index 215c62296028..bee76e6cd4e5 100644\n",
-  "--- a/mm/nommu.c\n",
-  "+++ b/mm/nommu.c\n",
-  "\@\@ -236,6 +236,11 \@\@ void *__vmalloc(unsigned long size, gfp_t gfp_mask, pgprot_t prot)\n",
-  " }\n",
-  " EXPORT_SYMBOL(__vmalloc);\n",
-  " \n",
-  "+void *__vmalloc_node_flags(unsigned long size, int node, gfp_t flags)\n",
-  "+{\n",
-  "+\treturn __vmalloc(size, flags, PAGE_KERNEL);\n",
-  "+}\n",
-  "+\n",
-  " void *vmalloc_user(unsigned long size)\n",
-  " {\n",
-  " \tvoid *ret;\n",
-  "diff --git a/mm/util.c b/mm/util.c\n",
-  "index 3cb2164f4099..ef72e2554edb 100644\n",
-  "--- a/mm/util.c\n",
-  "+++ b/mm/util.c\n",
-  "\@\@ -324,6 +324,51 \@\@ unsigned long vm_mmap(struct file *file, unsigned long addr,\n",
-  " }\n",
-  " EXPORT_SYMBOL(vm_mmap);\n",
-  " \n",
-  "+/**\n",
-  "+ * kvmalloc_node - attempt to allocate physically contiguous memory, but upon\n",
-  "+ * failure, fall back to non-contiguous (vmalloc) allocation.\n",
-  "+ * \@size: size of the request.\n",
-  "+ * \@flags: gfp mask for the allocation - must be compatible (superset) with GFP_KERNEL.\n",
-  "+ * \@node: numa node to allocate from\n",
-  "+ *\n",
-  "+ * Uses kmalloc to get the memory but if the allocation fails then falls back\n",
-  "+ * to the vmalloc allocator. Use kvfree for freeing the memory.\n",
-  "+ *\n",
-  "+ * Reclaim modifiers - __GFP_NORETRY, __GFP_REPEAT and __GFP_NOFAIL are not supported\n",
-  "+ *\n",
-  "+ * Any use of gfp flags outside of GFP_KERNEL should be consulted with mm people.\n",
-  "+ */\n",
-  "+void *kvmalloc_node(size_t size, gfp_t flags, int node)\n",
-  "+{\n",
-  "+\tgfp_t kmalloc_flags = flags;\n",
-  "+\tvoid *ret;\n",
-  "+\n",
-  "+\t/*\n",
-  "+\t * vmalloc uses GFP_KERNEL for some internal allocations (e.g page tables)\n",
-  "+\t * so the given set of flags has to be compatible.\n",
-  "+\t */\n",
-  "+\tWARN_ON_ONCE((flags & GFP_KERNEL) != GFP_KERNEL);\n",
-  "+\n",
-  "+\t/*\n",
-  "+\t * Make sure that larger requests are not too disruptive - no OOM\n",
-  "+\t * killer and no allocation failure warnings as we have a fallback\n",
-  "+\t */\n",
-  "+\tif (size > PAGE_SIZE)\n",
-  "+\t\tkmalloc_flags |= __GFP_NORETRY | __GFP_NOWARN;\n",
-  "+\n",
-  "+\tret = kmalloc_node(size, kmalloc_flags, node);\n",
-  "+\n",
-  "+\t/*\n",
-  "+\t * It doesn't really make sense to fallback to vmalloc for sub page\n",
-  "+\t * requests\n",
-  "+\t */\n",
-  "+\tif (ret || size <= PAGE_SIZE)\n",
-  "+\t\treturn ret;\n",
-  "+\n",
-  "+\treturn __vmalloc_node_flags(size, node, flags | __GFP_HIGHMEM);\n",
-  "+}\n",
-  "+EXPORT_SYMBOL(kvmalloc_node);\n",
-  "+\n",
-  " void kvfree(const void *addr)\n",
-  " {\n",
-  " \tif (is_vmalloc_addr(addr))\n",
-  "diff --git a/mm/vmalloc.c b/mm/vmalloc.c\n",
-  "index d89034a393f2..6c1aa2c68887 100644\n",
-  "--- a/mm/vmalloc.c\n",
-  "+++ b/mm/vmalloc.c\n",
-  "\@\@ -1741,6 +1741,13 \@\@ void *__vmalloc_node_range(unsigned long size, unsigned long align,\n",
-  "  *\tAllocate enough pages to cover \@size from the page level\n",
-  "  *\tallocator with \@gfp_mask flags.  Map them into contiguous\n",
-  "  *\tkernel virtual space, using a pagetable protection of \@prot.\n",
-  "+ *\n",
-  "+ *\tReclaim modifiers in \@gfp_mask - __GFP_NORETRY, __GFP_REPEAT\n",
-  "+ *\tand __GFP_NOFAIL are not supported\n",
-  "+ *\n",
-  "+ *\tAny use of gfp flags outside of GFP_KERNEL should be consulted\n",
-  "+ *\twith mm people.\n",
-  "+ *\n",
-  "  */\n",
-  " static void *__vmalloc_node(unsigned long size, unsigned long align,\n",
-  " \t\t\t    gfp_t gfp_mask, pgprot_t prot,\n",
-  "\@\@ -1757,7 +1764,7 \@\@ void *__vmalloc(unsigned long size, gfp_t gfp_mask, pgprot_t prot)\n",
-  " }\n",
-  " EXPORT_SYMBOL(__vmalloc);\n",
-  " \n",
-  "-static inline void *__vmalloc_node_flags(unsigned long size,\n",
-  "+void *__vmalloc_node_flags(unsigned long size,\n",
-  " \t\t\t\t\tint node, gfp_t flags)\n",
-  " {\n",
-  " \treturn __vmalloc_node(size, 1, flags, PAGE_KERNEL,\n",
-  "diff --git a/security/apparmor/apparmorfs.c b/security/apparmor/apparmorfs.c\n",
-  "index 41073f70eb41..be0b49897a67 100644\n",
-  "--- a/security/apparmor/apparmorfs.c\n",
-  "+++ b/security/apparmor/apparmorfs.c\n",
-  "\@\@ -98,7 +98,7 \@\@ static struct aa_loaddata *aa_simple_write_to_buffer(const char __user *userbuf,\n",
-  " \t\treturn ERR_PTR(-ESPIPE);\n",
-  " \n",
-  " \t/* freed by caller to simple_write_to_buffer */\n",
-  "-\tdata = kvmalloc(sizeof(*data) + alloc_size);\n",
-  "+\tdata = kvmalloc(sizeof(*data) + alloc_size, GFP_KERNEL);\n",
-  " \tif (data == NULL)\n",
-  " \t\treturn ERR_PTR(-ENOMEM);\n",
-  " \tkref_init(&data->count);\n",
-  "diff --git a/security/apparmor/include/lib.h b/security/apparmor/include/lib.h\n",
-  "index 65ff492a9807..75733baa6702 100644\n",
-  "--- a/security/apparmor/include/lib.h\n",
-  "+++ b/security/apparmor/include/lib.h\n",
-  "\@\@ -64,17 +64,6 \@\@ char *aa_split_fqname(char *args, char **ns_name);\n",
-  " const char *aa_splitn_fqname(const char *fqname, size_t n, const char **ns_name,\n",
-  " \t\t\t     size_t *ns_len);\n",
-  " void aa_info_message(const char *str);\n",
-  "-void *__aa_kvmalloc(size_t size, gfp_t flags);\n",
-  "-\n",
-  "-static inline void *kvmalloc(size_t size)\n",
-  "-{\n",
-  "-\treturn __aa_kvmalloc(size, 0);\n",
-  "-}\n",
-  "-\n",
-  "-static inline void *kvzalloc(size_t size)\n",
-  "-{\n",
-  "-\treturn __aa_kvmalloc(size, __GFP_ZERO);\n",
-  "-}\n",
-  " \n",
-  " /**\n",
-  "  * aa_strneq - compare null terminated \@str to a non null terminated substring\n",
-  "diff --git a/security/apparmor/lib.c b/security/apparmor/lib.c\n",
-  "index 66475bda6f72..1a13494bc7c7 100644\n",
-  "--- a/security/apparmor/lib.c\n",
-  "+++ b/security/apparmor/lib.c\n",
-  "\@\@ -129,36 +129,6 \@\@ void aa_info_message(const char *str)\n",
-  " }\n",
-  " \n",
-  " /**\n",
-  "- * __aa_kvmalloc - do allocation preferring kmalloc but falling back to vmalloc\n",
-  "- * \@size: how many bytes of memory are required\n",
-  "- * \@flags: the type of memory to allocate (see kmalloc).\n",
-  "- *\n",
-  "- * Return: allocated buffer or NULL if failed\n",
-  "- *\n",
-  "- * It is possible that policy being loaded from the user is larger than\n",
-  "- * what can be allocated by kmalloc, in those cases fall back to vmalloc.\n",
-  "- */\n",
-  "-void *__aa_kvmalloc(size_t size, gfp_t flags)\n",
-  "-{\n",
-  "-\tvoid *buffer = NULL;\n",
-  "-\n",
-  "-\tif (size == 0)\n",
-  "-\t\treturn NULL;\n",
-  "-\n",
-  "-\t/* do not attempt kmalloc if we need more than 16 pages at once */\n",
-  "-\tif (size <= (16*PAGE_SIZE))\n",
-  "-\t\tbuffer = kmalloc(size, flags | GFP_KERNEL | __GFP_NORETRY |\n",
-  "-\t\t\t\t __GFP_NOWARN);\n",
-  "-\tif (!buffer) {\n",
-  "-\t\tif (flags & __GFP_ZERO)\n",
-  "-\t\t\tbuffer = vzalloc(size);\n",
-  "-\t\telse\n",
-  "-\t\t\tbuffer = vmalloc(size);\n",
-  "-\t}\n",
-  "-\treturn buffer;\n",
-  "-}\n",
-  "-\n",
-  "-/**\n",
-  "  * aa_policy_init - initialize a policy structure\n",
-  "  * \@policy: policy to initialize  (NOT NULL)\n",
-  "  * \@prefix: prefix name if any is required.  (MAYBE NULL)\n",
-  "diff --git a/security/apparmor/match.c b/security/apparmor/match.c\n",
-  "index eb0efef746f5..960c913381e2 100644\n",
-  "--- a/security/apparmor/match.c\n",
-  "+++ b/security/apparmor/match.c\n",
-  "\@\@ -88,7 +88,7 \@\@ static struct table_header *unpack_table(char *blob, size_t bsize)\n",
-  " \tif (bsize < tsize)\n",
-  " \t\tgoto out;\n",
-  " \n",
-  "-\ttable = kvzalloc(tsize);\n",
-  "+\ttable = kvzalloc(tsize, GFP_KERNEL);\n",
-  " \tif (table) {\n",
-  " \t\ttable->td_id = th.td_id;\n",
-  " \t\ttable->td_flags = th.td_flags;\n",
-  "diff --git a/security/apparmor/policy_unpack.c b/security/apparmor/policy_unpack.c\n",
-  "index 2e37c9c26bbd..f3422a91353c 100644\n",
-  "--- a/security/apparmor/policy_unpack.c\n",
-  "+++ b/security/apparmor/policy_unpack.c\n",
-  "\@\@ -487,7 +487,7 \@\@ static bool unpack_rlimits(struct aa_ext *e, struct aa_profile *profile)\n",
-  " \n",
-  " static void *kvmemdup(const void *src, size_t len)\n",
-  " {\n",
-  "-\tvoid *p = kvmalloc(len);\n",
-  "+\tvoid *p = kvmalloc(len, GFP_KERNEL);\n",
-  " \n",
-  " \tif (p)\n",
-  " \t\tmemcpy(p, src, len);\n",
-  "diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c\n",
-  "index dcd1c12940e6..795c8269ef63 100644\n",
-  "--- a/virt/kvm/kvm_main.c\n",
-  "+++ b/virt/kvm/kvm_main.c\n",
-  "\@\@ -502,7 +502,7 \@\@ static struct kvm_memslots *kvm_alloc_memslots(void)\n",
-  " \tint i;\n",
-  " \tstruct kvm_memslots *slots;\n",
-  " \n",
-  "-\tslots = kvm_kvzalloc(sizeof(struct kvm_memslots));\n",
-  "+\tslots = kvzalloc(sizeof(struct kvm_memslots), GFP_KERNEL);\n",
-  " \tif (!slots)\n",
-  " \t\treturn NULL;\n",
-  " \n",
-  "\@\@ -685,18 +685,6 \@\@ static struct kvm *kvm_create_vm(unsigned long type)\n",
-  " \treturn ERR_PTR(r);\n",
-  " }\n",
-  " \n",
-  "-/*\n",
-  "- * Avoid using vmalloc for a small buffer.\n",
-  "- * Should not be used when the size is statically known.\n",
-  "- */\n",
-  "-void *kvm_kvzalloc(unsigned long size)\n",
-  "-{\n",
-  "-\tif (size > PAGE_SIZE)\n",
-  "-\t\treturn vzalloc(size);\n",
-  "-\telse\n",
-  "-\t\treturn kzalloc(size, GFP_KERNEL);\n",
-  "-}\n",
-  "-\n",
-  " static void kvm_destroy_devices(struct kvm *kvm)\n",
-  " {\n",
-  " \tstruct kvm_device *dev, *tmp;\n",
-  "\@\@ -775,7 +763,7 \@\@ static int kvm_create_dirty_bitmap(struct kvm_memory_slot *memslot)\n",
-  " {\n",
-  " \tunsigned long dirty_bytes = 2 * kvm_dirty_bitmap_bytes(memslot);\n",
-  " \n",
-  "-\tmemslot->dirty_bitmap = kvm_kvzalloc(dirty_bytes);\n",
-  "+\tmemslot->dirty_bitmap = kvzalloc(dirty_bytes, GFP_KERNEL);\n",
-  " \tif (!memslot->dirty_bitmap)\n",
-  " \t\treturn -ENOMEM;\n",
-  " \n",
-  "\@\@ -995,7 +983,7 \@\@ int __kvm_set_memory_region(struct kvm *kvm,\n",
-  " \t\t\tgoto out_free;\n",
-  " \t}\n",
-  " \n",
-  "-\tslots = kvm_kvzalloc(sizeof(struct kvm_memslots));\n",
-  "+\tslots = kvzalloc(sizeof(struct kvm_memslots), GFP_KERNEL);\n",
-  " \tif (!slots)\n",
-  " \t\tgoto out_free;\n",
-  " \tmemcpy(slots, __kvm_memslots(kvm, as_id), sizeof(struct kvm_memslots));\n",
-  "-- \n",
-  "2.11.0\n",
-  "\n",
-  "-- \n",
-  "Michal Hocko\n",
-  "SUSE Labs"
+  "following?"
 ]
 
-78ca90f0cbeb00daac69bc661c4943693aa53931da2e298d1246bb50d8c70c65
+6ed49155c85aeed381abec7349f051d0518406c66ed24f44e170ef7b95ed8d68

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.