All of lore.kernel.org
 help / color / mirror / Atom feed
From: Peter Xu <peterx@redhat.com>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Andrew Morton <akpm@linux-foundation.org>,
	Andrea Arcangeli <aarcange@redhat.com>,
	Evgeniy Stepanov <eugenis@google.com>,
	kostyak@google.com, Linux-MM <linux-mm@kvack.org>,
	mm-commits@vger.kernel.org, Peter Collingbourne <pcc@google.com>
Subject: Re: [patch 128/192] mm: improve mprotect(R|W) efficiency on pages referenced once
Date: Wed, 30 Jun 2021 12:42:12 -0400	[thread overview]
Message-ID: <YNye5LNFaNFEPfhA@t490s> (raw)
In-Reply-To: <CAHk-=wgt_666dOxYycGegSeUtLebUv0hVrcgXwXE9b-2_V=HXw@mail.gmail.com>

[-- Attachment #1: Type: text/plain, Size: 5239 bytes --]

On Tue, Jun 29, 2021 at 07:25:42PM -0700, Linus Torvalds wrote:
> On Tue, Jun 29, 2021 at 6:39 PM Peter Xu <peterx@redhat.com> wrote:
> >
> > And since MM_CP_DIRTY_ACCT implies "VM_WRITE|VM_SHARED" all set, above should
> > be a slightly faster version of below:
> 
> That's way too subtle, particularly since the MM_CP_DIRTY_ACCT logic
> comes from another file entirely.
> 
> I don't think it's even faster, considering that presumably the
> anonymous mapping case is the common one, and that's the one that
> needs all the extra tests, it's likely better to _not_ test that very
> subtle flag at all, and just doing the straightforward and obvious
> tests that are understandable _locally_.
> 
> So I claim that it's
> 
>  (a) not an optimization at all
> 
>  (b) completely locally unintuitive and unreadable
> 
> > Again, I think in all cases some more comment should be good indeed..
> 
> I really want more than a comment. I want that MM_CP_DIRTY_ACCT bit
> testing gone.

My understanding is that MM_CP_DIRTY_ACCT contains all check results from
vma_wants_writenotify(), so if we drop it we'd need to have something like that
to be checked within change_pte_range(), which is again slower (I have totally
no idea how slow to check vma->vm_flags & VM_WRITE, but moving the whole
vma_wants_writenotify here is definitely even slower).

> 
> The only point where it makes sense to check MM_CP_DIRTY_ACCT is
> within the context of "is the page already dirty".
> 
> So I think the logic should be something along the lines of
> 
>  - first:
> 
>          if (!(vma->vm_flags & VM_WRITE))
>                 return false;
> 
>    because that logic is set in stone, and true regardless of anything
> else. If the vma isn't writable, we're not going to set the write bit.
> End of story.
> 
>  - then, check the vma_is_anonumous() case:
> 
>         if (vma_is_anonymous(vma))
>                 return page_count(pte_page(pte)) == 1;
> 
>      because if it's a writable mapping, and anonymous, then we can
> mark it writable if we're the exclusive owners of that page.

Shouldn't we still at least checks [soft-]dirty bits and uffd-wp bits to make
sure it's either not dirty tracked or uffd wr-protected?  Say, IMHO it's
possible that soft-dirty tracking enabled on this anonymous vma range, then we
still depend on the write bit removed to set the soft-dirty later in the fault
handler.

> 
>  - and THEN we can handle the "ok, shared mapping, now let's start
> thinking about dirty accounting" cases.
> 
> Make it obvious and correct. This is not a sequence where you should
> try to (incorrectly) optimize away individual instructions.

Yes I still fully agree it's very un-obvious.  So far the best thing I can come
up with is something like below (patch attached too but not yet tested). I
moved VM_WRITE out so hopefully it'll be very clear; then I also rearranged the
checks so the final outcome looks like below:

static bool may_avoid_write_fault(pte_t pte, struct vm_area_struct *vma,
				  unsigned long cp_flags)
{
	/*
	 * It is unclear whether this optimization can be done safely for NUMA
	 * pages.
	 */
	if (cp_flags & MM_CP_PROT_NUMA)
		return false;

	/*
	 * Never apply write bit if VM_WRITE not set.  Note that this is
	 * actually checked for VM_SHARED when MM_CP_DIRTY_ACCT is set, so
	 * logically we only need to check it for !MM_CP_DIRTY_ACCT, but just
	 * make it even more obvious.
	 */
	if (!(vma->vm_flags & VM_WRITE))
		return false;

	/*
	 * Don't do this optimization for clean pages as we need to be notified
	 * of the transition from clean to dirty.
	 */
	if (!pte_dirty(pte))
		return false;

	/* Same for softdirty. */
	if (!pte_soft_dirty(pte) && (vma->vm_flags & VM_SOFTDIRTY))
		return false;

	/*
	 * For userfaultfd the user program needs to monitor write faults so we
	 * can't do this optimization.
	 */
	if (pte_uffd_wp(pte))
		return false;

	/*
	 * MM_CP_DIRTY_ACCT indicates that we can always make the page writable
	 * regardless of the number of references.  Time to set the write bit.
	 */
	if (cp_flags & MM_CP_DIRTY_ACCT)
		return true;

	/*
	 * Othewise it means !MM_CP_DIRTY_ACCT.  We can only apply write bit
	 * early if it's anonymous page and we exclusively own it.
	 */
	if (vma_is_anonymous(vma) && (page_count(pte_page(pte)) == 1))
		return true;

	/* Don't play any trick */
	return false;
}

The logic should be the same as before, it's just that we'll do an extra check
on VM_WRITE for MM_CP_DIRTY_ACCT but assuming it's ok.

Another side note is that I still think the VM_SOFTDIRTY check is wrong in
may_avoid_write_fault() and even in the old code (I mentioned it previously
when reviewing the patch), as !VM_SOFTDIRTY should mean soft dirty tracking
enabled while VM_SOFTDIRTY means disabled.  So I wonder whether it should be:

-       if (!pte_soft_dirty(pte) && (vma->vm_flags & VM_SOFTDIRTY))
+       if (!pte_soft_dirty(pte) && !(vma->vm_flags & VM_SOFTDIRTY))

However I didn't touch it up there as it may need more justifications (I feel
it's okay in the old code, as vma_wants_writenotify actually checks it too and
in the right way; however after the anonymous fast path it seems to prone to
error if it's anonymous; I'll check later).

