linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
From: Andrew Morton <akpm@linux-foundation.org>
To: akpm@linux-foundation.org, apopple@nvidia.com,
	bskeggs@redhat.com, hch@lst.de, hughd@google.com, jgg@nvidia.com,
	jhubbard@nvidia.com, linux-mm@kvack.org,
	mm-commits@vger.kernel.org, peterx@redhat.com,
	rcampbell@nvidia.com, shakeelb@google.com,
	torvalds@linux-foundation.org, willy@infradead.org
Subject: [patch 133/192] mm/rmap: split migration into its own function
Date: Wed, 30 Jun 2021 18:54:16 -0700	[thread overview]
Message-ID: <20210701015416.0t4MkxtDR%akpm@linux-foundation.org> (raw)
In-Reply-To: <20210630184624.9ca1937310b0dd5ce66b30e7@linux-foundation.org>

From: Alistair Popple <apopple@nvidia.com>
Subject: mm/rmap: split migration into its own function

Migration is currently implemented as a mode of operation for
try_to_unmap_one() generally specified by passing the TTU_MIGRATION flag
or in the case of splitting a huge anonymous page TTU_SPLIT_FREEZE.

However it does not have much in common with the rest of the unmap
functionality of try_to_unmap_one() and thus splitting it into a separate
function reduces the complexity of try_to_unmap_one() making it more
readable.

Several simplifications can also be made in try_to_migrate_one() based on
the following observations:

 - All users of TTU_MIGRATION also set TTU_IGNORE_MLOCK.
 - No users of TTU_MIGRATION ever set TTU_IGNORE_HWPOISON.
 - No users of TTU_MIGRATION ever set TTU_BATCH_FLUSH.

TTU_SPLIT_FREEZE is a special case of migration used when splitting an
anonymous page.  This is most easily dealt with by calling the correct
function from unmap_page() in mm/huge_memory.c - either try_to_migrate()
for PageAnon or try_to_unmap().

Link: https://lkml.kernel.org/r/20210616105937.23201-5-apopple@nvidia.com
Signed-off-by: Alistair Popple <apopple@nvidia.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Ralph Campbell <rcampbell@nvidia.com>
Cc: Ben Skeggs <bskeggs@redhat.com>
Cc: Hugh Dickins <hughd@google.com>
Cc: Jason Gunthorpe <jgg@nvidia.com>
Cc: John Hubbard <jhubbard@nvidia.com>
Cc: "Matthew Wilcox (Oracle)" <willy@infradead.org>
Cc: Peter Xu <peterx@redhat.com>
Cc: Shakeel Butt <shakeelb@google.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
---

 include/linux/rmap.h |    4 
 mm/huge_memory.c     |   16 +
 mm/migrate.c         |    9 -
 mm/rmap.c            |  367 ++++++++++++++++++++++++++++++-----------
 4 files changed, 289 insertions(+), 107 deletions(-)

