mm-commits.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Andrew Morton <akpm@linux-foundation.org>
To: akpm@linux-foundation.org, chris@chrisdown.name,
	hannes@cmpxchg.org, hughd@google.com, kuba@kernel.org,
	linux-mm@kvack.org, mhocko@kernel.org,
	mm-commits@vger.kernel.org, shakeelb@google.com, tj@kernel.org,
	torvalds@linux-foundation.org
Subject: [patch 082/128] mm/memcg: automatically penalize tasks with high swap use
Date: Tue, 02 Jun 2020 13:14:42 -0700	[thread overview]
Message-ID: <20200602201442.v3gM6DBb1%akpm@linux-foundation.org> (raw)
In-Reply-To: <20200602130930.8e8f10fa6f19e3766e70921f@linux-foundation.org>

From: Jakub Kicinski <kuba@kernel.org>
Subject: mm/memcg: automatically penalize tasks with high swap use

Add a memory.swap.high knob, which can be used to protect the system from
SWAP exhaustion.  The mechanism used for penalizing is similar to
memory.high penalty (sleep on return to user space).

That is not to say that the knob itself is equivalent to memory.high.  The
objective is more to protect the system from potentially buggy tasks
consuming a lot of swap and impacting other tasks, or even bringing the
whole system to stand still with complete SWAP exhaustion.  Hopefully
without the need to find per-task hard limits.

Slowing misbehaving tasks down gradually allows user space oom killers or
other protection mechanisms to react.  oomd and earlyoom already do
killing based on swap exhaustion, and memory.swap.high protection will
help implement such userspace oom policies more reliably.

We can use one counter for number of pages allocated under pressure to
save struct task space and avoid two separate hierarchy walks on the hot
path.  The exact overage is calculated on return to user space, anyway.