Thanks,

-- 
Peter Xu

[-- Attachment #2: 0001-mm-mprotect-Optimize-layout-of-may_avoid_write_fault.patch --]
[-- Type: text/plain, Size: 2964 bytes --]

From 4fb32ad7c949d5ec6b6ea364d3388b50bf674c9c Mon Sep 17 00:00:00 2001
From: Peter Xu <peterx@redhat.com>
Date: Wed, 30 Jun 2021 12:20:12 -0400
Subject: [PATCH] mm/mprotect: Optimize layout of may_avoid_write_fault()

Firstly move VM_WRITE check to be outside of !MM_CP_DIRTY_ACCT chunk, so as to
make it clear that we won't accidentally set the write bit to !VM_WRITE vmas.

The old logic is hard to read in that it was written in reversed logic.  Put
things backward by moving the soft-dirty and uffd-wp checks earlier.  Make the
NUMA check even earlier than those as it's a cheap check and straightforward.

Make the only "return true" case to be either the MM_CP_DIRTY_ACCT (which
stands for the VM_SHARED cases when write bit can be applied), or the special
anonymous page when we exclusively own it.

Signed-off-by: Peter Xu <peterx@redhat.com>
---
 mm/mprotect.c | 39 +++++++++++++++++++++++++--------------
 1 file changed, 25 insertions(+), 14 deletions(-)

diff --git a/mm/mprotect.c b/mm/mprotect.c
index 4cb240fd9936..3977bfd55f62 100644
--- a/mm/mprotect.c
+++ b/mm/mprotect.c
@@ -40,17 +40,20 @@ static bool may_avoid_write_fault(pte_t pte, struct vm_area_struct *vma,
 				  unsigned long cp_flags)
 {
 	/*
-	 * The dirty accountable bit indicates that we can always make the page
-	 * writable regardless of the number of references.
+	 * It is unclear whether this optimization can be done safely for NUMA
+	 * pages.
 	 */
-	if (!(cp_flags & MM_CP_DIRTY_ACCT)) {
-		/* Otherwise, we must have exclusive access to the page. */
-		if (!(vma_is_anonymous(vma) && (vma->vm_flags & VM_WRITE)))
-			return false;
+	if (cp_flags & MM_CP_PROT_NUMA)
+		return false;
 
-		if (page_count(pte_page(pte)) != 1)
-			return false;
-	}
+	/*
+	 * Never apply write bit if VM_WRITE not set.  Note that this is
+	 * actually checked for VM_SHARED when MM_CP_DIRTY_ACCT is set, so
+	 * logically we only need to check it for !MM_CP_DIRTY_ACCT, but just
+	 * make it even more obvious.
+	 */
+	if (!(vma->vm_flags & VM_WRITE))
+		return false;
 
 	/*
 	 * Don't do this optimization for clean pages as we need to be notified
@@ -71,13 +74,21 @@ static bool may_avoid_write_fault(pte_t pte, struct vm_area_struct *vma,
 		return false;
 
 	/*
-	 * It is unclear whether this optimization can be done safely for NUMA
-	 * pages.
+	 * MM_CP_DIRTY_ACCT indicates that we can always make the page writable
+	 * regardless of the number of references.  Time to set the write bit.
 	 */
-	if (cp_flags & MM_CP_PROT_NUMA)
-		return false;
+	if (cp_flags & MM_CP_DIRTY_ACCT)
+		return true;
+
+	/*
+	 * Othewise it means !MM_CP_DIRTY_ACCT.  We can only apply write bit
+	 * early if it's anonymous page and we exclusively own it.
+	 */
+	if (vma_is_anonymous(vma) && (page_count(pte_page(pte)) == 1))
+		return true;
 
-	return true;
+	/* Don't play any trick */
+	return false;
 }
 
 static unsigned long change_pte_range(struct vm_area_struct *vma, pmd_t *pmd,
-- 
2.31.1


  reply	other threads:[~2021-06-30 16:42 UTC|newest]

Thread overview: 202+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-06-29  2:32 incoming Andrew Morton
2021-06-29  2:33 ` [patch 001/192] mm/gup: fix try_grab_compound_head() race with split_huge_page() Andrew Morton
2021-06-29  2:33 ` [patch 002/192] mm/page_alloc: fix memory map initialization for descending nodes Andrew Morton
2021-06-29  2:33 ` [patch 003/192] mm/page_alloc: correct return value of populated elements if bulk array is populated Andrew Morton
2021-06-29  2:33 ` [patch 004/192] kthread: switch to new kerneldoc syntax for named variable macro argument Andrew Morton
2021-06-29  2:33 ` [patch 005/192] kthread_worker: fix return value when kthread_mod_delayed_work() races with kthread_cancel_delayed_work_sync() Andrew Morton
2021-06-29  2:33 ` [patch 006/192] ia64: headers: drop duplicated words Andrew Morton
2021-06-29  2:33 ` [patch 007/192] ia64: mca_drv: fix incorrect array size calculation Andrew Morton
2021-06-29  2:33 ` [patch 008/192] streamline_config.pl: make spacing consistent Andrew Morton
2021-06-29  2:33 ` [patch 009/192] streamline_config.pl: add softtabstop=4 for vim users Andrew Morton
2021-06-29  2:33 ` [patch 010/192] scripts/spelling.txt: add more spellings to spelling.txt Andrew Morton
2021-06-29  2:33 ` [patch 011/192] ntfs: fix validity check for file name attribute Andrew Morton
2021-06-29  2:33 ` [patch 012/192] squashfs: add option to panic on errors Andrew Morton
2021-06-29  2:33 ` [patch 013/192] ocfs2: remove unnecessary INIT_LIST_HEAD() Andrew Morton
2021-06-29  2:34 ` [patch 014/192] ocfs2: fix snprintf() checking Andrew Morton
2021-06-29  2:34 ` [patch 015/192] ocfs2: remove redundant assignment to pointer queue Andrew Morton
2021-06-29  2:34 ` [patch 016/192] ocfs2: remove repeated uptodate check for buffer Andrew Morton
2021-06-29  2:34 ` [patch 017/192] ocfs2: replace simple_strtoull() with kstrtoull() Andrew Morton
2021-06-29  2:34 ` [patch 018/192] ocfs2: remove redundant initialization of variable ret Andrew Morton
2021-06-29  2:34 ` [patch 019/192] kernel: watchdog: modify the explanation related to watchdog thread Andrew Morton
2021-06-29  2:34 ` [patch 020/192] doc: " Andrew Morton
2021-06-29  2:34 ` [patch 021/192] doc: watchdog: modify the doc related to "watchdog/%u" Andrew Morton
2021-06-29  2:34 ` [patch 022/192] slab: use __func__ to trace function name Andrew Morton
2021-06-29  2:34 ` [patch 023/192] kunit: make test->lock irq safe Andrew Morton
2021-06-29  2:34 ` [patch 024/192] mm/slub, kunit: add a KUnit test for SLUB debugging functionality Andrew Morton
2021-06-29  2:34 ` [patch 025/192] slub: remove resiliency_test() function Andrew Morton
2021-06-29  2:34 ` [patch 026/192] mm, slub: change run-time assertion in kmalloc_index() to compile-time Andrew Morton
2021-06-29  2:34 ` [patch 027/192] slub: restore slub_debug=- behavior Andrew Morton
2021-06-29  2:34 ` [patch 028/192] slub: actually use 'message' in restore_bytes() Andrew Morton
2021-06-29  2:34 ` [patch 029/192] slub: indicate slab_fix() uses printf formats Andrew Morton
2021-06-29  2:34 ` [patch 030/192] slub: force on no_hash_pointers when slub_debug is enabled Andrew Morton
2021-06-29  2:34 ` [patch 031/192] mm: slub: move sysfs slab alloc/free interfaces to debugfs Andrew Morton
2021-06-29  2:34 ` [patch 032/192] mm/slub: add taint after the errors are printed Andrew Morton
2021-06-29  2:35 ` [patch 033/192] mm/kmemleak: fix possible wrong memory scanning period Andrew Morton
2021-06-29  2:35 ` [patch 034/192] dax: fix ENOMEM handling in grab_mapping_entry() Andrew Morton
2021-06-29  2:35 ` [patch 035/192] tools/vm/page_owner_sort.c: check malloc() return Andrew Morton
2021-06-29  2:35 ` [patch 036/192] mm/debug_vm_pgtable: ensure THP availability via has_transparent_hugepage() Andrew Morton
2021-06-29  2:35 ` [patch 037/192] mm: mmap_lock: use local locks instead of disabling preemption Andrew Morton
2021-06-29  2:35 ` [patch 038/192] mm/page_reporting: fix code style in __page_reporting_request() Andrew Morton
2021-06-29  2:35 ` [patch 039/192] mm/page_reporting: export reporting order as module parameter Andrew Morton
2021-06-29  2:35 ` [patch 040/192] mm/page_reporting: allow driver to specify reporting order Andrew Morton
2021-06-29  2:35 ` [patch 041/192] virtio_balloon: specify page reporting order if needed Andrew Morton
2021-06-29  2:35 ` [patch 042/192] mm: page-writeback: kill get_writeback_state() comments Andrew Morton
2021-06-29  2:35 ` [patch 043/192] mm/page-writeback: Fix performance when BDI's share of ratio is 0 Andrew Morton
2021-06-29  2:35 ` [patch 044/192] mm/page-writeback: update the comment of Dirty position control Andrew Morton
2021-06-29  2:35 ` [patch 045/192] mm/page-writeback: use __this_cpu_inc() in account_page_dirtied() Andrew Morton
2021-06-29  2:35 ` [patch 046/192] writeback, cgroup: do not switch inodes with I_WILL_FREE flag Andrew Morton
2021-06-29  2:35 ` [patch 047/192] writeback, cgroup: add smp_mb() to cgroup_writeback_umount() Andrew Morton
2021-06-29  2:35 ` [patch 048/192] writeback, cgroup: increment isw_nr_in_flight before grabbing an inode Andrew Morton
2021-06-29  2:35 ` [patch 049/192] writeback, cgroup: switch to rcu_work API in inode_switch_wbs() Andrew Morton
2021-06-29  2:35 ` [patch 050/192] writeback, cgroup: keep list of inodes attached to bdi_writeback Andrew Morton
2021-06-29  2:35 ` [patch 051/192] writeback, cgroup: split out the functional part of inode_switch_wbs_work_fn() Andrew Morton
2021-06-29  2:35 ` [patch 052/192] writeback, cgroup: support switching multiple inodes at once Andrew Morton
2021-06-29  2:36 ` [patch 053/192] writeback, cgroup: release dying cgwbs by switching attached inodes Andrew Morton
2021-06-29  2:36 ` [patch 054/192] fs: unexport __set_page_dirty Andrew Morton
2021-06-29  2:36 ` [patch 055/192] fs: move ramfs_aops to libfs Andrew Morton
2021-06-29  2:36 ` [patch 056/192] mm: require ->set_page_dirty to be explicitly wired up Andrew Morton
2021-06-29  2:36 ` [patch 057/192] mm/writeback: move __set_page_dirty() to core mm Andrew Morton
2021-06-29  2:36 ` [patch 058/192] mm/writeback: use __set_page_dirty in __set_page_dirty_nobuffers Andrew Morton
2021-06-29  2:36 ` [patch 059/192] iomap: use __set_page_dirty_nobuffers Andrew Morton
2021-06-29  2:36 ` [patch 060/192] fs: remove anon_set_page_dirty() Andrew Morton
2021-06-29  2:36 ` [patch 061/192] fs: remove noop_set_page_dirty() Andrew Morton
2021-06-29  2:36 ` [patch 062/192] mm: move page dirtying prototypes from mm.h Andrew Morton
2021-06-29  2:36 ` [patch 063/192] mm/gup_benchmark: support threading Andrew Morton
2021-06-29  2:36 ` [patch 064/192] mm: gup: allow FOLL_PIN to scale in SMP Andrew Morton
2021-06-29  2:36 ` [patch 065/192] mm: gup: pack has_pinned in MMF_HAS_PINNED Andrew Morton
2021-06-29  2:36 ` [patch 066/192] mm: pagewalk: fix walk for hugepage tables Andrew Morton
2021-06-29  2:36 ` [patch 067/192] mm/swapfile: use percpu_ref to serialize against concurrent swapoff Andrew Morton
2021-06-29  2:36 ` [patch 068/192] swap: fix do_swap_page() race with swapoff Andrew Morton
2021-06-29  2:36 ` [patch 069/192] mm/swap: remove confusing checking for non_swap_entry() in swap_ra_info() Andrew Morton
2021-06-29  2:36 ` [patch 070/192] mm/shmem: fix shmem_swapin() race with swapoff Andrew Morton
2021-06-29  2:37 ` [patch 071/192] mm/swapfile: move get_swap_page_of_type() under CONFIG_HIBERNATION Andrew Morton
2021-06-29  2:37 ` [patch 072/192] mm/swap: remove unused local variable nr_shadows Andrew Morton
2021-06-29  2:37 ` [patch 073/192] mm/swap_slots.c: delete meaningless forward declarations Andrew Morton
2021-06-29  2:37 ` [patch 074/192] mm, swap: remove unnecessary smp_rmb() in swap_type_to_swap_info() Andrew Morton
2021-06-29  2:37 ` [patch 075/192] mm: free idle swap cache page after COW Andrew Morton
2021-06-29  2:37 ` [patch 076/192] swap: check mapping_empty() for swap cache before being freed Andrew Morton
2021-06-29  2:37 ` [patch 077/192] mm/memcg: move mod_objcg_state() to memcontrol.c Andrew Morton
2021-06-29  2:37 ` [patch 078/192] mm/memcg: cache vmstat data in percpu memcg_stock_pcp Andrew Morton
2021-06-29  2:37 ` [patch 079/192] mm/memcg: improve refill_obj_stock() performance Andrew Morton
2021-06-29  2:37 ` [patch 080/192] mm/memcg: optimize user context object stock access Andrew Morton
2021-06-29  2:37 ` [patch 081/192] mm: memcg/slab: properly set up gfp flags for objcg pointer array Andrew Morton
2021-06-29  2:37 ` [patch 082/192] mm: memcg/slab: create a new set of kmalloc-cg-<n> caches Andrew Morton
2021-06-29  2:37 ` [patch 083/192] mm: memcg/slab: disable cache merging for KMALLOC_NORMAL caches Andrew Morton
2021-06-29  2:37 ` [patch 084/192] mm: memcontrol: fix root_mem_cgroup charging Andrew Morton
2021-06-29  2:37 ` [patch 085/192] mm: memcontrol: fix page charging in page replacement Andrew Morton
2021-06-29  2:37 ` [patch 086/192] mm: memcontrol: bail out early when !mm in get_mem_cgroup_from_mm Andrew Morton
2021-06-29  2:37 ` [patch 087/192] mm: memcontrol: remove the pgdata parameter of mem_cgroup_page_lruvec Andrew Morton
2021-06-29  2:37 ` [patch 088/192] mm: memcontrol: simplify lruvec_holds_page_lru_lock Andrew Morton
2021-06-29  2:37 ` [patch 089/192] mm: memcontrol: rename lruvec_holds_page_lru_lock to page_matches_lruvec Andrew Morton
2021-06-29  2:38 ` [patch 090/192] mm: memcontrol: simplify the logic of objcg pinning memcg Andrew Morton
2021-06-29  2:38 ` [patch 091/192] mm: memcontrol: move obj_cgroup_uncharge_pages() out of css_set_lock Andrew Morton
2021-06-29  2:38 ` [patch 092/192] mm: vmscan: remove noinline_for_stack Andrew Morton
2021-06-29  2:38 ` [patch 093/192] memcontrol: use flexible-array member Andrew Morton
2021-06-29  2:38 ` [patch 094/192] loop: use worker per cgroup instead of kworker Andrew Morton
2021-06-29  2:38 ` [patch 095/192] mm: charge active memcg when no mm is set Andrew Morton
2021-06-29  2:38 ` [patch 096/192] loop: charge i/o to mem and blk cg Andrew Morton
2021-06-29  2:38 ` [patch 097/192] mm: memcontrol: remove trailing semicolon in macros Andrew Morton
2021-06-29  2:38 ` [patch 098/192] perf: MAP_EXECUTABLE does not indicate VM_MAYEXEC Andrew Morton
2021-06-29  2:38 ` [patch 099/192] binfmt: remove in-tree usage of MAP_EXECUTABLE Andrew Morton
2021-06-29  2:38 ` [patch 100/192] mm: ignore MAP_EXECUTABLE in ksys_mmap_pgoff() Andrew Morton
2021-06-29  2:38 ` [patch 101/192] mm/mmap.c: logic of find_vma_intersection repeated in __do_munmap Andrew Morton
2021-06-29  2:38 ` [patch 102/192] mm/mmap: introduce unlock_range() for code cleanup Andrew Morton
2021-06-29  2:38 ` [patch 103/192] mm/mmap: use find_vma_intersection() in do_mmap() for overlap Andrew Morton
2021-06-29  2:38 ` [patch 104/192] mm/memory.c: fix comment of finish_mkwrite_fault() Andrew Morton
2021-06-29  2:38 ` [patch 105/192] mm: add vma_lookup(), update find_vma_intersection() comments Andrew Morton
2021-06-29  2:38 ` [patch 106/192] drm/i915/selftests: use vma_lookup() in __igt_mmap() Andrew Morton
2021-06-29  2:38 ` [patch 107/192] arch/arc/kernel/troubleshoot: use vma_lookup() instead of find_vma() Andrew Morton
2021-06-29  2:38 ` [patch 108/192] arch/arm64/kvm: use vma_lookup() instead of find_vma_intersection() Andrew Morton
2021-06-29  2:39 ` [patch 109/192] arch/powerpc/kvm/book3s_hv_uvmem: " Andrew Morton
2021-06-29  2:39 ` [patch 110/192] arch/powerpc/kvm/book3s: use vma_lookup() in kvmppc_hv_setup_htab_rma() Andrew Morton
2021-06-29  2:39 ` [patch 111/192] arch/mips/kernel/traps: use vma_lookup() instead of find_vma() Andrew Morton
2021-06-29  2:39 ` [patch 112/192] arch/m68k/kernel/sys_m68k: use vma_lookup() in sys_cacheflush() Andrew Morton
2021-06-29  2:39 ` [patch 113/192] x86/sgx: use vma_lookup() in sgx_encl_find() Andrew Morton
2021-06-29  2:39 ` [patch 114/192] virt/kvm: use vma_lookup() instead of find_vma_intersection() Andrew Morton
2021-06-29  2:39 ` [patch 115/192] vfio: " Andrew Morton
2021-06-29  2:39 ` [patch 116/192] net/ipv5/tcp: use vma_lookup() in tcp_zerocopy_receive() Andrew Morton
2021-06-29  2:39 ` [patch 117/192] drm/amdgpu: use vma_lookup() in amdgpu_ttm_tt_get_user_pages() Andrew Morton
2021-06-29  2:39 ` [patch 118/192] media: videobuf2: use vma_lookup() in get_vaddr_frames() Andrew Morton
2021-06-29  2:39 ` [patch 119/192] misc/sgi-gru/grufault: use vma_lookup() in gru_find_vma() Andrew Morton
2021-06-29  2:39 ` [patch 120/192] kernel/events/uprobes: use vma_lookup() in find_active_uprobe() Andrew Morton
2021-06-29  2:39 ` [patch 121/192] lib/test_hmm: use vma_lookup() in dmirror_migrate() Andrew Morton
2021-06-29  2:39 ` [patch 122/192] mm/ksm: use vma_lookup() in find_mergeable_vma() Andrew Morton
2021-06-29  2:39 ` [patch 123/192] mm/migrate: use vma_lookup() in do_pages_stat_array() Andrew Morton
2021-06-29  2:39 ` [patch 124/192] mm/mremap: use vma_lookup() in vma_to_resize() Andrew Morton
2021-06-29  2:39 ` [patch 125/192] mm/memory.c: use vma_lookup() in __access_remote_vm() Andrew Morton
2021-06-29  2:39 ` [patch 126/192] mm/mempolicy: " Andrew Morton
2021-06-29  2:39 ` [patch 127/192] mm: update legacy flush_tlb_* to use vma Andrew Morton
2021-06-29  2:39 ` [patch 128/192] mm: improve mprotect(R|W) efficiency on pages referenced once Andrew Morton
2021-06-29 17:50   ` Linus Torvalds
2021-06-30  0:12     ` Peter Xu
2021-06-30  1:39       ` Peter Xu
2021-06-30  2:25         ` Linus Torvalds
2021-06-30 16:42           ` Peter Xu [this message]
2021-06-30 18:03             ` Linus Torvalds
2021-07-01  1:27               ` Peter Xu
2021-07-01 18:29                 ` Linus Torvalds
2021-07-06  1:24                   ` Peter Xu
2021-06-29  2:40 ` [patch 129/192] h8300: remove unused variable Andrew Morton
2021-06-29  2:40 ` [patch 130/192] mm/dmapool: use DEVICE_ATTR_RO macro Andrew Morton
2021-06-29  2:40 ` [patch 131/192] mm, tracing: unify PFN format strings Andrew Morton
2021-06-29  2:40 ` [patch 132/192] mm/page_alloc: add an alloc_pages_bulk_array_node() helper Andrew Morton
2021-06-29  2:40 ` [patch 133/192] mm/vmalloc: switch to bulk allocator in __vmalloc_area_node() Andrew Morton
2021-06-29  2:40 ` [patch 134/192] mm/vmalloc: print a warning message first on failure Andrew Morton
2021-06-29  2:40 ` [patch 135/192] mm/vmalloc: remove quoted strings split across lines Andrew Morton
2021-06-29  2:40 ` [patch 136/192] mm/vmalloc: fallback to a single page allocator Andrew Morton
2021-06-29  2:40 ` [patch 137/192] mm: vmalloc: add cond_resched() in __vunmap() Andrew Morton
2021-06-29  2:40 ` [patch 138/192] printk: introduce dump_stack_lvl() Andrew Morton
2021-06-29  2:40 ` [patch 139/192] kasan: use dump_stack_lvl(KERN_ERR) to print stacks Andrew Morton
2021-06-29  2:40 ` [patch 140/192] kasan: test: improve failure message in KUNIT_EXPECT_KASAN_FAIL() Andrew Morton
2021-06-29  2:40 ` [patch 141/192] kasan: allow an architecture to disable inline instrumentation Andrew Morton
2021-06-29  2:40 ` [patch 142/192] kasan: allow architectures to provide an outline readiness check Andrew Morton
2021-06-29  2:40 ` [patch 143/192] mm: define default MAX_PTRS_PER_* in include/pgtable.h Andrew Morton
2021-06-29  2:40 ` [patch 144/192] kasan: use MAX_PTRS_PER_* for early shadow tables Andrew Morton
2021-06-29  2:40 ` [patch 145/192] kasan: rename CONFIG_KASAN_SW_TAGS_IDENTIFY to CONFIG_KASAN_TAGS_IDENTIFY Andrew Morton
2021-06-29  2:40 ` [patch 146/192] kasan: integrate the common part of two KASAN tag-based modes Andrew Morton
2021-06-29  2:40 ` [patch 147/192] kasan: add memory corruption identification support for hardware tag-based mode Andrew Morton
2021-06-29  2:41 ` [patch 148/192] mm: report which part of mem is being freed on initmem case Andrew Morton
2021-06-29  2:41 ` [patch 149/192] mm/mmzone.h: simplify is_highmem_idx() Andrew Morton
2021-06-29  2:41 ` [patch 150/192] mm: make __dump_page static Andrew Morton
2021-06-29  2:41 ` [patch 151/192] mm/page_alloc: bail out on fatal signal during reclaim/compaction retry attempt Andrew Morton
2021-06-29  2:41 ` [patch 152/192] mm/debug: factor PagePoisoned out of __dump_page Andrew Morton
2021-06-29  2:41 ` [patch 153/192] mm/page_owner: constify dump_page_owner Andrew Morton
2021-06-29  2:41 ` [patch 154/192] mm: make compound_head const-preserving Andrew Morton
2021-06-29  2:41 ` [patch 155/192] mm: constify get_pfnblock_flags_mask and get_pfnblock_migratetype Andrew Morton
2021-06-29  2:41 ` [patch 156/192] mm: constify page_count and page_ref_count Andrew Morton
2021-06-29  2:41 ` [patch 157/192] mm: optimise nth_page for contiguous memmap Andrew Morton
2021-06-29  2:41 ` [patch 158/192] mm/page_alloc: switch to pr_debug Andrew Morton
2021-06-29  2:41 ` [patch 159/192] kbuild: skip per-CPU BTF generation for pahole v1.18-v1.21 Andrew Morton
2021-06-29  2:41 ` [patch 160/192] mm/page_alloc: split per cpu page lists and zone stats Andrew Morton
2021-06-29  2:41 ` [patch 161/192] mm/page_alloc: convert per-cpu list protection to local_lock Andrew Morton
2021-06-29  2:41 ` [patch 162/192] mm/vmstat: convert NUMA statistics to basic NUMA counters Andrew Morton
2021-06-29  2:41 ` [patch 163/192] mm/vmstat: inline NUMA event counter updates Andrew Morton
2021-06-29  2:41 ` [patch 164/192] mm/page_alloc: batch the accounting updates in the bulk allocator Andrew Morton
2021-06-29  2:41 ` [patch 165/192] mm/page_alloc: reduce duration that IRQs are disabled for VM counters Andrew Morton
2021-06-29  2:41 ` [patch 166/192] mm/page_alloc: explicitly acquire the zone lock in __free_pages_ok Andrew Morton
2021-06-29  2:42 ` [patch 167/192] mm/page_alloc: avoid conflating IRQs disabled with zone->lock Andrew Morton
2021-06-29  2:42 ` [patch 168/192] mm/page_alloc: update PGFREE outside the zone lock in __free_pages_ok Andrew Morton
2021-06-29  2:42 ` [patch 169/192] mm: page_alloc: dump migrate-failed pages only at -EBUSY Andrew Morton
2021-06-29  2:42 ` [patch 170/192] mm/page_alloc: delete vm.percpu_pagelist_fraction Andrew Morton
2021-06-29  2:42 ` [patch 171/192] mm/page_alloc: disassociate the pcp->high from pcp->batch Andrew Morton
2021-06-29  2:42 ` [patch 172/192] mm/page_alloc: adjust pcp->high after CPU hotplug events Andrew Morton
2021-06-29  2:42 ` [patch 173/192] mm/page_alloc: scale the number of pages that are batch freed Andrew Morton
2021-06-29  2:42 ` [patch 174/192] mm/page_alloc: limit the number of pages on PCP lists when reclaim is active Andrew Morton
2021-06-29  2:42 ` [patch 175/192] mm/page_alloc: introduce vm.percpu_pagelist_high_fraction Andrew Morton
2021-06-29  2:42 ` [patch 176/192] mm: drop SECTION_SHIFT in code comments Andrew Morton
2021-06-29  2:42 ` [patch 177/192] mm/page_alloc: improve memmap_pages dbg msg Andrew Morton
2021-06-29  2:42 ` [patch 178/192] mm/page_alloc: fix counting of managed_pages Andrew Morton
2021-06-29  2:42 ` [patch 179/192] mm/page_alloc: move free_the_page Andrew Morton
2021-06-29  2:42 ` [patch 180/192] alpha: remove DISCONTIGMEM and NUMA Andrew Morton
2021-06-29  2:42 ` [patch 181/192] arc: update comment about HIGHMEM implementation Andrew Morton
2021-06-29  2:42 ` [patch 182/192] arc: remove support for DISCONTIGMEM Andrew Morton
2021-06-29  2:42 ` [patch 183/192] m68k: " Andrew Morton
2021-06-29  2:42 ` [patch 184/192] mm: remove CONFIG_DISCONTIGMEM Andrew Morton
2021-06-29  2:42 ` [patch 185/192] arch, mm: remove stale mentions of DISCONIGMEM Andrew Morton
2021-06-29  2:42 ` [patch 186/192] docs: remove description of DISCONTIGMEM Andrew Morton
2021-06-29  2:43 ` [patch 187/192] mm: replace CONFIG_NEED_MULTIPLE_NODES with CONFIG_NUMA Andrew Morton
2021-06-29  2:43 ` [patch 188/192] mm: replace CONFIG_FLAT_NODE_MEM_MAP with CONFIG_FLATMEM Andrew Morton
2021-06-29  2:43 ` [patch 189/192] mm/page_alloc: allow high-order pages to be stored on the per-cpu lists Andrew Morton
2021-06-29  2:43 ` [patch 190/192] mm/page_alloc: split pcp->high across all online CPUs for cpuless nodes Andrew Morton
2021-06-29  2:43 ` [patch 191/192] mm,hwpoison: send SIGBUS with error virutal address Andrew Morton
2021-06-29  2:43 ` [patch 192/192] mm,hwpoison: make get_hwpoison_page() call get_any_page() 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=YNye5LNFaNFEPfhA@t490s \
    --to=peterx@redhat.com \
    --cc=aarcange@redhat.com \
    --cc=akpm@linux-foundation.org \
    --cc=eugenis@google.com \
    --cc=kostyak@google.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=mm-commits@vger.kernel.org \
    --cc=pcc@google.com \
    --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 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.