--- a/include/linux/rmap.h~mm-rmap-split-migration-into-its-own-function
+++ a/include/linux/rmap.h
@@ -86,8 +86,6 @@ struct anon_vma_chain {
 };
 
 enum ttu_flags {
-	TTU_MIGRATION		= 0x1,	/* migration mode */
-
 	TTU_SPLIT_HUGE_PMD	= 0x4,	/* split huge PMD if any */
 	TTU_IGNORE_MLOCK	= 0x8,	/* ignore mlock */
 	TTU_SYNC		= 0x10,	/* avoid racy checks with PVMW_SYNC */
@@ -97,7 +95,6 @@ enum ttu_flags {
 					 * do a final flush if necessary */
 	TTU_RMAP_LOCKED		= 0x80,	/* do not grab rmap lock:
 					 * caller holds it */
-	TTU_SPLIT_FREEZE	= 0x100,		/* freeze pte under splitting thp */
 };
 
 #ifdef CONFIG_MMU
@@ -194,6 +191,7 @@ static inline void page_dup_rmap(struct
 int page_referenced(struct page *, int is_locked,
 			struct mem_cgroup *memcg, unsigned long *vm_flags);
 
+void try_to_migrate(struct page *page, enum ttu_flags flags);
 void try_to_unmap(struct page *, enum ttu_flags flags);
 
 /* Avoid racy checks */
--- a/mm/huge_memory.c~mm-rmap-split-migration-into-its-own-function
+++ a/mm/huge_memory.c
@@ -2309,16 +2309,20 @@ void vma_adjust_trans_huge(struct vm_are
 
 static void unmap_page(struct page *page)
 {
-	enum ttu_flags ttu_flags = TTU_IGNORE_MLOCK | TTU_SYNC |
-		TTU_RMAP_LOCKED | TTU_SPLIT_HUGE_PMD;
+	enum ttu_flags ttu_flags = TTU_RMAP_LOCKED | TTU_SPLIT_HUGE_PMD |
+		TTU_SYNC;
 
 	VM_BUG_ON_PAGE(!PageHead(page), page);
 
-	/* If TTU_SPLIT_FREEZE is ever extended to file, update remap_page() */
+	/*
+	 * Anon pages need migration entries to preserve them, but file
+	 * pages can simply be left unmapped, then faulted back on demand.
+	 * If that is ever changed (perhaps for mlock), update remap_page().
+	 */
 	if (PageAnon(page))
-		ttu_flags |= TTU_SPLIT_FREEZE;
-
-	try_to_unmap(page, ttu_flags);
+		try_to_migrate(page, ttu_flags);
+	else
+		try_to_unmap(page, ttu_flags | TTU_IGNORE_MLOCK);
 
 	VM_WARN_ON_ONCE_PAGE(page_mapped(page), page);
 }
--- a/mm/migrate.c~mm-rmap-split-migration-into-its-own-function
+++ a/mm/migrate.c
@@ -1109,7 +1109,7 @@ static int __unmap_and_move(struct page
 		/* Establish migration ptes */
 		VM_BUG_ON_PAGE(PageAnon(page) && !PageKsm(page) && !anon_vma,
 				page);
-		try_to_unmap(page, TTU_MIGRATION|TTU_IGNORE_MLOCK);
+		try_to_migrate(page, 0);
 		page_was_mapped = 1;
 	}
 
@@ -1311,7 +1311,7 @@ static int unmap_and_move_huge_page(new_
 
 	if (page_mapped(hpage)) {
 		bool mapping_locked = false;
-		enum ttu_flags ttu = TTU_MIGRATION|TTU_IGNORE_MLOCK;
+		enum ttu_flags ttu = 0;
 
 		if (!PageAnon(hpage)) {
 			/*
@@ -1328,7 +1328,7 @@ static int unmap_and_move_huge_page(new_
 			ttu |= TTU_RMAP_LOCKED;
 		}
 
-		try_to_unmap(hpage, ttu);
+		try_to_migrate(hpage, ttu);
 		page_was_mapped = 1;
 
 		if (mapping_locked)
@@ -2602,7 +2602,6 @@ static void migrate_vma_prepare(struct m
  */
 static void migrate_vma_unmap(struct migrate_vma *migrate)
 {
-	int flags = TTU_MIGRATION | TTU_IGNORE_MLOCK;
 	const unsigned long npages = migrate->npages;
 	const unsigned long start = migrate->start;
 	unsigned long addr, i, restore = 0;
@@ -2614,7 +2613,7 @@ static void migrate_vma_unmap(struct mig
 			continue;
 
 		if (page_mapped(page)) {
-			try_to_unmap(page, flags);
+			try_to_migrate(page, 0);
 			if (page_mapped(page))
 				goto restore;
 		}
--- a/mm/rmap.c~mm-rmap-split-migration-into-its-own-function
+++ a/mm/rmap.c
@@ -1411,14 +1411,8 @@ static bool try_to_unmap_one(struct page
 	if (flags & TTU_SYNC)
 		pvmw.flags = PVMW_SYNC;
 
-	if (IS_ENABLED(CONFIG_MIGRATION) && (flags & TTU_MIGRATION) &&
-	    is_zone_device_page(page) && !is_device_private_page(page))
-		return true;
-
-	if (flags & TTU_SPLIT_HUGE_PMD) {
-		split_huge_pmd_address(vma, address,
-				flags & TTU_SPLIT_FREEZE, page);
-	}
+	if (flags & TTU_SPLIT_HUGE_PMD)
+		split_huge_pmd_address(vma, address, false, page);
 
 	/*
 	 * For THP, we have to assume the worse case ie pmd for invalidation.
@@ -1443,16 +1437,6 @@ static bool try_to_unmap_one(struct page
 	mmu_notifier_invalidate_range_start(&range);
 
 	while (page_vma_mapped_walk(&pvmw)) {
-#ifdef CONFIG_ARCH_ENABLE_THP_MIGRATION
-		/* PMD-mapped THP migration entry */
-		if (!pvmw.pte && (flags & TTU_MIGRATION)) {
-			VM_BUG_ON_PAGE(PageHuge(page) || !PageTransCompound(page), page);
-
-			set_pmd_migration_entry(&pvmw, page);
-			continue;
-		}
-#endif
-
 		/*
 		 * If the page is mlock()d, we cannot swap it out.
 		 * If it's recently referenced (perhaps page_referenced
@@ -1514,46 +1498,6 @@ static bool try_to_unmap_one(struct page
 			}
 		}
 
-		if (IS_ENABLED(CONFIG_MIGRATION) &&
-		    (flags & TTU_MIGRATION) &&
-		    is_zone_device_page(page)) {
-			swp_entry_t entry;
-			pte_t swp_pte;
-
-			pteval = ptep_get_and_clear(mm, pvmw.address, pvmw.pte);
-
-			/*
-			 * Store the pfn of the page in a special migration
-			 * pte. do_swap_page() will wait until the migration
-			 * pte is removed and then restart fault handling.
-			 */
-			entry = make_readable_migration_entry(page_to_pfn(page));
-			swp_pte = swp_entry_to_pte(entry);
-
-			/*
-			 * pteval maps a zone device page and is therefore
-			 * a swap pte.
-			 */
-			if (pte_swp_soft_dirty(pteval))
-				swp_pte = pte_swp_mksoft_dirty(swp_pte);
-			if (pte_swp_uffd_wp(pteval))
-				swp_pte = pte_swp_mkuffd_wp(swp_pte);
-			set_pte_at(mm, pvmw.address, pvmw.pte, swp_pte);
-			/*
-			 * No need to invalidate here it will synchronize on
-			 * against the special swap migration pte.
-			 *
-			 * The assignment to subpage above was computed from a
-			 * swap PTE which results in an invalid pointer.
-			 * Since only PAGE_SIZE pages can currently be
-			 * migrated, just set it to page. This will need to be
-			 * changed when hugepage migrations to device private
-			 * memory are supported.
-			 */
-			subpage = page;
-			goto discard;
-		}
-
 		/* Nuke the page table entry. */
 		flush_cache_page(vma, address, pte_pfn(*pvmw.pte));
 		if (should_defer_flush(mm, flags)) {
@@ -1606,39 +1550,6 @@ static bool try_to_unmap_one(struct page
 			/* We have to invalidate as we cleared the pte */
 			mmu_notifier_invalidate_range(mm, address,
 						      address + PAGE_SIZE);
-		} else if (IS_ENABLED(CONFIG_MIGRATION) &&
-				(flags & (TTU_MIGRATION|TTU_SPLIT_FREEZE))) {
-			swp_entry_t entry;
-			pte_t swp_pte;
-
-			if (arch_unmap_one(mm, vma, address, pteval) < 0) {
-				set_pte_at(mm, address, pvmw.pte, pteval);
-				ret = false;
-				page_vma_mapped_walk_done(&pvmw);
-				break;
-			}
-
-			/*
-			 * Store the pfn of the page in a special migration
-			 * pte. do_swap_page() will wait until the migration
-			 * pte is removed and then restart fault handling.
-			 */
-			if (pte_write(pteval))
-				entry = make_writable_migration_entry(
-							page_to_pfn(subpage));
-			else
-				entry = make_readable_migration_entry(
-							page_to_pfn(subpage));
-			swp_pte = swp_entry_to_pte(entry);
-			if (pte_soft_dirty(pteval))
-				swp_pte = pte_swp_mksoft_dirty(swp_pte);
-			if (pte_uffd_wp(pteval))
-				swp_pte = pte_swp_mkuffd_wp(swp_pte);
-			set_pte_at(mm, address, pvmw.pte, swp_pte);
-			/*
-			 * No need to invalidate here it will synchronize on
-			 * against the special swap migration pte.
-			 */
 		} else if (PageAnon(page)) {
 			swp_entry_t entry = { .val = page_private(subpage) };
 			pte_t swp_pte;
@@ -1766,6 +1677,277 @@ void try_to_unmap(struct page *page, enu
 		.anon_lock = page_lock_anon_vma_read,
 	};
 
+	if (flags & TTU_RMAP_LOCKED)
+		rmap_walk_locked(page, &rwc);
+	else
+		rmap_walk(page, &rwc);
+}
+
+/*
+ * @arg: enum ttu_flags will be passed to this argument.
+ *
+ * If TTU_SPLIT_HUGE_PMD is specified any PMD mappings will be split into PTEs
+ * containing migration entries. This and TTU_RMAP_LOCKED are the only supported
+ * flags.
+ */
+static bool try_to_migrate_one(struct page *page, struct vm_area_struct *vma,
+		     unsigned long address, void *arg)
+{
+	struct mm_struct *mm = vma->vm_mm;
+	struct page_vma_mapped_walk pvmw = {
+		.page = page,
+		.vma = vma,
+		.address = address,
+	};
+	pte_t pteval;
+	struct page *subpage;
+	bool ret = true;
+	struct mmu_notifier_range range;
+	enum ttu_flags flags = (enum ttu_flags)(long)arg;
+
+	if (is_zone_device_page(page) && !is_device_private_page(page))
+		return true;
+
+	/*
+	 * When racing against e.g. zap_pte_range() on another cpu,
+	 * in between its ptep_get_and_clear_full() and page_remove_rmap(),
+	 * try_to_migrate() may return before page_mapped() has become false,
+	 * if page table locking is skipped: use TTU_SYNC to wait for that.
+	 */
+	if (flags & TTU_SYNC)
+		pvmw.flags = PVMW_SYNC;
+
+	/*
+	 * unmap_page() in mm/huge_memory.c is the only user of migration with
+	 * TTU_SPLIT_HUGE_PMD and it wants to freeze.
+	 */
+	if (flags & TTU_SPLIT_HUGE_PMD)
+		split_huge_pmd_address(vma, address, true, page);
+
+	/*
+	 * For THP, we have to assume the worse case ie pmd for invalidation.
+	 * For hugetlb, it could be much worse if we need to do pud
+	 * invalidation in the case of pmd sharing.
+	 *
+	 * Note that the page can not be free in this function as call of
+	 * try_to_unmap() must hold a reference on the page.
+	 */
+	range.end = PageKsm(page) ?
+			address + PAGE_SIZE : vma_address_end(page, vma);
+	mmu_notifier_range_init(&range, MMU_NOTIFY_CLEAR, 0, vma, vma->vm_mm,
+				address, range.end);
+	if (PageHuge(page)) {
+		/*
+		 * If sharing is possible, start and end will be adjusted
+		 * accordingly.
+		 */
+		adjust_range_if_pmd_sharing_possible(vma, &range.start,
+						     &range.end);
+	}
+	mmu_notifier_invalidate_range_start(&range);
+
+	while (page_vma_mapped_walk(&pvmw)) {
+#ifdef CONFIG_ARCH_ENABLE_THP_MIGRATION
+		/* PMD-mapped THP migration entry */
+		if (!pvmw.pte) {
+			VM_BUG_ON_PAGE(PageHuge(page) ||
+				       !PageTransCompound(page), page);
+
+			set_pmd_migration_entry(&pvmw, page);
+			continue;
+		}
+#endif
+
+		/* Unexpected PMD-mapped THP? */
+		VM_BUG_ON_PAGE(!pvmw.pte, page);
+
+		subpage = page - page_to_pfn(page) + pte_pfn(*pvmw.pte);
+		address = pvmw.address;
+
+		if (PageHuge(page) && !PageAnon(page)) {
+			/*
+			 * To call huge_pmd_unshare, i_mmap_rwsem must be
+			 * held in write mode.  Caller needs to explicitly
+			 * do this outside rmap routines.
+			 */
+			VM_BUG_ON(!(flags & TTU_RMAP_LOCKED));
+			if (huge_pmd_unshare(mm, vma, &address, pvmw.pte)) {
+				/*
+				 * huge_pmd_unshare unmapped an entire PMD
+				 * page.  There is no way of knowing exactly
+				 * which PMDs may be cached for this mm, so
+				 * we must flush them all.  start/end were
+				 * already adjusted above to cover this range.
+				 */
+				flush_cache_range(vma, range.start, range.end);
+				flush_tlb_range(vma, range.start, range.end);
+				mmu_notifier_invalidate_range(mm, range.start,
+							      range.end);
+
+				/*
+				 * The ref count of the PMD page was dropped
+				 * which is part of the way map counting
+				 * is done for shared PMDs.  Return 'true'
+				 * here.  When there is no other sharing,
+				 * huge_pmd_unshare returns false and we will
+				 * unmap the actual page and drop map count
+				 * to zero.
+				 */
+				page_vma_mapped_walk_done(&pvmw);
+				break;
+			}
+		}
+
+		/* Nuke the page table entry. */
+		flush_cache_page(vma, address, pte_pfn(*pvmw.pte));
+		pteval = ptep_clear_flush(vma, address, pvmw.pte);
+
+		/* Move the dirty bit to the page. Now the pte is gone. */
+		if (pte_dirty(pteval))
+			set_page_dirty(page);
+
+		/* Update high watermark before we lower rss */
+		update_hiwater_rss(mm);
+
+		if (is_zone_device_page(page)) {
+			swp_entry_t entry;
+			pte_t swp_pte;
+
+			/*
+			 * Store the pfn of the page in a special migration
+			 * pte. do_swap_page() will wait until the migration
+			 * pte is removed and then restart fault handling.
+			 */
+			entry = make_readable_migration_entry(
+							page_to_pfn(page));
+			swp_pte = swp_entry_to_pte(entry);
+
+			/*
+			 * pteval maps a zone device page and is therefore
+			 * a swap pte.
+			 */
+			if (pte_swp_soft_dirty(pteval))
+				swp_pte = pte_swp_mksoft_dirty(swp_pte);
+			if (pte_swp_uffd_wp(pteval))
+				swp_pte = pte_swp_mkuffd_wp(swp_pte);
+			set_pte_at(mm, pvmw.address, pvmw.pte, swp_pte);
+			/*
+			 * No need to invalidate here it will synchronize on
+			 * against the special swap migration pte.
+			 *
+			 * The assignment to subpage above was computed from a
+			 * swap PTE which results in an invalid pointer.
+			 * Since only PAGE_SIZE pages can currently be
+			 * migrated, just set it to page. This will need to be
+			 * changed when hugepage migrations to device private
+			 * memory are supported.
+			 */
+			subpage = page;
+		} else if (PageHWPoison(page)) {
+			pteval = swp_entry_to_pte(make_hwpoison_entry(subpage));
+			if (PageHuge(page)) {
+				hugetlb_count_sub(compound_nr(page), mm);
+				set_huge_swap_pte_at(mm, address,
+						     pvmw.pte, pteval,
+						     vma_mmu_pagesize(vma));
+			} else {
+				dec_mm_counter(mm, mm_counter(page));
+				set_pte_at(mm, address, pvmw.pte, pteval);
+			}
+
+		} else if (pte_unused(pteval) && !userfaultfd_armed(vma)) {
+			/*
+			 * The guest indicated that the page content is of no
+			 * interest anymore. Simply discard the pte, vmscan
+			 * will take care of the rest.
+			 * A future reference will then fault in a new zero
+			 * page. When userfaultfd is active, we must not drop
+			 * this page though, as its main user (postcopy
+			 * migration) will not expect userfaults on already
+			 * copied pages.
+			 */
+			dec_mm_counter(mm, mm_counter(page));
+			/* We have to invalidate as we cleared the pte */
+			mmu_notifier_invalidate_range(mm, address,
+						      address + PAGE_SIZE);
+		} else {
+			swp_entry_t entry;
+			pte_t swp_pte;
+
+			if (arch_unmap_one(mm, vma, address, pteval) < 0) {
+				set_pte_at(mm, address, pvmw.pte, pteval);
+				ret = false;
+				page_vma_mapped_walk_done(&pvmw);
+				break;
+			}
+
+			/*
+			 * Store the pfn of the page in a special migration
+			 * pte. do_swap_page() will wait until the migration
+			 * pte is removed and then restart fault handling.
+			 */
+			if (pte_write(pteval))
+				entry = make_writable_migration_entry(
+							page_to_pfn(subpage));
+			else
+				entry = make_readable_migration_entry(
+							page_to_pfn(subpage));
+
+			swp_pte = swp_entry_to_pte(entry);
+			if (pte_soft_dirty(pteval))
+				swp_pte = pte_swp_mksoft_dirty(swp_pte);
+			if (pte_uffd_wp(pteval))
+				swp_pte = pte_swp_mkuffd_wp(swp_pte);
+			set_pte_at(mm, address, pvmw.pte, swp_pte);
+			/*
+			 * No need to invalidate here it will synchronize on
+			 * against the special swap migration pte.
+			 */
+		}
+
+		/*
+		 * No need to call mmu_notifier_invalidate_range() it has be
+		 * done above for all cases requiring it to happen under page
+		 * table lock before mmu_notifier_invalidate_range_end()
+		 *
+		 * See Documentation/vm/mmu_notifier.rst
+		 */
+		page_remove_rmap(subpage, PageHuge(page));
+		put_page(page);
+	}
+
+	mmu_notifier_invalidate_range_end(&range);
+
+	return ret;
+}
+
+/**
+ * try_to_migrate - try to replace all page table mappings with swap entries
+ * @page: the page to replace page table entries for
+ * @flags: action and flags
+ *
+ * Tries to remove all the page table entries which are mapping this page and
+ * replace them with special swap entries. Caller must hold the page lock.
+ *
+ * If is successful, return true. Otherwise, false.
+ */
+void try_to_migrate(struct page *page, enum ttu_flags flags)
+{
+	struct rmap_walk_control rwc = {
+		.rmap_one = try_to_migrate_one,
+		.arg = (void *)flags,
+		.done = page_not_mapped,
+		.anon_lock = page_lock_anon_vma_read,
+	};
+
+	/*
+	 * Migration always ignores mlock and only supports TTU_RMAP_LOCKED and
+	 * TTU_SPLIT_HUGE_PMD and TTU_SYNC flags.
+	 */
+	if (WARN_ON_ONCE(flags & ~(TTU_RMAP_LOCKED | TTU_SPLIT_HUGE_PMD |
+					TTU_SYNC)))
+		return;
+
 	/*
 	 * During exec, a temporary VMA is setup and later moved.
 	 * The VMA is moved under the anon_vma lock but not the
@@ -1774,8 +1956,7 @@ void try_to_unmap(struct page *page, enu
 	 * locking requirements of exec(), migration skips
 	 * temporary VMAs until after exec() completes.
 	 */
-	if ((flags & (TTU_MIGRATION|TTU_SPLIT_FREEZE))
-	    && !PageKsm(page) && PageAnon(page))
+	if (!PageKsm(page) && PageAnon(page))
 		rwc.invalid_vma = invalid_migration_vma;
 
 	if (flags & TTU_RMAP_LOCKED)
_


  parent reply	other threads:[~2021-07-01  1:54 UTC|newest]

Thread overview: 216+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-07-01  1:46 incoming Andrew Morton
2021-07-01  1:47 ` [patch 001/192] mm: memory_hotplug: factor out bootmem core functions to bootmem_info.c Andrew Morton
2021-07-01  1:47 ` [patch 002/192] mm: hugetlb: introduce a new config HUGETLB_PAGE_FREE_VMEMMAP Andrew Morton
2021-07-01  1:47 ` [patch 003/192] mm: hugetlb: gather discrete indexes of tail page Andrew Morton
2021-07-01  1:47 ` [patch 004/192] mm: hugetlb: free the vmemmap pages associated with each HugeTLB page Andrew Morton
2021-07-01  3:46   ` Linus Torvalds
2021-07-01  6:29     ` [External] " Muchun Song
2021-07-01 18:25       ` Linus Torvalds
2021-07-01  1:47 ` [patch 005/192] mm: hugetlb: defer freeing of HugeTLB pages Andrew Morton
2021-07-01  1:47 ` [patch 006/192] mm: hugetlb: alloc the vmemmap pages associated with each HugeTLB page Andrew Morton
2021-07-01  1:47 ` [patch 007/192] mm: hugetlb: add a kernel parameter hugetlb_free_vmemmap Andrew Morton
2021-07-01  1:47 ` [patch 008/192] mm: memory_hotplug: disable memmap_on_memory when hugetlb_free_vmemmap enabled Andrew Morton
2021-07-01  1:47 ` [patch 009/192] mm: hugetlb: introduce nr_free_vmemmap_pages in the struct hstate Andrew Morton
2021-07-01  1:47 ` [patch 010/192] mm/debug_vm_pgtable: move {pmd/pud}_huge_tests out of CONFIG_TRANSPARENT_HUGEPAGE Andrew Morton
2021-07-01  1:47 ` [patch 011/192] mm/debug_vm_pgtable: remove redundant pfn_{pmd/pte}() and fix one comment mistake Andrew Morton
2021-07-01  1:47 ` [patch 012/192] mm/huge_memory.c: remove dedicated macro HPAGE_CACHE_INDEX_MASK Andrew Morton
2021-07-01  1:47 ` [patch 013/192] mm/huge_memory.c: use page->deferred_list Andrew Morton
2021-07-01  1:47 ` [patch 014/192] mm/huge_memory.c: add missing read-only THP checking in transparent_hugepage_enabled() Andrew Morton
2021-07-01  1:47 ` [patch 015/192] mm/huge_memory.c: remove unnecessary tlb_remove_page_size() for huge zero pmd Andrew Morton
2021-07-01  1:47 ` [patch 016/192] mm/huge_memory.c: don't discard hugepage if other processes are mapping it Andrew Morton
2021-07-01  1:48 ` [patch 017/192] mm/hugetlb: change parameters of arch_make_huge_pte() Andrew Morton
2021-07-01  1:48 ` [patch 018/192] mm/pgtable: add stubs for {pmd/pub}_{set/clear}_huge Andrew Morton
2021-07-01  1:48 ` [patch 019/192] mm/vmalloc: enable mapping of huge pages at pte level in vmap Andrew Morton
2021-07-01  1:48 ` [patch 020/192] mm/vmalloc: enable mapping of huge pages at pte level in vmalloc Andrew Morton
2021-07-01  1:48 ` [patch 021/192] powerpc/8xx: add support for huge pages on VMAP and VMALLOC Andrew Morton
2021-07-01  1:48 ` [patch 022/192] khugepaged: selftests: remove debug_cow Andrew Morton
2021-07-01  1:48 ` [patch 023/192] mm, hugetlb: fix racy resv_huge_pages underflow on UFFDIO_COPY Andrew Morton
2021-07-12 14:48   ` Matthew Wilcox
2021-07-12 16:58     ` Mike Kravetz
2021-07-12 19:28       ` Mina Almasry
2021-07-01  1:48 ` [patch 024/192] mm: sparsemem: split the huge PMD mapping of vmemmap pages Andrew Morton
2021-07-01  1:48 ` [patch 025/192] mm: sparsemem: use huge PMD mapping for " Andrew Morton
2021-07-01  1:48 ` [patch 026/192] mm: hugetlb: introduce CONFIG_HUGETLB_PAGE_FREE_VMEMMAP_DEFAULT_ON Andrew Morton
2021-07-01  1:48 ` [patch 027/192] hugetlb: remove prep_compound_huge_page cleanup Andrew Morton
2021-07-01  1:48 ` [patch 028/192] hugetlb: address ref count racing in prep_compound_gigantic_page Andrew Morton
2021-07-01  1:48 ` [patch 029/192] mm/hwpoison: disable pcp for page_handle_poison() Andrew Morton
2021-07-01  1:48 ` [patch 030/192] userfaultfd/selftests: use user mode only Andrew Morton
2021-07-01  1:48 ` [patch 031/192] userfaultfd/selftests: remove the time() check on delayed uffd Andrew Morton
2021-07-01  1:48 ` [patch 032/192] userfaultfd/selftests: dropping VERIFY check in locking_thread Andrew Morton
2021-07-01  1:48 ` [patch 033/192] userfaultfd/selftests: only dump counts if mode enabled Andrew Morton
2021-07-01  1:48 ` [patch 034/192] userfaultfd/selftests: unify error handling Andrew Morton
2021-07-01  1:48 ` [patch 035/192] mm/thp: simplify copying of huge zero page pmd when fork Andrew Morton
2021-07-01  1:49 ` [patch 036/192] mm/userfaultfd: fix uffd-wp special cases for fork() Andrew Morton
2021-07-01  1:49 ` [patch 037/192] mm/userfaultfd: fail uffd-wp registration if not supported Andrew Morton
2021-07-01  1:49 ` [patch 038/192] mm/pagemap: export uffd-wp protection information Andrew Morton
2021-07-01  1:49 ` [patch 039/192] userfaultfd/selftests: add pagemap uffd-wp test Andrew Morton
2021-07-01  1:49 ` [patch 040/192] userfaultfd/shmem: combine shmem_{mcopy_atomic,mfill_zeropage}_pte Andrew Morton
2021-07-01  1:49 ` [patch 041/192] userfaultfd/shmem: support minor fault registration for shmem Andrew Morton
2021-07-01  1:49 ` [patch 042/192] userfaultfd/shmem: support UFFDIO_CONTINUE " Andrew Morton
2021-07-01  1:49 ` [patch 043/192] userfaultfd/shmem: advertise shmem minor fault support Andrew Morton
2021-07-01  1:49 ` [patch 044/192] userfaultfd/shmem: modify shmem_mfill_atomic_pte to use install_pte() Andrew Morton
2021-07-01  1:49 ` [patch 045/192] userfaultfd/selftests: use memfd_create for shmem test type Andrew Morton
2021-07-01  1:49 ` [patch 046/192] userfaultfd/selftests: create alias mappings in the shmem test Andrew Morton
2021-07-01  1:49 ` [patch 047/192] userfaultfd/selftests: reinitialize test context in each test Andrew Morton
2021-07-01  1:49 ` [patch 048/192] userfaultfd/selftests: exercise minor fault handling shmem support Andrew Morton
2021-07-01  1:49 ` [patch 049/192] mm/vmscan.c: fix potential deadlock in reclaim_pages() Andrew Morton
2021-07-01  1:49 ` [patch 050/192] include/trace/events/vmscan.h: remove mm_vmscan_inactive_list_is_low Andrew Morton
2021-07-01  1:49 ` [patch 051/192] mm: workingset: define macro WORKINGSET_SHIFT Andrew Morton
2021-07-01  1:49 ` [patch 052/192] mm/kconfig: move HOLES_IN_ZONE into mm Andrew Morton
2021-07-01  1:50 ` [patch 053/192] docs: proc.rst: meminfo: briefly describe gaps in memory accounting Andrew Morton
2021-07-01  1:50 ` [patch 054/192] fs/proc/kcore: drop KCORE_REMAP and KCORE_OTHER Andrew Morton
2021-07-01  1:50 ` [patch 055/192] fs/proc/kcore: pfn_is_ram check only applies to KCORE_RAM Andrew Morton
2021-07-01  1:50 ` [patch 056/192] fs/proc/kcore: don't read offline sections, logically offline pages and hwpoisoned pages Andrew Morton
2021-07-01  1:50 ` [patch 057/192] mm: introduce page_offline_(begin|end|freeze|thaw) to synchronize setting PageOffline() Andrew Morton
2021-07-01  1:50 ` [patch 058/192] virtio-mem: use page_offline_(start|end) when " Andrew Morton
2021-07-01  1:50 ` [patch 059/192] fs/proc/kcore: use page_offline_(freeze|thaw) Andrew Morton
2021-07-01  1:50 ` [patch 060/192] mm/z3fold: define macro NCHUNKS as TOTAL_CHUNKS - ZHDR_CHUNKS Andrew Morton
2021-07-01  1:50 ` [patch 061/192] mm/z3fold: avoid possible underflow in z3fold_alloc() Andrew Morton
2021-07-01  1:50 ` [patch 062/192] mm/z3fold: remove magic number in z3fold_create_pool() Andrew Morton
2021-07-01  1:50 ` [patch 063/192] mm/z3fold: remove unused function handle_to_z3fold_header() Andrew Morton
2021-07-01  1:50 ` [patch 064/192] mm/z3fold: fix potential memory leak in z3fold_destroy_pool() Andrew Morton
2021-07-01  1:50 ` [patch 065/192] mm/z3fold: use release_z3fold_page_locked() to release locked z3fold page Andrew Morton
2021-07-01  1:50 ` [patch 066/192] mm/zbud: reuse unbuddied[0] as buddied in zbud_pool Andrew Morton
2021-07-01  1:50 ` [patch 067/192] mm/zbud: don't export any zbud API Andrew Morton
2021-07-01  1:50 ` [patch 068/192] mm/compaction: use DEVICE_ATTR_WO macro Andrew Morton
2021-07-01  1:50 ` [patch 069/192] mm: compaction: remove duplicate !list_empty(&sublist) check Andrew Morton
2021-07-01  1:50 ` [patch 070/192] mm/compaction: fix 'limit' in fast_isolate_freepages Andrew Morton
2021-07-01  1:50 ` [patch 071/192] mm/mempolicy: cleanup nodemask intersection check for oom Andrew Morton
2021-07-01  1:51 ` [patch 072/192] mm/mempolicy: don't handle MPOL_LOCAL like a fake MPOL_PREFERRED policy Andrew Morton
2021-07-01  1:51 ` [patch 073/192] mm/mempolicy: unify the parameter sanity check for mbind and set_mempolicy Andrew Morton
2021-07-01  1:51 ` [patch 074/192] mm: mempolicy: don't have to split pmd for huge zero page Andrew Morton
2021-07-01  1:51 ` [patch 075/192] mm/mempolicy: use unified 'nodes' for bind/interleave/prefer policies Andrew Morton
2021-07-01  1:51 ` [patch 076/192] include/linux/mmzone.h: add documentation for pfn_valid() Andrew Morton
2021-07-01  1:51 ` [patch 077/192] memblock: update initialization of reserved pages Andrew Morton
2021-07-01  1:51 ` [patch 078/192] arm64: decouple check whether pfn is in linear map from pfn_valid() Andrew Morton
2021-07-01  1:51 ` [patch 079/192] arm64: drop pfn_valid_within() and simplify pfn_valid() Andrew Morton
2021-07-01  1:51 ` [patch 080/192] arm64/mm: drop HAVE_ARCH_PFN_VALID Andrew Morton
2021-07-01  1:51 ` [patch 081/192] mm: migrate: fix missing update page_private to hugetlb_page_subpool Andrew Morton
2021-07-01  1:51 ` [patch 082/192] mm, thp: relax the VM_DENYWRITE constraint on file-backed THPs Andrew Morton
2021-07-01  1:51 ` [patch 083/192] mm: memory: add orig_pmd to struct vm_fault Andrew Morton
2021-07-01  1:51 ` [patch 084/192] mm: memory: make numa_migrate_prep() non-static Andrew Morton
2021-07-01  1:51 ` [patch 085/192] mm: thp: refactor NUMA fault handling Andrew Morton
2021-07-01  1:51 ` [patch 086/192] mm: migrate: account THP NUMA migration counters correctly Andrew Morton
2021-07-01  1:51 ` [patch 087/192] mm: migrate: don't split THP for misplaced NUMA page Andrew Morton
2021-07-01  1:51 ` [patch 088/192] mm: migrate: check mapcount for THP instead of refcount Andrew Morton
2021-07-01  1:51 ` [patch 089/192] mm: thp: skip make PMD PROT_NONE if THP migration is not supported Andrew Morton
2021-07-01  1:51 ` [patch 090/192] mm/thp: make ARCH_ENABLE_SPLIT_PMD_PTLOCK dependent on PGTABLE_LEVELS > 2 Andrew Morton
2021-07-01  1:52 ` [patch 091/192] mm: rmap: make try_to_unmap() void function Andrew Morton
2021-07-01  1:52 ` [patch 092/192] mm/thp: remap_page() is only needed on anonymous THP Andrew Morton
2021-07-01  1:52 ` [patch 093/192] mm: hwpoison_user_mappings() try_to_unmap() with TTU_SYNC Andrew Morton
2021-07-01  1:52 ` [patch 094/192] mm/thp: fix strncpy warning Andrew Morton
2021-07-01  1:52 ` [patch 095/192] nommu: remove __GFP_HIGHMEM in vmalloc/vzalloc Andrew Morton
2021-07-01  1:52 ` [patch 096/192] mm/nommu: unexport do_munmap() Andrew Morton
2021-07-01  1:52 ` [patch 097/192] mm: generalize ZONE_[DMA|DMA32] Andrew Morton
2021-07-01  1:52 ` [patch 098/192] mm: make variable names for populate_vma_page_range() consistent Andrew Morton
2021-07-01  1:52 ` [patch 099/192] mm/madvise: introduce MADV_POPULATE_(READ|WRITE) to prefault page tables Andrew Morton
2021-07-01  1:52 ` [patch 100/192] MAINTAINERS: add tools/testing/selftests/vm/ to MEMORY MANAGEMENT Andrew Morton
2021-07-01  1:52 ` [patch 101/192] selftests/vm: add protection_keys_32 / protection_keys_64 to gitignore Andrew Morton
2021-07-01  1:52 ` [patch 102/192] selftests/vm: add test for MADV_POPULATE_(READ|WRITE) Andrew Morton
2021-07-01  1:52 ` [patch 103/192] mm/memory_hotplug: rate limit page migration warnings Andrew Morton
2021-07-01  1:52 ` [patch 104/192] mm,memory_hotplug: drop unneeded locking Andrew Morton
2021-07-01  1:52 ` [patch 105/192] mm/zswap.c: remove unused function zswap_debugfs_exit() Andrew Morton
2021-07-01  1:52 ` [patch 106/192] mm/zswap.c: avoid unnecessary copy-in at map time Andrew Morton
2021-07-01  1:52 ` [patch 107/192] mm/zswap.c: fix two bugs in zswap_writeback_entry() Andrew Morton
2021-07-01  1:52 ` [patch 108/192] mm: zram: amend SLAB_RECLAIM_ACCOUNT on zspage_cachep Andrew Morton
2021-07-01 14:55   ` Minchan Kim
2021-07-01 18:07     ` Linus Torvalds
2021-07-02  2:45     ` Zhaoyang Huang
2021-07-02  5:47       ` Minchan Kim
2021-07-02  6:20         ` Zhaoyang Huang
2021-07-02  7:33           ` Minchan Kim
2021-07-01  1:53 ` [patch 109/192] mm/zsmalloc.c: remove confusing code in obj_free() Andrew Morton
2021-07-01  1:53 ` [patch 110/192] mm/zsmalloc.c: improve readability for async_free_zspage() Andrew Morton
2021-07-01  1:53 ` [patch 111/192] zram: move backing_dev under macro CONFIG_ZRAM_WRITEBACK Andrew Morton
2021-07-01  1:53 ` [patch 112/192] mm: fix typos and grammar error in comments Andrew Morton
2021-07-01  1:53 ` [patch 113/192] mm: define default value for FIRST_USER_ADDRESS Andrew Morton
2021-07-01  1:53 ` [patch 114/192] mm: fix spelling mistakes Andrew Morton
2021-07-01  1:53 ` [patch 115/192] mm/vmscan: remove kerneldoc-like comment from isolate_lru_pages Andrew Morton
2021-07-01  1:53 ` [patch 116/192] mm/vmalloc: include header for prototype of set_iounmap_nonlazy Andrew Morton
2021-07-01  1:53 ` [patch 117/192] mm/page_alloc: make should_fail_alloc_page() static Andrew Morton
2021-07-01  1:53 ` [patch 118/192] mm/mapping_dirty_helpers: remove double Note in kerneldoc Andrew Morton
2021-07-01  1:53 ` [patch 119/192] mm/memcontrol.c: fix kerneldoc comment for mem_cgroup_calculate_protection Andrew Morton
2021-07-01  1:53 ` [patch 120/192] mm/memory_hotplug: fix kerneldoc comment for __try_online_node Andrew Morton
2021-07-01  1:53 ` [patch 121/192] mm/memory_hotplug: fix kerneldoc comment for __remove_memory Andrew Morton
2021-07-01  1:53 ` [patch 122/192] mm/zbud: add kerneldoc fields for zbud_pool Andrew Morton
2021-07-01  1:53 ` [patch 123/192] mm/z3fold: add kerneldoc fields for z3fold_pool Andrew Morton
2021-07-01  1:53 ` [patch 124/192] mm/swap: make swap_address_space an inline function Andrew Morton
2021-07-01  1:53 ` [patch 125/192] mm/mmap_lock: remove dead code for !CONFIG_TRACING configurations Andrew Morton
2021-07-01  1:53 ` [patch 126/192] mm/page_alloc: move prototype for find_suitable_fallback Andrew Morton
2021-07-01  1:53 ` [patch 127/192] mm/swap: make NODE_DATA an inline function on CONFIG_FLATMEM Andrew Morton
2021-07-01  1:53 ` [patch 128/192] mm/thp: define default pmd_pgtable() Andrew Morton
2021-07-01  1:54 ` [patch 129/192] kfence: unconditionally use unbound work queue Andrew Morton
2021-07-01  1:54 ` [patch 130/192] mm: remove special swap entry functions Andrew Morton
2021-07-01  1:54 ` [patch 131/192] mm/swapops: rework swap entry manipulation code Andrew Morton
2021-07-01  1:54 ` [patch 132/192] mm/rmap: split try_to_munlock from try_to_unmap Andrew Morton
2021-07-01  1:54 ` Andrew Morton [this message]
2021-07-01  1:54 ` [patch 134/192] mm: rename migrate_pgmap_owner Andrew Morton
2021-07-01  1:54 ` [patch 135/192] mm/memory.c: allow different return codes for copy_nonpresent_pte() Andrew Morton
2021-07-01  1:54 ` [patch 136/192] mm: device exclusive memory access Andrew Morton
2021-07-01  1:54 ` [patch 137/192] mm: selftests for exclusive device memory Andrew Morton
2021-07-01  1:54 ` [patch 138/192] nouveau/svm: refactor nouveau_range_fault Andrew Morton
2021-07-01  1:54 ` [patch 139/192] nouveau/svm: implement atomic SVM access Andrew Morton
2021-07-01  1:54 ` [patch 140/192] proc: Avoid mixing integer types in mem_rw() Andrew Morton
2021-07-01  1:54 ` [patch 141/192] fs/proc/kcore.c: add mmap interface Andrew Morton
2021-07-01  3:32   ` Linus Torvalds
2021-07-01  6:35     ` [External] " zhoufeng
2021-07-01  1:54 ` [patch 142/192] procfs: allow reading fdinfo with PTRACE_MODE_READ Andrew Morton
2021-07-02 14:54   ` Christian Brauner
2021-07-02 18:43   ` Kees Cook
2021-07-02 19:00     ` Linus Torvalds
2021-07-02 20:40       ` Eric W. Biederman
2021-07-02 23:31         ` Kees Cook
2021-07-03  0:15           ` Linus Torvalds
2021-07-03 21:43             ` Eric W. Biederman
2021-07-01  1:54 ` [patch 143/192] procfs/dmabuf: add inode number to /proc/*/fdinfo Andrew Morton
2021-07-01  1:54 ` [patch 144/192] sysctl: remove redundant assignment to first Andrew Morton
2021-07-01  1:54 ` [patch 145/192] drm: include only needed headers in ascii85.h Andrew Morton
2021-07-01  1:54 ` [patch 146/192] kernel.h: split out panic and oops helpers Andrew Morton
2021-07-01  1:55 ` [patch 147/192] lib: decompress_bunzip2: remove an unneeded semicolon Andrew Morton
2021-07-01  1:55 ` [patch 148/192] lib/string_helpers: switch to use BIT() macro Andrew Morton
2021-07-01  1:55 ` [patch 149/192] lib/string_helpers: move ESCAPE_NP check inside 'else' branch in a loop Andrew Morton
2021-07-01  1:55 ` [patch 150/192] lib/string_helpers: drop indentation level in string_escape_mem() Andrew Morton
2021-07-01  1:55 ` [patch 151/192] lib/string_helpers: introduce ESCAPE_NA for escaping non-ASCII Andrew Morton
2021-07-01  1:55 ` [patch 152/192] lib/string_helpers: introduce ESCAPE_NAP to escape non-ASCII and non-printable Andrew Morton
2021-07-01  1:55 ` [patch 153/192] lib/string_helpers: allow to append additional characters to be escaped Andrew Morton
2021-07-01  1:55 ` [patch 154/192] lib/test-string_helpers: print flags in hexadecimal format Andrew Morton
2021-07-01  1:55 ` [patch 155/192] lib/test-string_helpers: get rid of trailing comma in terminators Andrew Morton
2021-07-01  1:55 ` [patch 156/192] lib/test-string_helpers: add test cases for new features Andrew Morton
2021-07-01  1:55 ` [patch 157/192] MAINTAINERS: add myself as designated reviewer for generic string library Andrew Morton
2021-07-01  1:55 ` [patch 158/192] seq_file: introduce seq_escape_mem() Andrew Morton
2021-07-01  1:55 ` [patch 159/192] seq_file: add seq_escape_str() as replica of string_escape_str() Andrew Morton
2021-07-01  1:55 ` [patch 160/192] seq_file: convert seq_escape() to use seq_escape_str() Andrew Morton
2021-07-01  1:55 ` [patch 161/192] nfsd: avoid non-flexible API in seq_quote_mem() Andrew Morton
2021-07-01  1:55 ` [patch 162/192] seq_file: drop unused *_escape_mem_ascii() Andrew Morton
2021-07-01  1:55 ` [patch 163/192] lib/math/rational.c: fix divide by zero Andrew Morton
2021-07-01  1:55 ` [patch 164/192] lib/math/rational: add Kunit test cases Andrew Morton
2021-07-01  1:55 ` [patch 165/192] lib/decompressors: fix spelling mistakes Andrew Morton
2021-07-01  1:55 ` [patch 166/192] lib/mpi: " Andrew Morton
2021-07-01  1:56 ` [patch 167/192] lib: memscan() fixlet Andrew Morton
2021-07-01  1:56 ` [patch 168/192] lib: uninline simple_strtoull() Andrew Morton
2021-07-01  1:56 ` [patch 169/192] lib/test_string.c: allow module removal Andrew Morton
2021-07-01  1:56 ` [patch 170/192] kernel.h: split out kstrtox() and simple_strtox() to a separate header Andrew Morton
2021-07-01  1:56 ` [patch 171/192] lz4_decompress: declare LZ4_decompress_safe_withPrefix64k static Andrew Morton
2021-07-01  1:56 ` [patch 172/192] lib/decompress_unlz4.c: correctly handle zero-padding around initrds Andrew Morton
2021-07-01  1:56 ` [patch 173/192] checkpatch: scripts/spdxcheck.py now requires python3 Andrew Morton
2021-07-01  1:56 ` [patch 174/192] checkpatch: improve the indented label test Andrew Morton
2021-07-01  1:56 ` [patch 175/192] checkpatch: do not complain about positive return values starting with EPOLL Andrew Morton
2021-07-01  1:56 ` [patch 176/192] init: print out unknown kernel parameters Andrew Morton
2021-07-01  1:56 ` [patch 177/192] kprobes: remove duplicated strong free_insn_page in x86 and s390 Andrew Morton
2021-07-01  1:56 ` [patch 178/192] nilfs2: remove redundant continue statement in a while-loop Andrew Morton
2021-07-01  1:56 ` [patch 179/192] hfsplus: remove unnecessary oom message Andrew Morton
2021-07-01  1:56 ` [patch 180/192] hfsplus: report create_date to kstat.btime Andrew Morton
2021-07-01  1:56 ` [patch 181/192] x86: signal: don't do sas_ss_reset() until we are certain that sigframe won't be abandoned Andrew Morton
2021-07-01  1:56 ` [patch 182/192] exec: remove checks in __register_bimfmt() Andrew Morton
2021-07-01  1:56 ` [patch 183/192] kcov: add __no_sanitize_coverage to fix noinstr for all architectures Andrew Morton
2021-07-01  1:56 ` [patch 184/192] selftests/vm/pkeys: fix alloc_random_pkey() to make it really, really random Andrew Morton
2021-07-01  1:56 ` [patch 185/192] selftests/vm/pkeys: handle negative sys_pkey_alloc() return code Andrew Morton
2021-07-01  1:56 ` [patch 186/192] selftests/vm/pkeys: refill shadow register after implicit kernel write Andrew Morton
2021-07-01  1:57 ` [patch 187/192] selftests/vm/pkeys: exercise x86 XSAVE init state Andrew Morton
2021-07-01  1:57 ` [patch 188/192] lib/decompressors: remove set but not used variabled 'level' Andrew Morton
2021-07-01  1:57 ` [patch 189/192] ipc sem: use kvmalloc for sem_undo allocation Andrew Morton
2021-07-01  1:57 ` [patch 190/192] ipc: use kmalloc for msg_queue and shmid_kernel Andrew Morton
2021-07-01  1:57 ` [patch 191/192] ipc/sem.c: use READ_ONCE()/WRITE_ONCE() for use_global_lock Andrew Morton
2021-07-01  1:57 ` [patch 192/192] ipc/util.c: use binary search for max_idx Andrew Morton
2021-07-03  0:28 ` incoming Linus Torvalds
2021-07-03  1:06   ` incoming Linus Torvalds

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=20210701015416.0t4MkxtDR%akpm@linux-foundation.org \
    --to=akpm@linux-foundation.org \
    --cc=apopple@nvidia.com \
    --cc=bskeggs@redhat.com \
    --cc=hch@lst.de \
    --cc=hughd@google.com \
    --cc=jgg@nvidia.com \
    --cc=jhubbard@nvidia.com \
    --cc=linux-mm@kvack.org \
    --cc=mm-commits@vger.kernel.org \
    --cc=peterx@redhat.com \
    --cc=rcampbell@nvidia.com \
    --cc=shakeelb@google.com \
    --cc=torvalds@linux-foundation.org \
    --cc=willy@infradead.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).