linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 1/2] MADVISE_FREE, THP: Fix madvise_free_huge_pmd return value after splitting
@ 2016-06-28 17:36 Huang, Ying
  2016-06-28 17:36 ` [PATCH 2/2] mm, THP: Clean up return value of madvise_free_huge_pmd Huang, Ying
  2016-06-29  7:26 ` [PATCH 1/2] MADVISE_FREE, THP: Fix madvise_free_huge_pmd return value after splitting Minchan Kim
  0 siblings, 2 replies; 4+ messages in thread
From: Huang, Ying @ 2016-06-28 17:36 UTC (permalink / raw)
  To: Andrew Morton
  Cc: Huang Ying, Minchan Kim, Kirill A. Shutemov, Vlastimil Babka,
	Jerome Marchand, Andrea Arcangeli, Ebru Akagunduz, linux-mm,
	linux-kernel

From: Huang Ying <ying.huang@intel.com>

madvise_free_huge_pmd should return 0 if the fallback PTE operations are
required.  In madvise_free_huge_pmd, if part pages of THP are discarded,
the THP will be split and fallback PTE operations should be used if
splitting succeeds.  But the original code will make fallback PTE
operations skipped, after splitting succeeds.  Fix that via make
madvise_free_huge_pmd return 0 after splitting successfully, so that the
fallback PTE operations will be done.

Cc: Minchan Kim <minchan@kernel.org>
Signed-off-by: "Huang, Ying" <ying.huang@intel.com>
---
 mm/huge_memory.c | 7 +------
 1 file changed, 1 insertion(+), 6 deletions(-)

