linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2 0/4] Cleanup and fixup for khugepaged
@ 2021-03-06  3:29 Miaohe Lin
  2021-03-06  3:29 ` [PATCH v2 1/4] khugepaged: remove unneeded return value of khugepaged_collapse_pte_mapped_thps() Miaohe Lin
                   ` (3 more replies)
  0 siblings, 4 replies; 5+ messages in thread
From: Miaohe Lin @ 2021-03-06  3:29 UTC (permalink / raw)
  To: akpm, kirill.shutemov
  Cc: riel, ebru.akagunduz, dan.carpenter, linux-kernel, linux-mm, linmiaohe

Hi all,
This series contains cleanups to remove unneeded return value, use
helper function and so on. And there is one fix to correct the wrong
result value for trace_mm_collapse_huge_page_isolate().

More details can be found in the respective changelogs. Thanks!

v1->v2:
    drop patch "khugepaged: remove unnecessary mem_cgroup_uncharge() in
collapse_[file|huge_page]"
    collect Acked-by

Miaohe Lin (4):
  khugepaged: remove unneeded return value of
    khugepaged_collapse_pte_mapped_thps()
  khugepaged: reuse the smp_wmb() inside __SetPageUptodate()
  khugepaged: use helper khugepaged_test_exit() in __khugepaged_enter()
  khugepaged: fix wrong result value for
    trace_mm_collapse_huge_page_isolate()

 mm/khugepaged.c | 43 ++++++++++++++++++++-----------------------
 1 file changed, 20 insertions(+), 23 deletions(-)

-- 
2.19.1


^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH v2 1/4] khugepaged: remove unneeded return value of khugepaged_collapse_pte_mapped_thps()
  2021-03-06  3:29 [PATCH v2 0/4] Cleanup and fixup for khugepaged Miaohe Lin
@ 2021-03-06  3:29 ` Miaohe Lin
  2021-03-06  3:29 ` [PATCH v2 2/4] khugepaged: reuse the smp_wmb() inside __SetPageUptodate() Miaohe Lin
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 5+ messages in thread
From: Miaohe Lin @ 2021-03-06  3:29 UTC (permalink / raw)
  To: akpm, kirill.shutemov
  Cc: riel, ebru.akagunduz, dan.carpenter, linux-kernel, linux-mm, linmiaohe

The return value of khugepaged_collapse_pte_mapped_thps() is never checked
since it's introduced. We should remove such unneeded return value.

Signed-off-by: Miaohe Lin <linmiaohe@huawei.com>
Acked-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
---
 mm/khugepaged.c | 10 ++++------
 1 file changed, 4 insertions(+), 6 deletions(-)

diff --git a/mm/khugepaged.c b/mm/khugepaged.c
index a7d6cb912b05..d43812c5ce16 100644
--- a/mm/khugepaged.c
+++ b/mm/khugepaged.c
@@ -1533,16 +1533,16 @@ void collapse_pte_mapped_thp(struct mm_struct *mm, unsigned long addr)
 	goto drop_hpage;
 }
 
-static int khugepaged_collapse_pte_mapped_thps(struct mm_slot *mm_slot)
+static void khugepaged_collapse_pte_mapped_thps(struct mm_slot *mm_slot)
 {
 	struct mm_struct *mm = mm_slot->mm;
 	int i;
 
 	if (likely(mm_slot->nr_pte_mapped_thp == 0))
-		return 0;
+		return;
 
 	if (!mmap_write_trylock(mm))
-		return -EBUSY;
+		return;
 
 	if (unlikely(khugepaged_test_exit(mm)))
 		goto out;
@@ -1553,7 +1553,6 @@ static int khugepaged_collapse_pte_mapped_thps(struct mm_slot *mm_slot)
 out:
 	mm_slot->nr_pte_mapped_thp = 0;
 	mmap_write_unlock(mm);
-	return 0;
 }
 
 static void retract_page_tables(struct address_space *mapping, pgoff_t pgoff)
@@ -2057,9 +2056,8 @@ static void khugepaged_scan_file(struct mm_struct *mm,
 	BUILD_BUG();
 }
 
-static int khugepaged_collapse_pte_mapped_thps(struct mm_slot *mm_slot)
+static void khugepaged_collapse_pte_mapped_thps(struct mm_slot *mm_slot)
 {
-	return 0;
 }
 #endif
 