Take the new high limit into account when determining if swap is "full". 
Borrowing the explanation from Johannes:

  The idea behind "swap full" is that as long as the workload has plenty
  of swap space available and it's not changing its memory contents, it
  makes sense to generously hold on to copies of data in the swap device,
  even after the swapin.  A later reclaim cycle can drop the page without
  any IO.  Trading disk space for IO.

  But the only two ways to reclaim a swap slot is when they're faulted
  in and the references go away, or by scanning the virtual address space
  like swapoff does - which is very expensive (one could argue it's too
  expensive even for swapoff, it's often more practical to just reboot).

  So at some point in the fill level, we have to start freeing up swap
  slots on fault/swapin.  Otherwise we could eventually run out of swap
  slots while they're filled with copies of data that is also in RAM.

  We don't want to OOM a workload because its available swap space is
  filled with redundant cache.

Link: http://lkml.kernel.org/r/20200527195846.102707-5-kuba@kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Acked-by: Johannes Weiner <hannes@cmpxchg.org>
Cc: Tejun Heo <tj@kernel.org>
Cc: Chris Down <chris@chrisdown.name>
Cc: Shakeel Butt <shakeelb@google.com>
Cc: Michal Hocko <mhocko@kernel.org>
Cc: Hugh Dickins <hughd@google.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
---

 Documentation/admin-guide/cgroup-v2.rst |   20 +++++
 include/linux/memcontrol.h              |    1 
 mm/memcontrol.c                         |   88 ++++++++++++++++++++--
 3 files changed, 102 insertions(+), 7 deletions(-)

--- a/Documentation/admin-guide/cgroup-v2.rst~mm-automatically-penalize-tasks-with-high-swap-use
+++ a/Documentation/admin-guide/cgroup-v2.rst
@@ -1374,6 +1374,22 @@ PAGE_SIZE multiple when read back.
 	The total amount of swap currently being used by the cgroup
 	and its descendants.
 
+  memory.swap.high
+	A read-write single value file which exists on non-root
+	cgroups.  The default is "max".
+
+	Swap usage throttle limit.  If a cgroup's swap usage exceeds
+	this limit, all its further allocations will be throttled to
+	allow userspace to implement custom out-of-memory procedures.
+
+	This limit marks a point of no return for the cgroup. It is NOT
+	designed to manage the amount of swapping a workload does
+	during regular operation. Compare to memory.swap.max, which
+	prohibits swapping past a set amount, but lets the cgroup
+	continue unimpeded as long as other memory can be reclaimed.
+
+	Healthy workloads are not expected to reach this limit.
+
   memory.swap.max
 	A read-write single value file which exists on non-root
 	cgroups.  The default is "max".
@@ -1387,6 +1403,10 @@ PAGE_SIZE multiple when read back.
 	otherwise, a value change in this file generates a file
 	modified event.
 
+	  high
+		The number of times the cgroup's swap usage was over
+		the high threshold.
+
 	  max
 		The number of times the cgroup's swap usage was about
 		to go over the max boundary and swap allocation
--- a/include/linux/memcontrol.h~mm-automatically-penalize-tasks-with-high-swap-use
+++ a/include/linux/memcontrol.h
@@ -45,6 +45,7 @@ enum memcg_memory_event {
 	MEMCG_MAX,
 	MEMCG_OOM,
 	MEMCG_OOM_KILL,
+	MEMCG_SWAP_HIGH,
 	MEMCG_SWAP_MAX,
 	MEMCG_SWAP_FAIL,
 	MEMCG_NR_MEMORY_EVENTS,
--- a/mm/memcontrol.c~mm-automatically-penalize-tasks-with-high-swap-use
+++ a/mm/memcontrol.c
@@ -2354,6 +2354,22 @@ static u64 mem_find_max_overage(struct m
 	return max_overage;
 }
 
+static u64 swap_find_max_overage(struct mem_cgroup *memcg)
+{
+	u64 overage, max_overage = 0;
+
+	do {
+		overage = calculate_overage(page_counter_read(&memcg->swap),
+					    READ_ONCE(memcg->swap.high));
+		if (overage)
+			memcg_memory_event(memcg, MEMCG_SWAP_HIGH);
+		max_overage = max(overage, max_overage);
+	} while ((memcg = parent_mem_cgroup(memcg)) &&
+		 !mem_cgroup_is_root(memcg));
+
+	return max_overage;
+}
+
 /*
  * Get the number of jiffies that we should penalise a mischievous cgroup which
  * is exceeding its memory.high by checking both it and its ancestors.
@@ -2415,6 +2431,9 @@ void mem_cgroup_handle_over_high(void)
 	penalty_jiffies = calculate_high_delay(memcg, nr_pages,
 					       mem_find_max_overage(memcg));
 
+	penalty_jiffies += calculate_high_delay(memcg, nr_pages,
+						swap_find_max_overage(memcg));
+
 	/*
 	 * Clamp the max delay per usermode return so as to still keep the
 	 * application moving forwards and also permit diagnostics, albeit
@@ -2605,13 +2624,32 @@ done_restock:
 	 * reclaim, the cost of mismatch is negligible.
 	 */
 	do {
-		if (page_counter_read(&memcg->memory) >
-		    READ_ONCE(memcg->memory.high)) {
-			/* Don't bother a random interrupted task */
-			if (in_interrupt()) {
+		bool mem_high, swap_high;
+
+		mem_high = page_counter_read(&memcg->memory) >
+			READ_ONCE(memcg->memory.high);
+		swap_high = page_counter_read(&memcg->swap) >
+			READ_ONCE(memcg->swap.high);
+
+		/* Don't bother a random interrupted task */
+		if (in_interrupt()) {
+			if (mem_high) {
 				schedule_work(&memcg->high_work);
 				break;
 			}
+			continue;
+		}
+
+		if (mem_high || swap_high) {
+			/*
+			 * The allocating tasks in this cgroup will need to do
+			 * reclaim or be throttled to prevent further growth
+			 * of the memory or swap footprints.
+			 *
+			 * Target some best-effort fairness between the tasks,
+			 * and distribute reclaim work and delay penalties
+			 * based on how much each task is actually allocating.
+			 */
 			current->memcg_nr_pages_over_high += batch;
 			set_notify_resume(current);
 			break;
@@ -5076,6 +5114,7 @@ mem_cgroup_css_alloc(struct cgroup_subsy
 
 	page_counter_set_high(&memcg->memory, PAGE_COUNTER_MAX);
 	memcg->soft_limit = PAGE_COUNTER_MAX;
+	page_counter_set_high(&memcg->swap, PAGE_COUNTER_MAX);
 	if (parent) {
 		memcg->swappiness = mem_cgroup_swappiness(parent);
 		memcg->oom_kill_disable = parent->oom_kill_disable;
@@ -5229,6 +5268,7 @@ static void mem_cgroup_css_reset(struct
 	page_counter_set_low(&memcg->memory, 0);
 	page_counter_set_high(&memcg->memory, PAGE_COUNTER_MAX);
 	memcg->soft_limit = PAGE_COUNTER_MAX;
+	page_counter_set_high(&memcg->swap, PAGE_COUNTER_MAX);
 	memcg_wb_domain_size_changed(memcg);
 }
 
@@ -7142,10 +7182,13 @@ bool mem_cgroup_swap_full(struct page *p
 	if (!memcg)
 		return false;
 
-	for (; memcg != root_mem_cgroup; memcg = parent_mem_cgroup(memcg))
-		if (page_counter_read(&memcg->swap) * 2 >=
-		    READ_ONCE(memcg->swap.max))
+	for (; memcg != root_mem_cgroup; memcg = parent_mem_cgroup(memcg)) {
+		unsigned long usage = page_counter_read(&memcg->swap);
+
+		if (usage * 2 >= READ_ONCE(memcg->swap.high) ||
+		    usage * 2 >= READ_ONCE(memcg->swap.max))
 			return true;
+	}
 
 	return false;
 }
@@ -7175,6 +7218,29 @@ static u64 swap_current_read(struct cgro
 	return (u64)page_counter_read(&memcg->swap) * PAGE_SIZE;
 }
 
+static int swap_high_show(struct seq_file *m, void *v)
+{
+	return seq_puts_memcg_tunable(m,
+		READ_ONCE(mem_cgroup_from_seq(m)->swap.high));
+}
+
+static ssize_t swap_high_write(struct kernfs_open_file *of,
+			       char *buf, size_t nbytes, loff_t off)
+{
+	struct mem_cgroup *memcg = mem_cgroup_from_css(of_css(of));
+	unsigned long high;
+	int err;
+
+	buf = strstrip(buf);
+	err = page_counter_memparse(buf, "max", &high);
+	if (err)
+		return err;
+
+	page_counter_set_high(&memcg->swap, high);
+
+	return nbytes;
+}
+
 static int swap_max_show(struct seq_file *m, void *v)
 {
 	return seq_puts_memcg_tunable(m,
@@ -7202,6 +7268,8 @@ static int swap_events_show(struct seq_f
 {
 	struct mem_cgroup *memcg = mem_cgroup_from_seq(m);
 
+	seq_printf(m, "high %lu\n",
+		   atomic_long_read(&memcg->memory_events[MEMCG_SWAP_HIGH]));
 	seq_printf(m, "max %lu\n",
 		   atomic_long_read(&memcg->memory_events[MEMCG_SWAP_MAX]));
 	seq_printf(m, "fail %lu\n",
@@ -7217,6 +7285,12 @@ static struct cftype swap_files[] = {
 		.read_u64 = swap_current_read,
 	},
 	{
+		.name = "swap.high",
+		.flags = CFTYPE_NOT_ON_ROOT,
+		.seq_show = swap_high_show,
+		.write = swap_high_write,
+	},
+	{
 		.name = "swap.max",
 		.flags = CFTYPE_NOT_ON_ROOT,
 		.seq_show = swap_max_show,
_

  parent reply	other threads:[~2020-06-02 20:14 UTC|newest]

Thread overview: 166+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-06-02 20:09 incoming Andrew Morton
2020-06-02 20:09 ` [patch 001/128] squashfs: migrate from ll_rw_block usage to BIO Andrew Morton
2020-06-02 20:09 ` [patch 002/128] ocfs2: add missing annotation for dlm_empty_lockres() Andrew Morton
2020-06-02 20:10 ` [patch 003/128] ocfs2: mount shared volume without ha stack Andrew Morton
2020-06-02 20:10 ` [patch 004/128] arch/parisc/include/asm/pgtable.h: remove unused `old_pte' Andrew Morton
2020-06-02 20:10 ` [patch 005/128] vfs: track per-sb writeback errors and report them to syncfs Andrew Morton
2020-06-02 20:10 ` [patch 006/128] fs/buffer.c: record blockdev write errors in super_block that it backs Andrew Morton
2020-06-02 20:10 ` [patch 007/128] usercopy: mark dma-kmalloc caches as usercopy caches Andrew Morton
2020-06-02 20:10 ` [patch 008/128] mm/slub.c: fix corrupted freechain in deactivate_slab() Andrew Morton
2020-06-02 20:10 ` [patch 009/128] slub: Remove userspace notifier for cache add/remove Andrew Morton
2020-06-02 20:10 ` [patch 010/128] slub: remove kmalloc under list_lock from list_slab_objects() V2 Andrew Morton
2020-06-02 20:10 ` [patch 011/128] mm/slub: fix stack overruns with SLUB_STATS Andrew Morton
2020-06-02 20:10 ` [patch 012/128] Documentation/vm/slub.rst: s/Toggle/Enable/ Andrew Morton
2020-06-02 20:10 ` [patch 013/128] mm, dump_page(): do not crash with invalid mapping pointer Andrew Morton
2020-06-02 20:10 ` [patch 014/128] mm: move readahead prototypes from mm.h Andrew Morton
2020-06-02 20:10 ` [patch 015/128] mm: return void from various readahead functions Andrew Morton
2020-06-02 20:10 ` [patch 016/128] mm: ignore return value of ->readpages Andrew Morton
2020-06-02 20:10 ` [patch 017/128] mm: move readahead nr_pages check into read_pages Andrew Morton
2020-06-02 20:10 ` [patch 018/128] mm: add new readahead_control API Andrew Morton
2020-06-02 20:11 ` [patch 019/128] mm: use readahead_control to pass arguments Andrew Morton
2020-06-02 20:11 ` [patch 020/128] mm: rename various 'offset' parameters to 'index' Andrew Morton
2020-06-02 20:11 ` [patch 021/128] mm: rename readahead loop variable to 'i' Andrew Morton
2020-06-02 20:11 ` [patch 022/128] mm: remove 'page_offset' from readahead loop Andrew Morton
2020-06-02 20:11 ` [patch 023/128] mm: put readahead pages in cache earlier Andrew Morton
2020-06-02 20:11 ` [patch 024/128] mm: add readahead address space operation Andrew Morton
2020-06-02 20:11 ` [patch 025/128] mm: move end_index check out of readahead loop Andrew Morton
2020-06-02 20:11 ` [patch 026/128] mm: add page_cache_readahead_unbounded Andrew Morton
2020-06-02 20:11 ` [patch 027/128] mm: document why we don't set PageReadahead Andrew Morton
2020-06-02 20:11 ` [patch 028/128] mm: use memalloc_nofs_save in readahead path Andrew Morton
2020-06-02 20:11 ` [patch 029/128] fs: convert mpage_readpages to mpage_readahead Andrew Morton
2020-06-02 20:11 ` [patch 030/128] btrfs: convert from readpages to readahead Andrew Morton
2020-06-02 20:11 ` [patch 031/128] erofs: convert uncompressed files " Andrew Morton
2020-06-02 20:11 ` [patch 032/128] erofs: convert compressed " Andrew Morton
2020-06-02 20:11 ` [patch 033/128] ext4: convert " Andrew Morton
2020-06-02 20:11 ` [patch 034/128] ext4: pass the inode to ext4_mpage_readpages Andrew Morton
2020-06-02 20:12 ` [patch 035/128] f2fs: convert from readpages to readahead Andrew Morton
2020-06-02 20:12 ` [patch 036/128] f2fs: pass the inode to f2fs_mpage_readpages Andrew Morton
2020-06-02 20:12 ` [patch 037/128] fuse: convert from readpages to readahead Andrew Morton
2020-06-02 20:12 ` [patch 038/128] iomap: " Andrew Morton
2020-06-02 20:12 ` [patch 039/128] include/linux/pagemap.h: introduce attach/detach_page_private Andrew Morton
2020-06-02 20:12 ` [patch 040/128] md: remove __clear_page_buffers and use attach/detach_page_private Andrew Morton
2020-06-02 20:12 ` [patch 041/128] btrfs: " Andrew Morton
2020-06-02 20:12 ` [patch 042/128] fs/buffer.c: " Andrew Morton
2020-06-02 20:12 ` [patch 043/128] f2fs: " Andrew Morton
2020-06-02 20:12 ` [patch 044/128] iomap: " Andrew Morton
2020-06-02 20:12 ` [patch 045/128] ntfs: replace attach_page_buffers with attach_page_private Andrew Morton
2020-06-02 20:12 ` [patch 046/128] orangefs: use attach/detach_page_private Andrew Morton
2020-06-02 20:12 ` [patch 047/128] buffer_head.h: remove attach_page_buffers Andrew Morton
2020-06-02 20:12 ` [patch 048/128] mm/migrate.c: call detach_page_private to cleanup code Andrew Morton
2020-06-02 20:12 ` [patch 049/128] mm_types.h: change set_page_private to inline function Andrew Morton
2020-06-02 20:12 ` [patch 050/128] mm/filemap.c: remove misleading comment Andrew Morton
2020-06-02 20:12 ` [patch 051/128] mm/page-writeback.c: remove unused variable Andrew Morton
2020-06-02 20:13 ` [patch 052/128] mm/writeback: replace PF_LESS_THROTTLE with PF_LOCAL_THROTTLE Andrew Morton
2020-06-02 20:13 ` [patch 053/128] mm/writeback: discard NR_UNSTABLE_NFS, use NR_WRITEBACK instead Andrew Morton
2020-06-02 20:13 ` [patch 054/128] mm/gup.c: update the documentation Andrew Morton
2020-06-02 20:13 ` [patch 055/128] mm/gup: introduce pin_user_pages_unlocked Andrew Morton
2020-06-02 20:13 ` [patch 056/128] ivtv: convert get_user_pages() --> pin_user_pages() Andrew Morton
2020-06-02 20:13 ` [patch 057/128] mm/gup.c: further document vma_permits_fault() Andrew Morton
2020-06-02 20:13 ` [patch 058/128] mm/swapfile: use list_{prev,next}_entry() instead of open-coding Andrew Morton
2020-06-02 20:13 ` [patch 059/128] mm/swap_state: fix a data race in swapin_nr_pages Andrew Morton
2020-06-02 20:13 ` [patch 060/128] mm: swap: properly update readahead statistics in unuse_pte_range() Andrew Morton
2020-06-02 20:13 ` [patch 061/128] mm/swapfile.c: offset is only used when there is more slots Andrew Morton
2020-06-02 20:13 ` [patch 062/128] mm/swapfile.c: explicitly show ssd/non-ssd is handled mutually exclusive Andrew Morton
2020-06-02 20:13 ` [patch 063/128] mm/swapfile.c: remove the unnecessary goto for SSD case Andrew Morton
2020-06-02 20:13 ` [patch 064/128] mm/swapfile.c: simplify the calculation of n_goal Andrew Morton
2020-06-02 20:13 ` [patch 065/128] mm/swapfile.c: remove the extra check in scan_swap_map_slots() Andrew Morton
2020-06-02 20:13 ` [patch 066/128] mm/swapfile.c: found_free could be represented by (tmp < max) Andrew Morton
2020-06-02 20:13 ` [patch 067/128] mm/swapfile.c: tmp is always smaller than max Andrew Morton
2020-06-02 20:13 ` [patch 068/128] mm/swapfile.c: omit a duplicate code by compare tmp and max first Andrew Morton
2020-06-02 20:13 ` [patch 069/128] swap: try to scan more free slots even when fragmented Andrew Morton
2020-06-02 20:14 ` [patch 070/128] mm/swapfile.c: classify SWAP_MAP_XXX to make it more readable Andrew Morton
2020-06-02 20:14 ` [patch 071/128] mm/swapfile.c: __swap_entry_free() always free 1 entry Andrew Morton
2020-06-02 20:14 ` [patch 072/128] mm/swapfile.c: use prandom_u32_max() Andrew Morton
2020-06-02 20:14 ` [patch 073/128] swap: reduce lock contention on swap cache from swap slots allocation Andrew Morton
2020-06-02 20:14 ` [patch 074/128] mm: swapfile: fix /proc/swaps heading and Size/Used/Priority alignment Andrew Morton
2020-06-02 20:14 ` [patch 075/128] include/linux/swap.h: delete meaningless __add_to_swap_cache() declaration Andrew Morton
2020-06-02 20:14 ` [patch 076/128] mm, memcg: add workingset_restore in memory.stat Andrew Morton
2020-06-02 20:14 ` [patch 077/128] mm: memcontrol: simplify value comparison between count and limit Andrew Morton
2020-06-02 20:14 ` [patch 078/128] memcg: expose root cgroup's memory.stat Andrew Morton
2020-06-02 20:14 ` [patch 079/128] mm/memcg: prepare for swap over-high accounting and penalty calculation Andrew Morton
2020-06-02 20:14 ` [patch 080/128] mm/memcg: move penalty delay clamping out of calculate_high_delay() Andrew Morton
2020-06-02 20:14 ` [patch 081/128] mm/memcg: move cgroup high memory limit setting into struct page_counter Andrew Morton
2020-06-02 20:14 ` Andrew Morton [this message]
2020-06-02 20:14 ` [patch 083/128] memcg: fix memcg_kmem_bypass() for remote memcg charging Andrew Morton
2020-06-02 20:14 ` [patch 084/128] x86: mm: ptdump: calculate effective permissions correctly Andrew Morton
2020-06-02 20:14 ` [patch 085/128] mm: ptdump: expand type of 'val' in note_page() Andrew Morton
2020-06-02 20:14 ` [patch 086/128] /proc/PID/smaps: Add PMD migration entry parsing Andrew Morton
2020-06-02 20:15 ` [patch 087/128] mm/memory: remove unnecessary pte_devmap case in copy_one_pte() Andrew Morton
2020-06-02 20:15 ` [patch 088/128] mm, memory_failure: don't send BUS_MCEERR_AO for action required error Andrew Morton
2020-06-02 20:15 ` [patch 089/128] x86/hyperv: use vmalloc_exec for the hypercall page Andrew Morton
2020-06-02 20:15 ` [patch 090/128] x86: fix vmap arguments in map_irq_stack Andrew Morton
2020-06-02 20:15 ` [patch 091/128] staging: android: ion: use vmap instead of vm_map_ram Andrew Morton
2020-06-02 20:15 ` [patch 092/128] staging: media: ipu3: use vmap instead of reimplementing it Andrew Morton
2020-06-02 20:15 ` [patch 093/128] dma-mapping: use vmap insted " Andrew Morton
2020-06-02 20:15 ` [patch 094/128] powerpc: add an ioremap_phb helper Andrew Morton
2020-06-02 20:15 ` [patch 095/128] powerpc: remove __ioremap_at and __iounmap_at Andrew Morton
2020-06-02 20:15 ` [patch 096/128] mm: remove __get_vm_area Andrew Morton
2020-06-02 20:15 ` [patch 097/128] mm: unexport unmap_kernel_range_noflush Andrew Morton
2020-06-02 20:15 ` [patch 098/128] mm: rename CONFIG_PGTABLE_MAPPING to CONFIG_ZSMALLOC_PGTABLE_MAPPING Andrew Morton
2020-06-02 20:15 ` [patch 099/128] mm: only allow page table mappings for built-in zsmalloc Andrew Morton
2020-06-02 20:15 ` [patch 100/128] mm: pass addr as unsigned long to vb_free Andrew Morton
2020-06-02 20:16 ` [patch 101/128] mm: remove vmap_page_range_noflush and vunmap_page_range Andrew Morton
2020-06-02 20:16 ` [patch 102/128] mm: rename vmap_page_range to map_kernel_range Andrew Morton
2020-06-02 20:16 ` [patch 103/128] mm: don't return the number of pages from map_kernel_range{,_noflush} Andrew Morton
2020-06-02 20:16 ` [patch 104/128] mm: remove map_vm_range Andrew Morton
2020-06-02 20:16 ` [patch 105/128] mm: remove unmap_vmap_area Andrew Morton
2020-06-02 20:16 ` [patch 106/128] mm: remove the prot argument from vm_map_ram Andrew Morton
2020-06-02 20:16 ` [patch 107/128] mm: enforce that vmap can't map pages executable Andrew Morton
2020-06-02 20:16 ` [patch 108/128] gpu/drm: remove the powerpc hack in drm_legacy_sg_alloc Andrew Morton
2020-06-02 20:16 ` [patch 109/128] mm: remove the pgprot argument to __vmalloc Andrew Morton
2020-06-02 20:16 ` [patch 110/128] mm: remove the prot argument to __vmalloc_node Andrew Morton
2020-06-02 20:16 ` [patch 111/128] mm: remove both instances of __vmalloc_node_flags Andrew Morton
2020-06-02 20:16 ` [patch 112/128] mm: remove __vmalloc_node_flags_caller Andrew Morton
2020-06-02 20:16 ` [patch 113/128] mm: switch the test_vmalloc module to use __vmalloc_node Andrew Morton
2020-06-02 20:16 ` [patch 114/128] mm: remove vmalloc_user_node_flags Andrew Morton
2020-06-02 20:17 ` [patch 115/128] arm64: use __vmalloc_node in arch_alloc_vmap_stack Andrew Morton
2020-06-02 20:17 ` [patch 116/128] powerpc: use __vmalloc_node in alloc_vm_stack Andrew Morton
2020-06-02 20:17 ` [patch 117/128] s390: use __vmalloc_node in stack_alloc Andrew Morton
2020-06-02 20:17 ` [patch 118/128] mm: add functions to track page directory modifications Andrew Morton
2020-06-02 20:17 ` [patch 119/128] mm/vmalloc: track which page-table levels were modified Andrew Morton
2020-06-02 20:17 ` [patch 120/128] mm/ioremap: " Andrew Morton
2020-06-02 20:17 ` [patch 121/128] x86/mm/64: implement arch_sync_kernel_mappings() Andrew Morton
2020-06-02 20:17 ` [patch 122/128] x86/mm/32: " Andrew Morton
2020-06-02 20:17 ` [patch 123/128] mm: remove vmalloc_sync_(un)mappings() Andrew Morton
2020-06-02 20:17 ` [patch 124/128] x86/mm: remove vmalloc faulting Andrew Morton
2020-06-02 20:17 ` [patch 125/128] kasan: fix clang compilation warning due to stack protector Andrew Morton
2020-06-02 20:17 ` [patch 126/128] ubsan: entirely disable alignment checks under UBSAN_TRAP Andrew Morton
2020-06-02 20:17 ` [patch 127/128] mm/mm_init.c: report kasan-tag information stored in page->flags Andrew Morton
2020-06-02 20:17 ` [patch 128/128] kasan: move kasan_report() into report.c Andrew Morton
2020-06-02 21:34 ` + maccess-unexport-probe_kernel_write-and-probe_user_write-fix.patch added to -mm tree Andrew Morton
2020-06-02 22:51 ` [folded-merged] lib-make-a-test-module-with-get_count_order-long-fix.patch removed from " Andrew Morton
2020-06-02 22:52 ` [to-be-updated] lib-make-a-test-module-with-get_count_order-long.patch " Andrew Morton
2020-06-02 22:53 ` + lib-test-get_count_order-long-in-test_bitopsc.patch added to " Andrew Morton
2020-06-03 20:08 ` + mm-page_allocc-add-missing-line-breaks.patch " Andrew Morton
2020-06-03 21:15 ` + mm-fold-and-remove-lru_cache_add_anon-and-lru_cache_add_file-fix.patch " Andrew Morton
2020-06-03 22:06 ` [folded-merged] mm-gup-refactor-and-de-duplicate-gup_fast-code-fix.patch removed from " Andrew Morton
2020-06-03 22:07 ` [folded-merged] kasan-stop-tests-being-eliminated-as-dead-code-with-fortify_source-v4.patch " Andrew Morton
2020-06-03 22:08 ` [folded-merged] mm-memmap_init-iterate-over-memblock-regions-rather-that-check-each-pfn-fix.patch " Andrew Morton
2020-06-03 22:08 ` [folded-merged] mm-memmap_init-iterate-over-memblock-regions-rather-that-check-each-pfn-fix-2.patch " Andrew Morton
2020-06-03 22:09 ` [folded-merged] mm-free_area_init-allow-defining-max_zone_pfn-in-descending-order-fix.patch " Andrew Morton
2020-06-03 22:09 ` [folded-merged] mm-free_area_init-allow-defining-max_zone_pfn-in-descending-order-fix-2.patch " Andrew Morton
2020-06-03 22:09 ` [folded-merged] mm-free_area_init-allow-defining-max_zone_pfn-in-descending-order-fix-2-fix.patch " Andrew Morton
2020-06-03 22:10 ` [folded-merged] mmpage_alloccma-conditionally-prefer-cma-pageblocks-for-movable-allocations-fix.patch " Andrew Morton
2020-06-03 22:11 ` [folded-merged] mm-reset-numa-stats-for-boot-pagesets-v3.patch " Andrew Morton
2020-06-03 22:11 ` [folded-merged] khugepaged-add-self-test-fix.patch " Andrew Morton
2020-06-03 22:11 ` [folded-merged] khugepaged-add-self-test-fix-2.patch " Andrew Morton
2020-06-03 22:12 ` [folded-merged] khugepaged-add-self-test-fix-2-fix.patch " Andrew Morton
2020-06-03 22:12 ` [folded-merged] khugepaged-add-self-test-fix-3.patch " Andrew Morton
2020-06-03 22:13 ` [folded-merged] khugepaged-allow-to-collapse-a-page-shared-across-fork-fix.patch " Andrew Morton
2020-06-03 22:13 ` [folded-merged] khugepaged-allow-to-collapse-a-page-shared-across-fork-fix-fix.patch " Andrew Morton
2020-06-03 22:14 ` [folded-merged] khugepaged-introduce-max_ptes_shared-tunable-fix.patch " Andrew Morton
2020-06-03 22:15 ` [folded-merged] hugetlbfs-remove-hugetlb_add_hstate-warning-for-existing-hstate-fix.patch " Andrew Morton
2020-06-03 22:16 ` [folded-merged] mm-memcontrol-switch-to-native-nr_anon_thps-counter-fix.patch " Andrew Morton
2020-06-03 22:17 ` [folded-merged] mm-memcontrol-convert-anon-and-file-thp-to-new-mem_cgroup_charge-api-fix.patch " Andrew Morton
2020-06-03 22:18 ` [folded-merged] mm-memcontrol-drop-unused-try-commit-cancel-charge-api-fix.patch " Andrew Morton
2020-06-03 22:19 ` [folded-merged] mm-memcontrol-make-swap-tracking-an-integral-part-of-memory-control-fix-v2.patch " Andrew Morton
2020-06-03 22:20 ` [folded-merged] mm-memcontrol-charge-swapin-pages-on-instantiation-fix.patch " Andrew Morton
2020-06-03 22:21 ` [folded-merged] mm-fold-and-remove-lru_cache_add_anon-and-lru_cache_add_file-fix.patch " Andrew Morton
2020-06-03 22:21 ` [folded-merged] mm-deactivations-shouldnt-bias-the-lru-balance-fix.patch " Andrew Morton
2020-06-03 22:22 ` [folded-merged] mm-thp-rename-pmd_mknotpresent-as-pmd_mkinvalid-v2.patch " Andrew Morton
2020-06-03 22:23 ` [folded-merged] drivers-base-memoryc-cache-memory-blocks-in-xarray-to-accelerate-lookup-fix.patch " Andrew Morton
2020-06-03 22:24 ` [folded-merged] mm-add-debug_wx-support-fix.patch " Andrew Morton
2020-06-03 22:24 ` [folded-merged] mm-add-debug_wx-support-fix-2.patch " Andrew Morton
2020-06-03 22:24 ` [folded-merged] mm-add-debug_wx-support-fix-3.patch " Andrew Morton
2020-06-03 22:25 ` [folded-merged] riscv-support-debug_wx-fix.patch " Andrew Morton
  -- strict thread matches above, loose matches on Subject: below --
2020-06-02  4:44 incoming Andrew Morton
2020-06-02  4:49 ` [patch 082/128] mm/memcg: automatically penalize tasks with high swap use Andrew Morton

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200602201442.v3gM6DBb1%akpm@linux-foundation.org \
    --to=akpm@linux-foundation.org \
    --cc=chris@chrisdown.name \
    --cc=hannes@cmpxchg.org \
    --cc=hughd@google.com \
    --cc=kuba@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=mhocko@kernel.org \
    --cc=mm-commits@vger.kernel.org \
    --cc=shakeelb@google.com \
    --cc=tj@kernel.org \
    --cc=torvalds@linux-foundation.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).