diff --git a/mm/huge_memory.c b/mm/huge_memory.c
index 848c16c..546cd21 100644
--- a/mm/huge_memory.c
+++ b/mm/huge_memory.c
@@ -1287,14 +1287,9 @@ int madvise_free_huge_pmd(struct mmu_gather *tlb, struct vm_area_struct *vma,
 	if (next - addr != HPAGE_PMD_SIZE) {
 		get_page(page);
 		spin_unlock(ptl);
-		if (split_huge_page(page)) {
-			put_page(page);
-			unlock_page(page);
-			goto out_unlocked;
-		}
+		split_huge_page(page);
 		put_page(page);
 		unlock_page(page);
-		ret = 1;
 		goto out_unlocked;
 	}
 
-- 
2.8.1

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

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

* [PATCH 2/2] mm, THP: Clean up return value of madvise_free_huge_pmd
  2016-06-28 17:36 [PATCH 1/2] MADVISE_FREE, THP: Fix madvise_free_huge_pmd return value after splitting Huang, Ying
@ 2016-06-28 17:36 ` Huang, Ying
  2016-06-29  7:27   ` Minchan Kim
  2016-06-29  7:26 ` [PATCH 1/2] MADVISE_FREE, THP: Fix madvise_free_huge_pmd return value after splitting Minchan Kim
  1 sibling, 1 reply; 4+ messages in thread
From: Huang, Ying @ 2016-06-28 17:36 UTC (permalink / raw)
  To: Andrew Morton
  Cc: Huang Ying, Minchan Kim, Kirill A. Shutemov, Jerome Marchand,
	Matthew Wilcox, Vlastimil Babka, Dan Williams, Mel Gorman,
	Andrea Arcangeli, Ebru Akagunduz, linux-kernel, linux-mm

From: Huang Ying <ying.huang@intel.com>

The definition of return value of madvise_free_huge_pmd is not clear
before.  According to the suggestion of Minchan Kim, change the type of
return value to bool and return true if we do MADV_FREE successfully on
entire pmd page, otherwise, return false.  Comments are added too.

Cc: Minchan Kim <minchan@kernel.org>
Signed-off-by: "Huang, Ying" <ying.huang@intel.com>
---
 include/linux/huge_mm.h |  2 +-
 mm/huge_memory.c        | 15 ++++++++-------
 2 files changed, 9 insertions(+), 8 deletions(-)

diff --git a/include/linux/huge_mm.h b/include/linux/huge_mm.h
index eb81081..db97784 100644
--- a/include/linux/huge_mm.h
+++ b/include/linux/huge_mm.h
@@ -11,7 +11,7 @@ extern struct page *follow_trans_huge_pmd(struct vm_area_struct *vma,
 					  unsigned long addr,
 					  pmd_t *pmd,
 					  unsigned int flags);
-extern int madvise_free_huge_pmd(struct mmu_gather *tlb,
+extern bool madvise_free_huge_pmd(struct mmu_gather *tlb,
 			struct vm_area_struct *vma,
 			pmd_t *pmd, unsigned long addr, unsigned long next);
 extern int zap_huge_pmd(struct mmu_gather *tlb,
diff --git a/mm/huge_memory.c b/mm/huge_memory.c
index 546cd21..d2a5224 100644
--- a/mm/huge_memory.c
+++ b/mm/huge_memory.c
@@ -1249,25 +1249,26 @@ out:
 	return 0;
 }
 
-int madvise_free_huge_pmd(struct mmu_gather *tlb, struct vm_area_struct *vma,
+/*
+ * Return true if we do MADV_FREE successfully on entire pmd page.
+ * Otherwise, return false.
+ */
+bool madvise_free_huge_pmd(struct mmu_gather *tlb, struct vm_area_struct *vma,
 		pmd_t *pmd, unsigned long addr, unsigned long next)
-
 {
 	spinlock_t *ptl;
 	pmd_t orig_pmd;
 	struct page *page;
 	struct mm_struct *mm = tlb->mm;
-	int ret = 0;
+	bool ret = false;
 
 	ptl = pmd_trans_huge_lock(pmd, vma);
 	if (!ptl)
 		goto out_unlocked;
 
 	orig_pmd = *pmd;
-	if (is_huge_zero_pmd(orig_pmd)) {
-		ret = 1;
+	if (is_huge_zero_pmd(orig_pmd))
 		goto out;
-	}
 
 	page = pmd_page(orig_pmd);
 	/*
@@ -1309,7 +1310,7 @@ int madvise_free_huge_pmd(struct mmu_gather *tlb, struct vm_area_struct *vma,
 		set_pmd_at(mm, addr, pmd, orig_pmd);
 		tlb_remove_pmd_tlb_entry(tlb, pmd, addr);
 	}
-	ret = 1;
+	ret = true;
 out:
 	spin_unlock(ptl);
 out_unlocked:
-- 
2.8.1

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

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

* Re: [PATCH 1/2] MADVISE_FREE, THP: Fix madvise_free_huge_pmd return value after splitting
  2016-06-28 17:36 [PATCH 1/2] MADVISE_FREE, THP: Fix madvise_free_huge_pmd return value after splitting Huang, Ying
  2016-06-28 17:36 ` [PATCH 2/2] mm, THP: Clean up return value of madvise_free_huge_pmd Huang, Ying
@ 2016-06-29  7:26 ` Minchan Kim
  1 sibling, 0 replies; 4+ messages in thread
From: Minchan Kim @ 2016-06-29  7:26 UTC (permalink / raw)
  To: Huang, Ying
  Cc: Andrew Morton, Kirill A. Shutemov, Vlastimil Babka,
	Jerome Marchand, Andrea Arcangeli, Ebru Akagunduz, linux-mm,
	linux-kernel

On Tue, Jun 28, 2016 at 10:36:29AM -0700, Huang, Ying wrote:
> From: Huang Ying <ying.huang@intel.com>
> 
> madvise_free_huge_pmd should return 0 if the fallback PTE operations are
> required.  In madvise_free_huge_pmd, if part pages of THP are discarded,
> the THP will be split and fallback PTE operations should be used if
> splitting succeeds.  But the original code will make fallback PTE
> operations skipped, after splitting succeeds.  Fix that via make
> madvise_free_huge_pmd return 0 after splitting successfully, so that the
> fallback PTE operations will be done.
> 
> Cc: Minchan Kim <minchan@kernel.org>
> Signed-off-by: "Huang, Ying" <ying.huang@intel.com>
Acked-by: Minchan Kim <minchan@kernel.org>

Thanks!

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

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

* Re: [PATCH 2/2] mm, THP: Clean up return value of madvise_free_huge_pmd
  2016-06-28 17:36 ` [PATCH 2/2] mm, THP: Clean up return value of madvise_free_huge_pmd Huang, Ying
@ 2016-06-29  7:27   ` Minchan Kim
  0 siblings, 0 replies; 4+ messages in thread
From: Minchan Kim @ 2016-06-29  7:27 UTC (permalink / raw)
  To: Huang, Ying
  Cc: Andrew Morton, Kirill A. Shutemov, Jerome Marchand,
	Matthew Wilcox, Vlastimil Babka, Dan Williams, Mel Gorman,
	Andrea Arcangeli, Ebru Akagunduz, linux-kernel, linux-mm

On Tue, Jun 28, 2016 at 10:36:30AM -0700, Huang, Ying wrote:
> From: Huang Ying <ying.huang@intel.com>
> 
> The definition of return value of madvise_free_huge_pmd is not clear
> before.  According to the suggestion of Minchan Kim, change the type of
> return value to bool and return true if we do MADV_FREE successfully on
> entire pmd page, otherwise, return false.  Comments are added too.
> 
> Cc: Minchan Kim <minchan@kernel.org>
> Signed-off-by: "Huang, Ying" <ying.huang@intel.com>
Acked-by: Minchan Kim <minchan@kernel.org>

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

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

end of thread, other threads:[~2016-06-29  7:26 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-06-28 17:36 [PATCH 1/2] MADVISE_FREE, THP: Fix madvise_free_huge_pmd return value after splitting Huang, Ying
2016-06-28 17:36 ` [PATCH 2/2] mm, THP: Clean up return value of madvise_free_huge_pmd Huang, Ying
2016-06-29  7:27   ` Minchan Kim
2016-06-29  7:26 ` [PATCH 1/2] MADVISE_FREE, THP: Fix madvise_free_huge_pmd return value after splitting Minchan Kim

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