-- 
2.19.1


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH v2 2/4] khugepaged: reuse the smp_wmb() inside __SetPageUptodate()
  2021-03-06  3:29 [PATCH v2 0/4] Cleanup and fixup for khugepaged Miaohe Lin
  2021-03-06  3:29 ` [PATCH v2 1/4] khugepaged: remove unneeded return value of khugepaged_collapse_pte_mapped_thps() Miaohe Lin
@ 2021-03-06  3:29 ` Miaohe Lin
  2021-03-06  3:29 ` [PATCH v2 3/4] khugepaged: use helper khugepaged_test_exit() in __khugepaged_enter() Miaohe Lin
  2021-03-06  3:29 ` [PATCH v2 4/4] khugepaged: fix wrong result value for trace_mm_collapse_huge_page_isolate() Miaohe Lin
  3 siblings, 0 replies; 5+ messages in thread
From: Miaohe Lin @ 2021-03-06  3:29 UTC (permalink / raw)
  To: akpm, kirill.shutemov
  Cc: riel, ebru.akagunduz, dan.carpenter, linux-kernel, linux-mm, linmiaohe

smp_wmb() is needed to avoid the copy_huge_page writes to become visible
after the set_pmd_at() write here. But we can reuse the smp_wmb() inside
__SetPageUptodate() to remove this redundant one.

Signed-off-by: Miaohe Lin <linmiaohe@huawei.com>
Acked-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
---
 mm/khugepaged.c | 13 ++++++-------
 1 file changed, 6 insertions(+), 7 deletions(-)

diff --git a/mm/khugepaged.c b/mm/khugepaged.c
index d43812c5ce16..287e7ecf978c 100644
--- a/mm/khugepaged.c
+++ b/mm/khugepaged.c
@@ -1183,19 +1183,18 @@ static void collapse_huge_page(struct mm_struct *mm,
 	__collapse_huge_page_copy(pte, new_page, vma, address, pte_ptl,
 			&compound_pagelist);
 	pte_unmap(pte);
+	/*
+	 * spin_lock() below is not the equivalent of smp_wmb(), but
+	 * the smp_wmb() inside __SetPageUptodate() can be reused to
+	 * avoid the copy_huge_page writes to become visible after
+	 * the set_pmd_at() write.
+	 */
 	__SetPageUptodate(new_page);
 	pgtable = pmd_pgtable(_pmd);
 
 	_pmd = mk_huge_pmd(new_page, vma->vm_page_prot);
 	_pmd = maybe_pmd_mkwrite(pmd_mkdirty(_pmd), vma);
 
-	/*
-	 * spin_lock() below is not the equivalent of smp_wmb(), so
-	 * this is needed to avoid the copy_huge_page writes to become
-	 * visible after the set_pmd_at() write.
-	 */
-	smp_wmb();
-
 	spin_lock(pmd_ptl);
 	BUG_ON(!pmd_none(*pmd));
 	page_add_new_anon_rmap(new_page, vma, address, true);
-- 
2.19.1


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH v2 3/4] khugepaged: use helper khugepaged_test_exit() in __khugepaged_enter()
  2021-03-06  3:29 [PATCH v2 0/4] Cleanup and fixup for khugepaged Miaohe Lin
  2021-03-06  3:29 ` [PATCH v2 1/4] khugepaged: remove unneeded return value of khugepaged_collapse_pte_mapped_thps() Miaohe Lin
  2021-03-06  3:29 ` [PATCH v2 2/4] khugepaged: reuse the smp_wmb() inside __SetPageUptodate() Miaohe Lin
@ 2021-03-06  3:29 ` Miaohe Lin
  2021-03-06  3:29 ` [PATCH v2 4/4] khugepaged: fix wrong result value for trace_mm_collapse_huge_page_isolate() Miaohe Lin
  3 siblings, 0 replies; 5+ messages in thread
From: Miaohe Lin @ 2021-03-06  3:29 UTC (permalink / raw)
  To: akpm, kirill.shutemov
  Cc: riel, ebru.akagunduz, dan.carpenter, linux-kernel, linux-mm, linmiaohe

Commit 4d45e75a9955 ("mm: remove the now-unnecessary mmget_still_valid()
hack") have made khugepaged_test_exit() suitable for check mm->mm_users
against 0. Use this helper here.

Signed-off-by: Miaohe Lin <linmiaohe@huawei.com>
Acked-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
---
 mm/khugepaged.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/mm/khugepaged.c b/mm/khugepaged.c
index 287e7ecf978c..e886a8618c33 100644
--- a/mm/khugepaged.c
+++ b/mm/khugepaged.c
@@ -481,7 +481,7 @@ int __khugepaged_enter(struct mm_struct *mm)
 		return -ENOMEM;
 
 	/* __khugepaged_exit() must not run from under us */
-	VM_BUG_ON_MM(atomic_read(&mm->mm_users) == 0, mm);
+	VM_BUG_ON_MM(khugepaged_test_exit(mm), mm);
 	if (unlikely(test_and_set_bit(MMF_VM_HUGEPAGE, &mm->flags))) {
 		free_mm_slot(mm_slot);
 		return 0;
-- 
2.19.1


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH v2 4/4] khugepaged: fix wrong result value for trace_mm_collapse_huge_page_isolate()
  2021-03-06  3:29 [PATCH v2 0/4] Cleanup and fixup for khugepaged Miaohe Lin
                   ` (2 preceding siblings ...)
  2021-03-06  3:29 ` [PATCH v2 3/4] khugepaged: use helper khugepaged_test_exit() in __khugepaged_enter() Miaohe Lin
@ 2021-03-06  3:29 ` Miaohe Lin
  3 siblings, 0 replies; 5+ messages in thread
From: Miaohe Lin @ 2021-03-06  3:29 UTC (permalink / raw)
  To: akpm, kirill.shutemov
  Cc: riel, ebru.akagunduz, dan.carpenter, linux-kernel, linux-mm, linmiaohe

In writable and !referenced case, the result value should be
SCAN_LACK_REFERENCED_PAGE for trace_mm_collapse_huge_page_isolate()
instead of default 0 (SCAN_FAIL) here.

Fixes: 7d2eba0557c1 ("mm: add tracepoint for scanning pages")
Signed-off-by: Miaohe Lin <linmiaohe@huawei.com>
Acked-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
---
 mm/khugepaged.c | 18 +++++++++---------
 1 file changed, 9 insertions(+), 9 deletions(-)

diff --git a/mm/khugepaged.c b/mm/khugepaged.c
index e886a8618c33..adf677246d86 100644
--- a/mm/khugepaged.c
+++ b/mm/khugepaged.c
@@ -716,17 +716,17 @@ static int __collapse_huge_page_isolate(struct vm_area_struct *vma,
 		if (pte_write(pteval))
 			writable = true;
 	}
-	if (likely(writable)) {
-		if (likely(referenced)) {
-			result = SCAN_SUCCEED;
-			trace_mm_collapse_huge_page_isolate(page, none_or_zero,
-							    referenced, writable, result);
-			return 1;
-		}
-	} else {
+
+	if (unlikely(!writable)) {
 		result = SCAN_PAGE_RO;
+	} else if (unlikely(!referenced)) {
+		result = SCAN_LACK_REFERENCED_PAGE;
+	} else {
+		result = SCAN_SUCCEED;
+		trace_mm_collapse_huge_page_isolate(page, none_or_zero,
+						    referenced, writable, result);
+		return 1;
 	}
-
 out:
 	release_pte_pages(pte, _pte, compound_pagelist);
 	trace_mm_collapse_huge_page_isolate(page, none_or_zero,
-- 
2.19.1


^ permalink raw reply related	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2021-03-06  3:31 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-03-06  3:29 [PATCH v2 0/4] Cleanup and fixup for khugepaged Miaohe Lin
2021-03-06  3:29 ` [PATCH v2 1/4] khugepaged: remove unneeded return value of khugepaged_collapse_pte_mapped_thps() Miaohe Lin
2021-03-06  3:29 ` [PATCH v2 2/4] khugepaged: reuse the smp_wmb() inside __SetPageUptodate() Miaohe Lin
2021-03-06  3:29 ` [PATCH v2 3/4] khugepaged: use helper khugepaged_test_exit() in __khugepaged_enter() Miaohe Lin
2021-03-06  3:29 ` [PATCH v2 4/4] khugepaged: fix wrong result value for trace_mm_collapse_huge_page_isolate() Miaohe Lin

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).