linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/4] A few cleanup and fixup patches for migration
@ 2022-04-09  7:38 Miaohe Lin
  2022-04-09  7:38 ` [PATCH 1/4] mm/migration: reduce the rcu lock duration Miaohe Lin
                   ` (4 more replies)
  0 siblings, 5 replies; 21+ messages in thread
From: Miaohe Lin @ 2022-04-09  7:38 UTC (permalink / raw)
  To: akpm
  Cc: mike.kravetz, shy828301, willy, ying.huang, ziy, minchan,
	apopple, dave.hansen, o451686892, jhubbard, peterx,
	naoya.horiguchi, mhocko, riel, osalvador, david, sfr, linux-mm,
	linux-kernel, linmiaohe

Hi everyone,
This series contains a few patches to remove unneeded lock page and
PageMovable check, reduce the rcu lock duration. Also we fix potential
pte_unmap on an not mapped pte. More details can be found in the
respective changelogs. Thanks!

---
v1:
  rebase [1] on mainline.

[1] https://lore.kernel.org/lkml/20220304093409.25829-2-linmiaohe@huawei.com/T/
---
Miaohe Lin (4):
  mm/migration: reduce the rcu lock duration
  mm/migration: remove unneeded lock page and PageMovable check
  mm/migration: return errno when isolate_huge_page failed
  mm/migration: fix potential pte_unmap on an not mapped pte

 include/linux/migrate.h |  2 +-
 include/linux/swapops.h |  4 ++--
 mm/filemap.c            | 10 +++++-----
 mm/hugetlb.c            |  2 +-
 mm/migrate.c            | 31 +++++++++++++------------------
 5 files changed, 22 insertions(+), 27 deletions(-)

-- 
2.23.0


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

* [PATCH 1/4] mm/migration: reduce the rcu lock duration
  2022-04-09  7:38 [PATCH 0/4] A few cleanup and fixup patches for migration Miaohe Lin
@ 2022-04-09  7:38 ` Miaohe Lin
  2022-04-11 14:09   ` Christoph Hellwig
  2022-04-12  2:07   ` ying.huang
  2022-04-09  7:38 ` [PATCH 2/4] mm/migration: remove unneeded lock page and PageMovable check Miaohe Lin
                   ` (3 subsequent siblings)
  4 siblings, 2 replies; 21+ messages in thread
From: Miaohe Lin @ 2022-04-09  7:38 UTC (permalink / raw)
  To: akpm
  Cc: mike.kravetz, shy828301, willy, ying.huang, ziy, minchan,
	apopple, dave.hansen, o451686892, jhubbard, peterx,
	naoya.horiguchi, mhocko, riel, osalvador, david, sfr, linux-mm,
	linux-kernel, linmiaohe

rcu_read_lock is required by grabbing the task refcount but it's not
needed for ptrace_may_access. So we could release the rcu lock after
task refcount is successfully grabbed to reduce the rcu holding time.

Reviewed-by: Muchun Song <songmuchun@bytedance.com>
Signed-off-by: Miaohe Lin <linmiaohe@huawei.com>
---
 mm/migrate.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/mm/migrate.c b/mm/migrate.c
index a3d8c2be2631..d8aae6c75990 100644
--- a/mm/migrate.c
+++ b/mm/migrate.c
@@ -1907,17 +1907,16 @@ static struct mm_struct *find_mm_struct(pid_t pid, nodemask_t *mem_nodes)
 		return ERR_PTR(-ESRCH);
 	}
 	get_task_struct(task);
+	rcu_read_unlock();
 
 	/*
 	 * Check if this process has the right to modify the specified
 	 * process. Use the regular "ptrace_may_access()" checks.
 	 */
 	if (!ptrace_may_access(task, PTRACE_MODE_READ_REALCREDS)) {
-		rcu_read_unlock();
 		mm = ERR_PTR(-EPERM);
 		goto out;
 	}
-	rcu_read_unlock();
 
 	mm = ERR_PTR(security_task_movememory(task));
 	if (IS_ERR(mm))
-- 
2.23.0


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

* [PATCH 2/4] mm/migration: remove unneeded lock page and PageMovable check
  2022-04-09  7:38 [PATCH 0/4] A few cleanup and fixup patches for migration Miaohe Lin
  2022-04-09  7:38 ` [PATCH 1/4] mm/migration: reduce the rcu lock duration Miaohe Lin
@ 2022-04-09  7:38 ` Miaohe Lin
  2022-04-11 14:09   ` Christoph Hellwig
  2022-04-09  7:38 ` [PATCH 3/4] mm/migration: return errno when isolate_huge_page failed Miaohe Lin
                   ` (2 subsequent siblings)
  4 siblings, 1 reply; 21+ messages in thread
From: Miaohe Lin @ 2022-04-09  7:38 UTC (permalink / raw)
  To: akpm
  Cc: mike.kravetz, shy828301, willy, ying.huang, ziy, minchan,
	apopple, dave.hansen, o451686892, jhubbard, peterx,
	naoya.horiguchi, mhocko, riel, osalvador, david, sfr, linux-mm,
	linux-kernel, linmiaohe

When non-lru movable page was freed from under us, __ClearPageMovable must
have been done. Even if it's not done, ClearPageIsolated here won't hurt
as page will be freed anyway. So we can thus remove unneeded lock page and
PageMovable check here.

Signed-off-by: Miaohe Lin <linmiaohe@huawei.com>
---
 mm/migrate.c | 8 ++------
 1 file changed, 2 insertions(+), 6 deletions(-)

diff --git a/mm/migrate.c b/mm/migrate.c
index d8aae6c75990..381963231a62 100644
--- a/mm/migrate.c
+++ b/mm/migrate.c
@@ -1098,12 +1098,8 @@ static int unmap_and_move(new_page_t get_new_page,
 		/* page was freed from under us. So we are done. */
 		ClearPageActive(page);
 		ClearPageUnevictable(page);
-		if (unlikely(__PageMovable(page))) {
-			lock_page(page);
-			if (!PageMovable(page))
-				ClearPageIsolated(page);
-			unlock_page(page);
-		}
+		if (unlikely(__PageMovable(page)))
+			ClearPageIsolated(page);
 		goto out;
 	}
 
-- 
2.23.0


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

* [PATCH 3/4] mm/migration: return errno when isolate_huge_page failed
  2022-04-09  7:38 [PATCH 0/4] A few cleanup and fixup patches for migration Miaohe Lin
  2022-04-09  7:38 ` [PATCH 1/4] mm/migration: reduce the rcu lock duration Miaohe Lin
  2022-04-09  7:38 ` [PATCH 2/4] mm/migration: remove unneeded lock page and PageMovable check Miaohe Lin
@ 2022-04-09  7:38 ` Miaohe Lin
  2022-04-11 14:10   ` Christoph Hellwig
  2022-04-09  7:38 ` [PATCH 4/4] mm/migration: fix potential pte_unmap on an not mapped pte Miaohe Lin
  2022-04-12  2:25 ` [PATCH 0/4] A few cleanup and fixup patches for migration ying.huang
  4 siblings, 1 reply; 21+ messages in thread
From: Miaohe Lin @ 2022-04-09  7:38 UTC (permalink / raw)
  To: akpm
  Cc: mike.kravetz, shy828301, willy, ying.huang, ziy, minchan,
	apopple, dave.hansen, o451686892, jhubbard, peterx,
	naoya.horiguchi, mhocko, riel, osalvador, david, sfr, linux-mm,
	linux-kernel, linmiaohe

We might fail to isolate huge page due to e.g. the page is under migration
which cleared HPageMigratable. So we should return -EBUSY in this case
rather than always return 1 which could confuse the user.

Fixes: e8db67eb0ded ("mm: migrate: move_pages() supports thp migration")
Reviewed-by: Muchun Song <songmuchun@bytedance.com>
Reviewed-by: Baolin Wang <baolin.wang@linux.alibaba.com>
Signed-off-by: Miaohe Lin <linmiaohe@huawei.com>
---
 mm/migrate.c | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/mm/migrate.c b/mm/migrate.c
index 381963231a62..044656a14ae2 100644
--- a/mm/migrate.c
+++ b/mm/migrate.c
@@ -1632,10 +1632,8 @@ static int add_page_for_migration(struct mm_struct *mm, unsigned long addr,
 		goto out_putpage;
 
 	if (PageHuge(page)) {
-		if (PageHead(page)) {
-			isolate_huge_page(page, pagelist);
-			err = 1;
-		}
+		if (PageHead(page))
+			err = isolate_huge_page(page, pagelist) ? 1 : -EBUSY;
 	} else {
 		struct page *head;
 
-- 
2.23.0


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

* [PATCH 4/4] mm/migration: fix potential pte_unmap on an not mapped pte
  2022-04-09  7:38 [PATCH 0/4] A few cleanup and fixup patches for migration Miaohe Lin
                   ` (2 preceding siblings ...)
  2022-04-09  7:38 ` [PATCH 3/4] mm/migration: return errno when isolate_huge_page failed Miaohe Lin
@ 2022-04-09  7:38 ` Miaohe Lin
  2022-04-09 11:38   ` kernel test robot
  2022-04-11 11:41   ` David Hildenbrand
  2022-04-12  2:25 ` [PATCH 0/4] A few cleanup and fixup patches for migration ying.huang
  4 siblings, 2 replies; 21+ messages in thread
From: Miaohe Lin @ 2022-04-09  7:38 UTC (permalink / raw)
  To: akpm
  Cc: mike.kravetz, shy828301, willy, ying.huang, ziy, minchan,
	apopple, dave.hansen, o451686892, jhubbard, peterx,
	naoya.horiguchi, mhocko, riel, osalvador, david, sfr, linux-mm,
	linux-kernel, linmiaohe

__migration_entry_wait and migration_entry_wait_on_locked assume pte is
always mapped from caller. But this is not the case when it's called from
migration_entry_wait_huge and follow_huge_pmd. And a parameter unmap to
indicate whether pte needs to be unmapped to fix this issue.

Fixes: 30dad30922cc ("mm: migration: add migrate_entry_wait_huge()")
Signed-off-by: Miaohe Lin <linmiaohe@huawei.com>
---
 include/linux/migrate.h |  2 +-
 include/linux/swapops.h |  4 ++--
 mm/filemap.c            | 10 +++++-----
 mm/hugetlb.c            |  2 +-
 mm/migrate.c            | 14 ++++++++------
 5 files changed, 17 insertions(+), 15 deletions(-)

diff --git a/include/linux/migrate.h b/include/linux/migrate.h
index 2707bfd43a0d..2c4de1972f99 100644
--- a/include/linux/migrate.h
+++ b/include/linux/migrate.h
@@ -41,7 +41,7 @@ extern int migrate_huge_page_move_mapping(struct address_space *mapping,
 extern int migrate_page_move_mapping(struct address_space *mapping,
 		struct page *newpage, struct page *page, int extra_count);
 void migration_entry_wait_on_locked(swp_entry_t entry, pte_t *ptep,
-				spinlock_t *ptl);
+				spinlock_t *ptl, bool unmap);
 void folio_migrate_flags(struct folio *newfolio, struct folio *folio);
 void folio_migrate_copy(struct folio *newfolio, struct folio *folio);
 int folio_migrate_mapping(struct address_space *mapping,
diff --git a/include/linux/swapops.h b/include/linux/swapops.h
index 32d517a28969..3e6a293f88e0 100644
--- a/include/linux/swapops.h
+++ b/include/linux/swapops.h
@@ -231,7 +231,7 @@ static inline swp_entry_t make_writable_migration_entry(pgoff_t offset)
 }
 
 extern void __migration_entry_wait(struct mm_struct *mm, pte_t *ptep,
-					spinlock_t *ptl);
+					spinlock_t *ptl, bool unmap);
 extern void migration_entry_wait(struct mm_struct *mm, pmd_t *pmd,
 					unsigned long address);
 extern void migration_entry_wait_huge(struct vm_area_struct *vma,
@@ -258,7 +258,7 @@ static inline int is_migration_entry(swp_entry_t swp)
 }
 
 static inline void __migration_entry_wait(struct mm_struct *mm, pte_t *ptep,
-					spinlock_t *ptl) { }
+					spinlock_t *ptl, bool unmap) { }
 static inline void migration_entry_wait(struct mm_struct *mm, pmd_t *pmd,
 					 unsigned long address) { }
 static inline void migration_entry_wait_huge(struct vm_area_struct *vma,
diff --git a/mm/filemap.c b/mm/filemap.c
index 3a5ffb5587cd..02f2d920c8cf 100644
--- a/mm/filemap.c
+++ b/mm/filemap.c
@@ -1392,6 +1392,7 @@ static inline int folio_wait_bit_common(struct folio *folio, int bit_nr,
  * @ptep: mapped pte pointer. Will return with the ptep unmapped. Only required
  *        for pte entries, pass NULL for pmd entries.
  * @ptl: already locked ptl. This function will drop the lock.
+ * @unmap: indicating whether ptep need to be unmapped.
  *
  * Wait for a migration entry referencing the given page to be removed. This is
  * equivalent to put_and_wait_on_page_locked(page, TASK_UNINTERRUPTIBLE) except
@@ -1405,7 +1406,7 @@ static inline int folio_wait_bit_common(struct folio *folio, int bit_nr,
  * there.
  */
 void migration_entry_wait_on_locked(swp_entry_t entry, pte_t *ptep,
-				spinlock_t *ptl)
+				spinlock_t *ptl, bool unmap)
 {
 	struct wait_page_queue wait_page;
 	wait_queue_entry_t *wait = &wait_page.wait;
@@ -1442,10 +1443,9 @@ void migration_entry_wait_on_locked(swp_entry_t entry, pte_t *ptep,
 	 * a valid reference to the page, and it must take the ptl to remove the
 	 * migration entry. So the page is valid until the ptl is dropped.
 	 */
-	if (ptep)
-		pte_unmap_unlock(ptep, ptl);
-	else
-		spin_unlock(ptl);
+	spin_unlock(ptl);
+	if (unmap && ptep)
+		pte_unmap(ptep);
 
 	for (;;) {
 		unsigned int flags;
diff --git a/mm/hugetlb.c b/mm/hugetlb.c
index fb5a549169ce..3fc61a437c2a 100644
--- a/mm/hugetlb.c
+++ b/mm/hugetlb.c
@@ -6778,7 +6778,7 @@ follow_huge_pmd(struct mm_struct *mm, unsigned long address,
 	} else {
 		if (is_hugetlb_entry_migration(pte)) {
 			spin_unlock(ptl);
-			__migration_entry_wait(mm, (pte_t *)pmd, ptl);
+			__migration_entry_wait(mm, (pte_t *)pmd, ptl, false);
 			goto retry;
 		}
 		/*
diff --git a/mm/migrate.c b/mm/migrate.c
index 044656a14ae2..0bdf27fbc45b 100644
--- a/mm/migrate.c
+++ b/mm/migrate.c
@@ -287,7 +287,7 @@ void remove_migration_ptes(struct folio *src, struct folio *dst, bool locked)
  * When we return from this function the fault will be retried.
  */
 void __migration_entry_wait(struct mm_struct *mm, pte_t *ptep,
-				spinlock_t *ptl)
+				spinlock_t *ptl, bool unmap)
 {
 	pte_t pte;
 	swp_entry_t entry;
@@ -301,10 +301,12 @@ void __migration_entry_wait(struct mm_struct *mm, pte_t *ptep,
 	if (!is_migration_entry(entry))
 		goto out;
 
-	migration_entry_wait_on_locked(entry, ptep, ptl);
+	migration_entry_wait_on_locked(entry, ptep, ptl, unmap);
 	return;
 out:
-	pte_unmap_unlock(ptep, ptl);
+	spin_unlock(ptl);
+	if (unmap)
+		pte_unmap(ptep);
 }
 
 void migration_entry_wait(struct mm_struct *mm, pmd_t *pmd,
@@ -312,14 +314,14 @@ void migration_entry_wait(struct mm_struct *mm, pmd_t *pmd,
 {
 	spinlock_t *ptl = pte_lockptr(mm, pmd);
 	pte_t *ptep = pte_offset_map(pmd, address);
-	__migration_entry_wait(mm, ptep, ptl);
+	__migration_entry_wait(mm, ptep, ptl, true);
 }
 
 void migration_entry_wait_huge(struct vm_area_struct *vma,
 		struct mm_struct *mm, pte_t *pte)
 {
 	spinlock_t *ptl = huge_pte_lockptr(hstate_vma(vma), mm, pte);
-	__migration_entry_wait(mm, pte, ptl);
+	__migration_entry_wait(mm, pte, ptl, false);
 }
 
 #ifdef CONFIG_ARCH_ENABLE_THP_MIGRATION
@@ -330,7 +332,7 @@ void pmd_migration_entry_wait(struct mm_struct *mm, pmd_t *pmd)
 	ptl = pmd_lock(mm, pmd);
 	if (!is_pmd_migration_entry(*pmd))
 		goto unlock;
-	migration_entry_wait_on_locked(pmd_to_swp_entry(*pmd), NULL, ptl);
+	migration_entry_wait_on_locked(pmd_to_swp_entry(*pmd), NULL, ptl, false);
 	return;
 unlock:
 	spin_unlock(ptl);
-- 
2.23.0


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

* Re: [PATCH 4/4] mm/migration: fix potential pte_unmap on an not mapped pte
  2022-04-09  7:38 ` [PATCH 4/4] mm/migration: fix potential pte_unmap on an not mapped pte Miaohe Lin
@ 2022-04-09 11:38   ` kernel test robot
  2022-04-11  1:54     ` Miaohe Lin
  2022-04-11 11:41   ` David Hildenbrand
  1 sibling, 1 reply; 21+ messages in thread
From: kernel test robot @ 2022-04-09 11:38 UTC (permalink / raw)
  To: Miaohe Lin, akpm
  Cc: kbuild-all, mike.kravetz, shy828301, willy, ying.huang, ziy,
	minchan, apopple, dave.hansen, o451686892, jhubbard, peterx,
	naoya.horiguchi, mhocko, riel, osalvador, david, sfr, linux-mm,
	linux-kernel, linmiaohe

Hi Miaohe,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on hnaz-mm/master]
[also build test ERROR on linus/master v5.18-rc1 next-20220408]
[cannot apply to linux/master]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url:    https://github.com/intel-lab-lkp/linux/commits/Miaohe-Lin/A-few-cleanup-and-fixup-patches-for-migration/20220409-154028
base:   https://github.com/hnaz/linux-mm master
config: powerpc64-randconfig-r015-20220408 (https://download.01.org/0day-ci/archive/20220409/202204091914.psVO4TrI-lkp@intel.com/config)
compiler: powerpc64-linux-gcc (GCC) 11.2.0
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # https://github.com/intel-lab-lkp/linux/commit/73a982570cc62313c55cc5cbc2dd7acf40601474
        git remote add linux-review https://github.com/intel-lab-lkp/linux
        git fetch --no-tags linux-review Miaohe-Lin/A-few-cleanup-and-fixup-patches-for-migration/20220409-154028
        git checkout 73a982570cc62313c55cc5cbc2dd7acf40601474
        # save the config file to linux build tree
        mkdir build_dir
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-11.2.0 make.cross O=build_dir ARCH=powerpc SHELL=/bin/bash arch/powerpc/mm/

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>

All errors (new ones prefixed by >>):

   arch/powerpc/mm/hugetlbpage.c: In function 'follow_huge_pd':
>> arch/powerpc/mm/hugetlbpage.c:537:25: error: too few arguments to function '__migration_entry_wait'
     537 |                         __migration_entry_wait(mm, ptep, ptl);
         |                         ^~~~~~~~~~~~~~~~~~~~~~
   In file included from arch/powerpc/mm/hugetlbpage.c:20:
   include/linux/swapops.h:233:13: note: declared here
     233 | extern void __migration_entry_wait(struct mm_struct *mm, pte_t *ptep,
         |             ^~~~~~~~~~~~~~~~~~~~~~


vim +/__migration_entry_wait +537 arch/powerpc/mm/hugetlbpage.c

^1da177e4c3f41 arch/ppc64/mm/hugetlbpage.c   Linus Torvalds   2005-04-16  507  
50791e6de0b5f2 arch/powerpc/mm/hugetlbpage.c Aneesh Kumar K.V 2017-07-06  508  struct page *follow_huge_pd(struct vm_area_struct *vma,
50791e6de0b5f2 arch/powerpc/mm/hugetlbpage.c Aneesh Kumar K.V 2017-07-06  509  			    unsigned long address, hugepd_t hpd,
50791e6de0b5f2 arch/powerpc/mm/hugetlbpage.c Aneesh Kumar K.V 2017-07-06  510  			    int flags, int pdshift)
50791e6de0b5f2 arch/powerpc/mm/hugetlbpage.c Aneesh Kumar K.V 2017-07-06  511  {
50791e6de0b5f2 arch/powerpc/mm/hugetlbpage.c Aneesh Kumar K.V 2017-07-06  512  	pte_t *ptep;
50791e6de0b5f2 arch/powerpc/mm/hugetlbpage.c Aneesh Kumar K.V 2017-07-06  513  	spinlock_t *ptl;
50791e6de0b5f2 arch/powerpc/mm/hugetlbpage.c Aneesh Kumar K.V 2017-07-06  514  	struct page *page = NULL;
50791e6de0b5f2 arch/powerpc/mm/hugetlbpage.c Aneesh Kumar K.V 2017-07-06  515  	unsigned long mask;
50791e6de0b5f2 arch/powerpc/mm/hugetlbpage.c Aneesh Kumar K.V 2017-07-06  516  	int shift = hugepd_shift(hpd);
50791e6de0b5f2 arch/powerpc/mm/hugetlbpage.c Aneesh Kumar K.V 2017-07-06  517  	struct mm_struct *mm = vma->vm_mm;
50791e6de0b5f2 arch/powerpc/mm/hugetlbpage.c Aneesh Kumar K.V 2017-07-06  518  
50791e6de0b5f2 arch/powerpc/mm/hugetlbpage.c Aneesh Kumar K.V 2017-07-06  519  retry:
ed515b6898c367 arch/powerpc/mm/hugetlbpage.c Aneesh Kumar K.V 2018-06-01  520  	/*
ed515b6898c367 arch/powerpc/mm/hugetlbpage.c Aneesh Kumar K.V 2018-06-01  521  	 * hugepage directory entries are protected by mm->page_table_lock
ed515b6898c367 arch/powerpc/mm/hugetlbpage.c Aneesh Kumar K.V 2018-06-01  522  	 * Use this instead of huge_pte_lockptr
ed515b6898c367 arch/powerpc/mm/hugetlbpage.c Aneesh Kumar K.V 2018-06-01  523  	 */
50791e6de0b5f2 arch/powerpc/mm/hugetlbpage.c Aneesh Kumar K.V 2017-07-06  524  	ptl = &mm->page_table_lock;
50791e6de0b5f2 arch/powerpc/mm/hugetlbpage.c Aneesh Kumar K.V 2017-07-06  525  	spin_lock(ptl);
50791e6de0b5f2 arch/powerpc/mm/hugetlbpage.c Aneesh Kumar K.V 2017-07-06  526  
50791e6de0b5f2 arch/powerpc/mm/hugetlbpage.c Aneesh Kumar K.V 2017-07-06  527  	ptep = hugepte_offset(hpd, address, pdshift);
50791e6de0b5f2 arch/powerpc/mm/hugetlbpage.c Aneesh Kumar K.V 2017-07-06  528  	if (pte_present(*ptep)) {
50791e6de0b5f2 arch/powerpc/mm/hugetlbpage.c Aneesh Kumar K.V 2017-07-06  529  		mask = (1UL << shift) - 1;
50791e6de0b5f2 arch/powerpc/mm/hugetlbpage.c Aneesh Kumar K.V 2017-07-06  530  		page = pte_page(*ptep);
50791e6de0b5f2 arch/powerpc/mm/hugetlbpage.c Aneesh Kumar K.V 2017-07-06  531  		page += ((address & mask) >> PAGE_SHIFT);
50791e6de0b5f2 arch/powerpc/mm/hugetlbpage.c Aneesh Kumar K.V 2017-07-06  532  		if (flags & FOLL_GET)
50791e6de0b5f2 arch/powerpc/mm/hugetlbpage.c Aneesh Kumar K.V 2017-07-06  533  			get_page(page);
50791e6de0b5f2 arch/powerpc/mm/hugetlbpage.c Aneesh Kumar K.V 2017-07-06  534  	} else {
50791e6de0b5f2 arch/powerpc/mm/hugetlbpage.c Aneesh Kumar K.V 2017-07-06  535  		if (is_hugetlb_entry_migration(*ptep)) {
50791e6de0b5f2 arch/powerpc/mm/hugetlbpage.c Aneesh Kumar K.V 2017-07-06  536  			spin_unlock(ptl);
50791e6de0b5f2 arch/powerpc/mm/hugetlbpage.c Aneesh Kumar K.V 2017-07-06 @537  			__migration_entry_wait(mm, ptep, ptl);
50791e6de0b5f2 arch/powerpc/mm/hugetlbpage.c Aneesh Kumar K.V 2017-07-06  538  			goto retry;
50791e6de0b5f2 arch/powerpc/mm/hugetlbpage.c Aneesh Kumar K.V 2017-07-06  539  		}
50791e6de0b5f2 arch/powerpc/mm/hugetlbpage.c Aneesh Kumar K.V 2017-07-06  540  	}
50791e6de0b5f2 arch/powerpc/mm/hugetlbpage.c Aneesh Kumar K.V 2017-07-06  541  	spin_unlock(ptl);
50791e6de0b5f2 arch/powerpc/mm/hugetlbpage.c Aneesh Kumar K.V 2017-07-06  542  	return page;
50791e6de0b5f2 arch/powerpc/mm/hugetlbpage.c Aneesh Kumar K.V 2017-07-06  543  }
50791e6de0b5f2 arch/powerpc/mm/hugetlbpage.c Aneesh Kumar K.V 2017-07-06  544  

-- 
0-DAY CI Kernel Test Service
https://01.org/lkp

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

* Re: [PATCH 4/4] mm/migration: fix potential pte_unmap on an not mapped pte
  2022-04-09 11:38   ` kernel test robot
@ 2022-04-11  1:54     ` Miaohe Lin
  0 siblings, 0 replies; 21+ messages in thread
From: Miaohe Lin @ 2022-04-11  1:54 UTC (permalink / raw)
  To: kernel test robot, akpm
  Cc: kbuild-all, mike.kravetz, shy828301, willy, ying.huang, ziy,
	minchan, apopple, dave.hansen, o451686892, jhubbard, peterx,
	naoya.horiguchi, mhocko, riel, osalvador, david, sfr, linux-mm,
	linux-kernel

On 2022/4/9 19:38, kernel test robot wrote:
> Hi Miaohe,
> 
> Thank you for the patch! Yet something to improve:
> 
> [auto build test ERROR on hnaz-mm/master]
> [also build test ERROR on linus/master v5.18-rc1 next-20220408]
> [cannot apply to linux/master]
> [If your patch is applied to the wrong git tree, kindly drop us a note.
> And when submitting patch, we suggest to use '--base' as documented in
> https://git-scm.com/docs/git-format-patch]
> 
> url:    https://github.com/intel-lab-lkp/linux/commits/Miaohe-Lin/A-few-cleanup-and-fixup-patches-for-migration/20220409-154028
> base:   https://github.com/hnaz/linux-mm master
> config: powerpc64-randconfig-r015-20220408 (https://download.01.org/0day-ci/archive/20220409/202204091914.psVO4TrI-lkp@intel.com/config)
> compiler: powerpc64-linux-gcc (GCC) 11.2.0
> reproduce (this is a W=1 build):
>         wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
>         chmod +x ~/bin/make.cross
>         # https://github.com/intel-lab-lkp/linux/commit/73a982570cc62313c55cc5cbc2dd7acf40601474
>         git remote add linux-review https://github.com/intel-lab-lkp/linux
>         git fetch --no-tags linux-review Miaohe-Lin/A-few-cleanup-and-fixup-patches-for-migration/20220409-154028
>         git checkout 73a982570cc62313c55cc5cbc2dd7acf40601474
>         # save the config file to linux build tree
>         mkdir build_dir
>         COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-11.2.0 make.cross O=build_dir ARCH=powerpc SHELL=/bin/bash arch/powerpc/mm/
> 
> If you fix the issue, kindly add following tag as appropriate
> Reported-by: kernel test robot <lkp@intel.com>

Oh, powerpc variant is left undone. Will fix it. Thanks!

> 
> All errors (new ones prefixed by >>):
> 
>    arch/powerpc/mm/hugetlbpage.c: In function 'follow_huge_pd':
>>> arch/powerpc/mm/hugetlbpage.c:537:25: error: too few arguments to function '__migration_entry_wait'
>      537 |                         __migration_entry_wait(mm, ptep, ptl);
>          |                         ^~~~~~~~~~~~~~~~~~~~~~
>    In file included from arch/powerpc/mm/hugetlbpage.c:20:
>    include/linux/swapops.h:233:13: note: declared here
>      233 | extern void __migration_entry_wait(struct mm_struct *mm, pte_t *ptep,
>          |             ^~~~~~~~~~~~~~~~~~~~~~
> 
> 
> vim +/__migration_entry_wait +537 arch/powerpc/mm/hugetlbpage.c
> 
> ^1da177e4c3f41 arch/ppc64/mm/hugetlbpage.c   Linus Torvalds   2005-04-16  507  
> 50791e6de0b5f2 arch/powerpc/mm/hugetlbpage.c Aneesh Kumar K.V 2017-07-06  508  struct page *follow_huge_pd(struct vm_area_struct *vma,
> 50791e6de0b5f2 arch/powerpc/mm/hugetlbpage.c Aneesh Kumar K.V 2017-07-06  509  			    unsigned long address, hugepd_t hpd,
> 50791e6de0b5f2 arch/powerpc/mm/hugetlbpage.c Aneesh Kumar K.V 2017-07-06  510  			    int flags, int pdshift)
> 50791e6de0b5f2 arch/powerpc/mm/hugetlbpage.c Aneesh Kumar K.V 2017-07-06  511  {
> 50791e6de0b5f2 arch/powerpc/mm/hugetlbpage.c Aneesh Kumar K.V 2017-07-06  512  	pte_t *ptep;
> 50791e6de0b5f2 arch/powerpc/mm/hugetlbpage.c Aneesh Kumar K.V 2017-07-06  513  	spinlock_t *ptl;
> 50791e6de0b5f2 arch/powerpc/mm/hugetlbpage.c Aneesh Kumar K.V 2017-07-06  514  	struct page *page = NULL;
> 50791e6de0b5f2 arch/powerpc/mm/hugetlbpage.c Aneesh Kumar K.V 2017-07-06  515  	unsigned long mask;
> 50791e6de0b5f2 arch/powerpc/mm/hugetlbpage.c Aneesh Kumar K.V 2017-07-06  516  	int shift = hugepd_shift(hpd);
> 50791e6de0b5f2 arch/powerpc/mm/hugetlbpage.c Aneesh Kumar K.V 2017-07-06  517  	struct mm_struct *mm = vma->vm_mm;
> 50791e6de0b5f2 arch/powerpc/mm/hugetlbpage.c Aneesh Kumar K.V 2017-07-06  518  
> 50791e6de0b5f2 arch/powerpc/mm/hugetlbpage.c Aneesh Kumar K.V 2017-07-06  519  retry:
> ed515b6898c367 arch/powerpc/mm/hugetlbpage.c Aneesh Kumar K.V 2018-06-01  520  	/*
> ed515b6898c367 arch/powerpc/mm/hugetlbpage.c Aneesh Kumar K.V 2018-06-01  521  	 * hugepage directory entries are protected by mm->page_table_lock
> ed515b6898c367 arch/powerpc/mm/hugetlbpage.c Aneesh Kumar K.V 2018-06-01  522  	 * Use this instead of huge_pte_lockptr
> ed515b6898c367 arch/powerpc/mm/hugetlbpage.c Aneesh Kumar K.V 2018-06-01  523  	 */
> 50791e6de0b5f2 arch/powerpc/mm/hugetlbpage.c Aneesh Kumar K.V 2017-07-06  524  	ptl = &mm->page_table_lock;
> 50791e6de0b5f2 arch/powerpc/mm/hugetlbpage.c Aneesh Kumar K.V 2017-07-06  525  	spin_lock(ptl);
> 50791e6de0b5f2 arch/powerpc/mm/hugetlbpage.c Aneesh Kumar K.V 2017-07-06  526  
> 50791e6de0b5f2 arch/powerpc/mm/hugetlbpage.c Aneesh Kumar K.V 2017-07-06  527  	ptep = hugepte_offset(hpd, address, pdshift);
> 50791e6de0b5f2 arch/powerpc/mm/hugetlbpage.c Aneesh Kumar K.V 2017-07-06  528  	if (pte_present(*ptep)) {
> 50791e6de0b5f2 arch/powerpc/mm/hugetlbpage.c Aneesh Kumar K.V 2017-07-06  529  		mask = (1UL << shift) - 1;
> 50791e6de0b5f2 arch/powerpc/mm/hugetlbpage.c Aneesh Kumar K.V 2017-07-06  530  		page = pte_page(*ptep);
> 50791e6de0b5f2 arch/powerpc/mm/hugetlbpage.c Aneesh Kumar K.V 2017-07-06  531  		page += ((address & mask) >> PAGE_SHIFT);
> 50791e6de0b5f2 arch/powerpc/mm/hugetlbpage.c Aneesh Kumar K.V 2017-07-06  532  		if (flags & FOLL_GET)
> 50791e6de0b5f2 arch/powerpc/mm/hugetlbpage.c Aneesh Kumar K.V 2017-07-06  533  			get_page(page);
> 50791e6de0b5f2 arch/powerpc/mm/hugetlbpage.c Aneesh Kumar K.V 2017-07-06  534  	} else {
> 50791e6de0b5f2 arch/powerpc/mm/hugetlbpage.c Aneesh Kumar K.V 2017-07-06  535  		if (is_hugetlb_entry_migration(*ptep)) {
> 50791e6de0b5f2 arch/powerpc/mm/hugetlbpage.c Aneesh Kumar K.V 2017-07-06  536  			spin_unlock(ptl);
> 50791e6de0b5f2 arch/powerpc/mm/hugetlbpage.c Aneesh Kumar K.V 2017-07-06 @537  			__migration_entry_wait(mm, ptep, ptl);
> 50791e6de0b5f2 arch/powerpc/mm/hugetlbpage.c Aneesh Kumar K.V 2017-07-06  538  			goto retry;
> 50791e6de0b5f2 arch/powerpc/mm/hugetlbpage.c Aneesh Kumar K.V 2017-07-06  539  		}
> 50791e6de0b5f2 arch/powerpc/mm/hugetlbpage.c Aneesh Kumar K.V 2017-07-06  540  	}
> 50791e6de0b5f2 arch/powerpc/mm/hugetlbpage.c Aneesh Kumar K.V 2017-07-06  541  	spin_unlock(ptl);
> 50791e6de0b5f2 arch/powerpc/mm/hugetlbpage.c Aneesh Kumar K.V 2017-07-06  542  	return page;
> 50791e6de0b5f2 arch/powerpc/mm/hugetlbpage.c Aneesh Kumar K.V 2017-07-06  543  }
> 50791e6de0b5f2 arch/powerpc/mm/hugetlbpage.c Aneesh Kumar K.V 2017-07-06  544  
> 


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

* Re: [PATCH 4/4] mm/migration: fix potential pte_unmap on an not mapped pte
  2022-04-09  7:38 ` [PATCH 4/4] mm/migration: fix potential pte_unmap on an not mapped pte Miaohe Lin
  2022-04-09 11:38   ` kernel test robot
@ 2022-04-11 11:41   ` David Hildenbrand
  2022-04-12  2:55     ` Miaohe Lin
  1 sibling, 1 reply; 21+ messages in thread
From: David Hildenbrand @ 2022-04-11 11:41 UTC (permalink / raw)
  To: Miaohe Lin, akpm
  Cc: mike.kravetz, shy828301, willy, ying.huang, ziy, minchan,
	apopple, dave.hansen, o451686892, jhubbard, peterx,
	naoya.horiguchi, mhocko, riel, osalvador, sfr, linux-mm,
	linux-kernel

On 09.04.22 09:38, Miaohe Lin wrote:
> __migration_entry_wait and migration_entry_wait_on_locked assume pte is
> always mapped from caller. But this is not the case when it's called from
> migration_entry_wait_huge and follow_huge_pmd. And a parameter unmap to
> indicate whether pte needs to be unmapped to fix this issue.

Hm.


migration_entry_wait_on_locked documents

"@ptep: mapped pte pointer. Will return with the ptep unmapped. Only
required for pte entries, pass NULL for pmd entries."

Setting ptep implies that we have a *mapped pte* pointer that requires unmap.
If some code sets that although that's not guaranteed, that calling code
is wrong and needs to be fixed to not pass a ptep.


hugetlbfs never requires a map/unmap. I really don't see we there is need to
adjust migration_entry_wait_on_locked(): just don't pass a ptep as documented.

What's really nasty here is that hugetlbfs actually mostly works on PMD/PUD,
but we call it PTEs. One corner case might be CONT PTEs, but they are also
accessed without a map+unmap.

Regarding __migration_entry_wait(), I think we should just stop using it for
hugetlbfs and have a proper hugetlbfs variant that calls
hugetlb_migration_entry_wait(ptep == NULL), and knows that although we're
handling ptes, we're usually not actually holding ptes in our hands
that need a map+unmap.


Something like (including some cleanups mm parameter):


diff --git a/include/linux/swapops.h b/include/linux/swapops.h
index 32d517a28969..898c407ad8f7 100644
--- a/include/linux/swapops.h
+++ b/include/linux/swapops.h
@@ -234,8 +234,8 @@ extern void __migration_entry_wait(struct mm_struct *mm, pte_t *ptep,
 					spinlock_t *ptl);
 extern void migration_entry_wait(struct mm_struct *mm, pmd_t *pmd,
 					unsigned long address);
-extern void migration_entry_wait_huge(struct vm_area_struct *vma,
-		struct mm_struct *mm, pte_t *pte);
+extern void __migration_entry_wait_huge(pte_t *ptep, spinlock_t *ptl);
+extern void migration_entry_wait_huge(struct vm_area_struct *vma, pte_t *pte);
 #else
 static inline swp_entry_t make_readable_migration_entry(pgoff_t offset)
 {
@@ -261,8 +261,9 @@ static inline void __migration_entry_wait(struct mm_struct *mm, pte_t *ptep,
 					spinlock_t *ptl) { }
 static inline void migration_entry_wait(struct mm_struct *mm, pmd_t *pmd,
 					 unsigned long address) { }
+static inline void __migration_entry_wait_huge(pte_t *ptep, spinlock_t *ptl) { }
 static inline void migration_entry_wait_huge(struct vm_area_struct *vma,
-		struct mm_struct *mm, pte_t *pte) { }
+					     pte_t *pte) { }
 static inline int is_writable_migration_entry(swp_entry_t entry)
 {
 	return 0;
diff --git a/mm/hugetlb.c b/mm/hugetlb.c
index 48740e6c3476..2b38eaaa2e60 100644
--- a/mm/hugetlb.c
+++ b/mm/hugetlb.c
@@ -5622,7 +5622,7 @@ vm_fault_t hugetlb_fault(struct mm_struct *mm, struct vm_area_struct *vma,
 		 */
 		entry = huge_ptep_get(ptep);
 		if (unlikely(is_hugetlb_entry_migration(entry))) {
-			migration_entry_wait_huge(vma, mm, ptep);
+			migration_entry_wait_huge(vma, ptep);
 			return 0;
 		} else if (unlikely(is_hugetlb_entry_hwpoisoned(entry)))
 			return VM_FAULT_HWPOISON_LARGE |
@@ -6770,7 +6770,7 @@ follow_huge_pmd(struct mm_struct *mm, unsigned long address,
 	} else {
 		if (is_hugetlb_entry_migration(pte)) {
 			spin_unlock(ptl);
-			__migration_entry_wait(mm, (pte_t *)pmd, ptl);
+			__migration_entry_wait_huge((pte_t *)pmd, ptl);
 			goto retry;
 		}
 		/*
diff --git a/mm/migrate.c b/mm/migrate.c
index 231907e89b93..84b685a235fe 100644
--- a/mm/migrate.c
+++ b/mm/migrate.c
@@ -315,11 +315,26 @@ void migration_entry_wait(struct mm_struct *mm, pmd_t *pmd,
 	__migration_entry_wait(mm, ptep, ptl);
 }
 
+void __migration_entry_wait_huge(pte_t *ptep, spinlock_t *ptl)
+{
+	swp_entry_t entry;
+	pte_t pte;
+
+	spin_lock(ptl);
+	pte = huge_ptep_get(ptep);
+
+	if (unlikely(!is_hugetlb_entry_migration(pte)))
+		spin_unlock(ptl);
+	else
+		migration_entry_wait_on_locked(pte_to_swp_entry(pte), NULL, ptl);
+}
+
 void migration_entry_wait_huge(struct vm_area_struct *vma,
 		struct mm_struct *mm, pte_t *pte)
 {
-	spinlock_t *ptl = huge_pte_lockptr(hstate_vma(vma), mm, pte);
-	__migration_entry_wait(mm, pte, ptl);
+	spinlock_t *ptl = huge_pte_lockptr(hstate_vma(vma), vma->mm, pte);
+
+	__migration_entry_wait_huge(pte, ptl);
 }
 
 #ifdef CONFIG_ARCH_ENABLE_THP_MIGRATION

-- 
Thanks,

David / dhildenb


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

* Re: [PATCH 1/4] mm/migration: reduce the rcu lock duration
  2022-04-09  7:38 ` [PATCH 1/4] mm/migration: reduce the rcu lock duration Miaohe Lin
@ 2022-04-11 14:09   ` Christoph Hellwig
  2022-04-12  2:07   ` ying.huang
  1 sibling, 0 replies; 21+ messages in thread
From: Christoph Hellwig @ 2022-04-11 14:09 UTC (permalink / raw)
  To: Miaohe Lin
  Cc: akpm, mike.kravetz, shy828301, willy, ying.huang, ziy, minchan,
	apopple, dave.hansen, o451686892, jhubbard, peterx,
	naoya.horiguchi, mhocko, riel, osalvador, david, sfr, linux-mm,
	linux-kernel

On Sat, Apr 09, 2022 at 03:38:43PM +0800, Miaohe Lin wrote:
> rcu_read_lock is required by grabbing the task refcount but it's not
> needed for ptrace_may_access. So we could release the rcu lock after
> task refcount is successfully grabbed to reduce the rcu holding time.
> 
> Reviewed-by: Muchun Song <songmuchun@bytedance.com>
> Signed-off-by: Miaohe Lin <linmiaohe@huawei.com>

Looks good:

Reviewed-by: Christoph Hellwig <hch@lst.de>

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

* Re: [PATCH 2/4] mm/migration: remove unneeded lock page and PageMovable check
  2022-04-09  7:38 ` [PATCH 2/4] mm/migration: remove unneeded lock page and PageMovable check Miaohe Lin
@ 2022-04-11 14:09   ` Christoph Hellwig
  0 siblings, 0 replies; 21+ messages in thread
From: Christoph Hellwig @ 2022-04-11 14:09 UTC (permalink / raw)
  To: Miaohe Lin
  Cc: akpm, mike.kravetz, shy828301, willy, ying.huang, ziy, minchan,
	apopple, dave.hansen, o451686892, jhubbard, peterx,
	naoya.horiguchi, mhocko, riel, osalvador, david, sfr, linux-mm,
	linux-kernel

On Sat, Apr 09, 2022 at 03:38:44PM +0800, Miaohe Lin wrote:
> When non-lru movable page was freed from under us, __ClearPageMovable must
> have been done. Even if it's not done, ClearPageIsolated here won't hurt
> as page will be freed anyway. So we can thus remove unneeded lock page and
> PageMovable check here.
> 
> Signed-off-by: Miaohe Lin <linmiaohe@huawei.com>

Looks good:

Reviewed-by: Christoph Hellwig <hch@lst.de>

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

* Re: [PATCH 3/4] mm/migration: return errno when isolate_huge_page failed
  2022-04-09  7:38 ` [PATCH 3/4] mm/migration: return errno when isolate_huge_page failed Miaohe Lin
@ 2022-04-11 14:10   ` Christoph Hellwig
  2022-04-12  3:13     ` Miaohe Lin
  0 siblings, 1 reply; 21+ messages in thread
From: Christoph Hellwig @ 2022-04-11 14:10 UTC (permalink / raw)
  To: Miaohe Lin
  Cc: akpm, mike.kravetz, shy828301, willy, ying.huang, ziy, minchan,
	apopple, dave.hansen, o451686892, jhubbard, peterx,
	naoya.horiguchi, mhocko, riel, osalvador, david, sfr, linux-mm,
	linux-kernel

On Sat, Apr 09, 2022 at 03:38:45PM +0800, Miaohe Lin wrote:
> We might fail to isolate huge page due to e.g. the page is under migration
> which cleared HPageMigratable. So we should return -EBUSY in this case
> rather than always return 1 which could confuse the user.
> 
> Fixes: e8db67eb0ded ("mm: migrate: move_pages() supports thp migration")
> Reviewed-by: Muchun Song <songmuchun@bytedance.com>
> Reviewed-by: Baolin Wang <baolin.wang@linux.alibaba.com>
> Signed-off-by: Miaohe Lin <linmiaohe@huawei.com>
> ---
>  mm/migrate.c | 6 ++----
>  1 file changed, 2 insertions(+), 4 deletions(-)
> 
> diff --git a/mm/migrate.c b/mm/migrate.c
> index 381963231a62..044656a14ae2 100644
> --- a/mm/migrate.c
> +++ b/mm/migrate.c
> @@ -1632,10 +1632,8 @@ static int add_page_for_migration(struct mm_struct *mm, unsigned long addr,
>  		goto out_putpage;
>  
>  	if (PageHuge(page)) {
> -		if (PageHead(page)) {
> -			isolate_huge_page(page, pagelist);
> -			err = 1;
> -		}
> +		if (PageHead(page))
> +			err = isolate_huge_page(page, pagelist) ? 1 : -EBUSY;

I think a:

			err = isolate_huge_page(page, pagelist);
			if (!err)
				err = 1;

would be a lot more readable here.


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

* Re: [PATCH 1/4] mm/migration: reduce the rcu lock duration
  2022-04-09  7:38 ` [PATCH 1/4] mm/migration: reduce the rcu lock duration Miaohe Lin
  2022-04-11 14:09   ` Christoph Hellwig
@ 2022-04-12  2:07   ` ying.huang
  2022-04-12  3:21     ` Miaohe Lin
  1 sibling, 1 reply; 21+ messages in thread
From: ying.huang @ 2022-04-12  2:07 UTC (permalink / raw)
  To: Miaohe Lin, akpm
  Cc: mike.kravetz, shy828301, willy, ziy, minchan, apopple,
	dave.hansen, o451686892, jhubbard, peterx, naoya.horiguchi,
	mhocko, riel, osalvador, david, sfr, linux-mm, linux-kernel

On Sat, 2022-04-09 at 15:38 +0800, Miaohe Lin wrote:
> rcu_read_lock is required by grabbing the task refcount but it's not
> needed for ptrace_may_access. So we could release the rcu lock after
> task refcount is successfully grabbed to reduce the rcu holding time.
> 
> Reviewed-by: Muchun Song <songmuchun@bytedance.com>
> Signed-off-by: Miaohe Lin <linmiaohe@huawei.com>
> ---
>  mm/migrate.c | 3 +--
>  1 file changed, 1 insertion(+), 2 deletions(-)
> 
> diff --git a/mm/migrate.c b/mm/migrate.c
> index a3d8c2be2631..d8aae6c75990 100644
> --- a/mm/migrate.c
> +++ b/mm/migrate.c
> @@ -1907,17 +1907,16 @@ static struct mm_struct *find_mm_struct(pid_t pid, nodemask_t *mem_nodes)
>  		return ERR_PTR(-ESRCH);
>  	}
>  	get_task_struct(task);
> +	rcu_read_unlock();
>  
> 
>  	/*
>  	 * Check if this process has the right to modify the specified
>  	 * process. Use the regular "ptrace_may_access()" checks.
>  	 */
>  	if (!ptrace_may_access(task, PTRACE_MODE_READ_REALCREDS)) {
> -		rcu_read_unlock();
>  		mm = ERR_PTR(-EPERM);
>  		goto out;
>  	}
> -	rcu_read_unlock();
>  
> 
>  	mm = ERR_PTR(security_task_movememory(task));
>  	if (IS_ERR(mm))

Why do you ignore our discussion for the previous version?

https://lore.kernel.org/linux-mm/8735ju7as9.fsf@yhuang6-desk2.ccr.corp.intel.com/

Best Regards,
Huang, Ying



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

* Re: [PATCH 0/4] A few cleanup and fixup patches for migration
  2022-04-09  7:38 [PATCH 0/4] A few cleanup and fixup patches for migration Miaohe Lin
                   ` (3 preceding siblings ...)
  2022-04-09  7:38 ` [PATCH 4/4] mm/migration: fix potential pte_unmap on an not mapped pte Miaohe Lin
@ 2022-04-12  2:25 ` ying.huang
  2022-04-12  3:29   ` Miaohe Lin
  4 siblings, 1 reply; 21+ messages in thread
From: ying.huang @ 2022-04-12  2:25 UTC (permalink / raw)
  To: Miaohe Lin, akpm
  Cc: mike.kravetz, shy828301, willy, ziy, minchan, apopple,
	dave.hansen, o451686892, jhubbard, peterx, naoya.horiguchi,
	mhocko, riel, osalvador, david, sfr, linux-mm, linux-kernel

On Sat, 2022-04-09 at 15:38 +0800, Miaohe Lin wrote:
> Hi everyone,
> This series contains a few patches to remove unneeded lock page and
> PageMovable check, reduce the rcu lock duration. Also we fix potential
> pte_unmap on an not mapped pte. More details can be found in the
> respective changelogs. Thanks!

It appears that you ignored my comments for the previous version.  Can
you check it?

Best Regards,
Huang, Ying

> ---
> v1:
>   rebase [1] on mainline.
> 
> [1] https://lore.kernel.org/lkml/20220304093409.25829-2-linmiaohe@huawei.com/T/
> ---
> Miaohe Lin (4):
>   mm/migration: reduce the rcu lock duration
>   mm/migration: remove unneeded lock page and PageMovable check
>   mm/migration: return errno when isolate_huge_page failed
>   mm/migration: fix potential pte_unmap on an not mapped pte
> 
>  include/linux/migrate.h |  2 +-
>  include/linux/swapops.h |  4 ++--
>  mm/filemap.c            | 10 +++++-----
>  mm/hugetlb.c            |  2 +-
>  mm/migrate.c            | 31 +++++++++++++------------------
>  5 files changed, 22 insertions(+), 27 deletions(-)
> 



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

* Re: [PATCH 4/4] mm/migration: fix potential pte_unmap on an not mapped pte
  2022-04-11 11:41   ` David Hildenbrand
@ 2022-04-12  2:55     ` Miaohe Lin
  0 siblings, 0 replies; 21+ messages in thread
From: Miaohe Lin @ 2022-04-12  2:55 UTC (permalink / raw)
  To: David Hildenbrand
  Cc: mike.kravetz, shy828301, willy, ying.huang, ziy, minchan,
	apopple, dave.hansen, o451686892, jhubbard, peterx,
	naoya.horiguchi, mhocko, riel, osalvador, sfr, linux-mm,
	linux-kernel, Andrew Morton

On 2022/4/11 19:41, David Hildenbrand wrote:
> On 09.04.22 09:38, Miaohe Lin wrote:
>> __migration_entry_wait and migration_entry_wait_on_locked assume pte is
>> always mapped from caller. But this is not the case when it's called from
>> migration_entry_wait_huge and follow_huge_pmd. And a parameter unmap to
>> indicate whether pte needs to be unmapped to fix this issue.
> 
> Hm.
> 
> 
> migration_entry_wait_on_locked documents
> 
> "@ptep: mapped pte pointer. Will return with the ptep unmapped. Only
> required for pte entries, pass NULL for pmd entries."
> 
> Setting ptep implies that we have a *mapped pte* pointer that requires unmap.
> If some code sets that although that's not guaranteed, that calling code
> is wrong and needs to be fixed to not pass a ptep.
> 
> 
> hugetlbfs never requires a map/unmap. I really don't see we there is need to
> adjust migration_entry_wait_on_locked(): just don't pass a ptep as documented.
> 
> What's really nasty here is that hugetlbfs actually mostly works on PMD/PUD,
> but we call it PTEs. One corner case might be CONT PTEs, but they are also
> accessed without a map+unmap.
> 
> Regarding __migration_entry_wait(), I think we should just stop using it for
> hugetlbfs and have a proper hugetlbfs variant that calls
> hugetlb_migration_entry_wait(ptep == NULL), and knows that although we're
> handling ptes, we're usually not actually holding ptes in our hands
> that need a map+unmap.
> 
> 
> Something like (including some cleanups mm parameter):

This really helps! Many thanks! Will try to do this in next version. :)

> 
> 
> diff --git a/include/linux/swapops.h b/include/linux/swapops.h
> index 32d517a28969..898c407ad8f7 100644
> --- a/include/linux/swapops.h
> +++ b/include/linux/swapops.h
> @@ -234,8 +234,8 @@ extern void __migration_entry_wait(struct mm_struct *mm, pte_t *ptep,
>  					spinlock_t *ptl);
>  extern void migration_entry_wait(struct mm_struct *mm, pmd_t *pmd,
>  					unsigned long address);
> -extern void migration_entry_wait_huge(struct vm_area_struct *vma,
> -		struct mm_struct *mm, pte_t *pte);
> +extern void __migration_entry_wait_huge(pte_t *ptep, spinlock_t *ptl);
> +extern void migration_entry_wait_huge(struct vm_area_struct *vma, pte_t *pte);
>  #else
>  static inline swp_entry_t make_readable_migration_entry(pgoff_t offset)
>  {
> @@ -261,8 +261,9 @@ static inline void __migration_entry_wait(struct mm_struct *mm, pte_t *ptep,
>  					spinlock_t *ptl) { }
>  static inline void migration_entry_wait(struct mm_struct *mm, pmd_t *pmd,
>  					 unsigned long address) { }
> +static inline void __migration_entry_wait_huge(pte_t *ptep, spinlock_t *ptl) { }
>  static inline void migration_entry_wait_huge(struct vm_area_struct *vma,
> -		struct mm_struct *mm, pte_t *pte) { }
> +					     pte_t *pte) { }
>  static inline int is_writable_migration_entry(swp_entry_t entry)
>  {
>  	return 0;
> diff --git a/mm/hugetlb.c b/mm/hugetlb.c
> index 48740e6c3476..2b38eaaa2e60 100644
> --- a/mm/hugetlb.c
> +++ b/mm/hugetlb.c
> @@ -5622,7 +5622,7 @@ vm_fault_t hugetlb_fault(struct mm_struct *mm, struct vm_area_struct *vma,
>  		 */
>  		entry = huge_ptep_get(ptep);
>  		if (unlikely(is_hugetlb_entry_migration(entry))) {
> -			migration_entry_wait_huge(vma, mm, ptep);
> +			migration_entry_wait_huge(vma, ptep);
>  			return 0;
>  		} else if (unlikely(is_hugetlb_entry_hwpoisoned(entry)))
>  			return VM_FAULT_HWPOISON_LARGE |
> @@ -6770,7 +6770,7 @@ follow_huge_pmd(struct mm_struct *mm, unsigned long address,
>  	} else {
>  		if (is_hugetlb_entry_migration(pte)) {
>  			spin_unlock(ptl);
> -			__migration_entry_wait(mm, (pte_t *)pmd, ptl);
> +			__migration_entry_wait_huge((pte_t *)pmd, ptl);
>  			goto retry;
>  		}
>  		/*
> diff --git a/mm/migrate.c b/mm/migrate.c
> index 231907e89b93..84b685a235fe 100644
> --- a/mm/migrate.c
> +++ b/mm/migrate.c
> @@ -315,11 +315,26 @@ void migration_entry_wait(struct mm_struct *mm, pmd_t *pmd,
>  	__migration_entry_wait(mm, ptep, ptl);
>  }
>  
> +void __migration_entry_wait_huge(pte_t *ptep, spinlock_t *ptl)
> +{
> +	swp_entry_t entry;
> +	pte_t pte;
> +
> +	spin_lock(ptl);
> +	pte = huge_ptep_get(ptep);
> +
> +	if (unlikely(!is_hugetlb_entry_migration(pte)))
> +		spin_unlock(ptl);
> +	else
> +		migration_entry_wait_on_locked(pte_to_swp_entry(pte), NULL, ptl);
> +}
> +
>  void migration_entry_wait_huge(struct vm_area_struct *vma,
>  		struct mm_struct *mm, pte_t *pte)
>  {
> -	spinlock_t *ptl = huge_pte_lockptr(hstate_vma(vma), mm, pte);
> -	__migration_entry_wait(mm, pte, ptl);
> +	spinlock_t *ptl = huge_pte_lockptr(hstate_vma(vma), vma->mm, pte);
> +
> +	__migration_entry_wait_huge(pte, ptl);
>  }
>  
>  #ifdef CONFIG_ARCH_ENABLE_THP_MIGRATION
> 


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

* Re: [PATCH 3/4] mm/migration: return errno when isolate_huge_page failed
  2022-04-11 14:10   ` Christoph Hellwig
@ 2022-04-12  3:13     ` Miaohe Lin
  0 siblings, 0 replies; 21+ messages in thread
From: Miaohe Lin @ 2022-04-12  3:13 UTC (permalink / raw)
  To: Christoph Hellwig
  Cc: akpm, mike.kravetz, shy828301, willy, ying.huang, ziy, minchan,
	apopple, dave.hansen, o451686892, jhubbard, peterx,
	naoya.horiguchi, mhocko, riel, osalvador, david, sfr, linux-mm,
	linux-kernel

On 2022/4/11 22:10, Christoph Hellwig wrote:
> On Sat, Apr 09, 2022 at 03:38:45PM +0800, Miaohe Lin wrote:
>> We might fail to isolate huge page due to e.g. the page is under migration
>> which cleared HPageMigratable. So we should return -EBUSY in this case
>> rather than always return 1 which could confuse the user.
>>
>> Fixes: e8db67eb0ded ("mm: migrate: move_pages() supports thp migration")
>> Reviewed-by: Muchun Song <songmuchun@bytedance.com>
>> Reviewed-by: Baolin Wang <baolin.wang@linux.alibaba.com>
>> Signed-off-by: Miaohe Lin <linmiaohe@huawei.com>
>> ---
>>  mm/migrate.c | 6 ++----
>>  1 file changed, 2 insertions(+), 4 deletions(-)
>>
>> diff --git a/mm/migrate.c b/mm/migrate.c
>> index 381963231a62..044656a14ae2 100644
>> --- a/mm/migrate.c
>> +++ b/mm/migrate.c
>> @@ -1632,10 +1632,8 @@ static int add_page_for_migration(struct mm_struct *mm, unsigned long addr,
>>  		goto out_putpage;
>>  
>>  	if (PageHuge(page)) {
>> -		if (PageHead(page)) {
>> -			isolate_huge_page(page, pagelist);
>> -			err = 1;
>> -		}
>> +		if (PageHead(page))
>> +			err = isolate_huge_page(page, pagelist) ? 1 : -EBUSY;
> 
> I think a:
> 
> 			err = isolate_huge_page(page, pagelist);
> 			if (!err)
> 				err = 1;

Many thanks for your comment. IIUC, isolate_huge_page does not return the wanted error code. So the
above code won't do the right thing.

Thanks.

> 
> would be a lot more readable here.
> 
> .
> 


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

* Re: [PATCH 1/4] mm/migration: reduce the rcu lock duration
  2022-04-12  2:07   ` ying.huang
@ 2022-04-12  3:21     ` Miaohe Lin
  0 siblings, 0 replies; 21+ messages in thread
From: Miaohe Lin @ 2022-04-12  3:21 UTC (permalink / raw)
  To: ying.huang, akpm
  Cc: mike.kravetz, shy828301, willy, ziy, minchan, apopple,
	dave.hansen, o451686892, jhubbard, peterx, naoya.horiguchi,
	mhocko, riel, osalvador, david, sfr, linux-mm, linux-kernel

On 2022/4/12 10:07, ying.huang@intel.com wrote:
> On Sat, 2022-04-09 at 15:38 +0800, Miaohe Lin wrote:
>> rcu_read_lock is required by grabbing the task refcount but it's not
>> needed for ptrace_may_access. So we could release the rcu lock after
>> task refcount is successfully grabbed to reduce the rcu holding time.
>>
>> Reviewed-by: Muchun Song <songmuchun@bytedance.com>
>> Signed-off-by: Miaohe Lin <linmiaohe@huawei.com>
>> ---
>>  mm/migrate.c | 3 +--
>>  1 file changed, 1 insertion(+), 2 deletions(-)
>>
>> diff --git a/mm/migrate.c b/mm/migrate.c
>> index a3d8c2be2631..d8aae6c75990 100644
>> --- a/mm/migrate.c
>> +++ b/mm/migrate.c
>> @@ -1907,17 +1907,16 @@ static struct mm_struct *find_mm_struct(pid_t pid, nodemask_t *mem_nodes)
>>  		return ERR_PTR(-ESRCH);
>>  	}
>>  	get_task_struct(task);
>> +	rcu_read_unlock();
>>  
>>
>>  	/*
>>  	 * Check if this process has the right to modify the specified
>>  	 * process. Use the regular "ptrace_may_access()" checks.
>>  	 */
>>  	if (!ptrace_may_access(task, PTRACE_MODE_READ_REALCREDS)) {
>> -		rcu_read_unlock();
>>  		mm = ERR_PTR(-EPERM);
>>  		goto out;
>>  	}
>> -	rcu_read_unlock();
>>  
>>
>>  	mm = ERR_PTR(security_task_movememory(task));
>>  	if (IS_ERR(mm))
> 
> Why do you ignore our discussion for the previous version?
> 
> https://lore.kernel.org/linux-mm/8735ju7as9.fsf@yhuang6-desk2.ccr.corp.intel.com/
> 

Sorry for confusing. I remember this patch is pending for verify. The reason I post this series is that
I want to move the other patches in this series forward while this patch is still pending for verify.

Thanks.

> Best Regards,
> Huang, Ying
> 
> 
> .
> 


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

* Re: [PATCH 0/4] A few cleanup and fixup patches for migration
  2022-04-12  2:25 ` [PATCH 0/4] A few cleanup and fixup patches for migration ying.huang
@ 2022-04-12  3:29   ` Miaohe Lin
  2022-04-12  6:33     ` ying.huang
  2022-04-12  7:00     ` ying.huang
  0 siblings, 2 replies; 21+ messages in thread
From: Miaohe Lin @ 2022-04-12  3:29 UTC (permalink / raw)
  To: ying.huang
  Cc: mike.kravetz, shy828301, willy, ziy, minchan, apopple,
	dave.hansen, o451686892, jhubbard, peterx, naoya.horiguchi,
	mhocko, riel, osalvador, david, sfr, linux-mm, linux-kernel,
	Andrew Morton

On 2022/4/12 10:25, ying.huang@intel.com wrote:
> On Sat, 2022-04-09 at 15:38 +0800, Miaohe Lin wrote:
>> Hi everyone,
>> This series contains a few patches to remove unneeded lock page and
>> PageMovable check, reduce the rcu lock duration. Also we fix potential
>> pte_unmap on an not mapped pte. More details can be found in the
>> respective changelogs. Thanks!
> 
> It appears that you ignored my comments for the previous version.  Can
> you check it?

I do remember [1] and I tried to make isolate_huge_page consistent with isolate_lru_page.
But their return value conventions are different. isolate_huge_page return 0 when
success while isolate_huge_page returns true in this case. So make them consistent
would lead to many code change. I should have added this in my changelog.

Thanks.

[1] https://lore.kernel.org/linux-mm/8735jsgctq.fsf@yhuang6-desk2.ccr.corp.intel.com/


> 
> Best Regards,
> Huang, Ying
> 
>> ---
>> v1:
>>   rebase [1] on mainline.
>>
>> [1] https://lore.kernel.org/lkml/20220304093409.25829-2-linmiaohe@huawei.com/T/
>> ---
>> Miaohe Lin (4):
>>   mm/migration: reduce the rcu lock duration
>>   mm/migration: remove unneeded lock page and PageMovable check
>>   mm/migration: return errno when isolate_huge_page failed
>>   mm/migration: fix potential pte_unmap on an not mapped pte
>>
>>  include/linux/migrate.h |  2 +-
>>  include/linux/swapops.h |  4 ++--
>>  mm/filemap.c            | 10 +++++-----
>>  mm/hugetlb.c            |  2 +-
>>  mm/migrate.c            | 31 +++++++++++++------------------
>>  5 files changed, 22 insertions(+), 27 deletions(-)
>>
> 
> 
> 
> .
> 


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

* Re: [PATCH 0/4] A few cleanup and fixup patches for migration
  2022-04-12  3:29   ` Miaohe Lin
@ 2022-04-12  6:33     ` ying.huang
  2022-04-12  8:59       ` Miaohe Lin
  2022-04-12  7:00     ` ying.huang
  1 sibling, 1 reply; 21+ messages in thread
From: ying.huang @ 2022-04-12  6:33 UTC (permalink / raw)
  To: Miaohe Lin
  Cc: mike.kravetz, shy828301, willy, ziy, minchan, apopple,
	dave.hansen, o451686892, jhubbard, peterx, naoya.horiguchi,
	mhocko, riel, osalvador, david, sfr, linux-mm, linux-kernel,
	Andrew Morton

On Tue, 2022-04-12 at 11:29 +0800, Miaohe Lin wrote:
> On 2022/4/12 10:25, ying.huang@intel.com wrote:
> > On Sat, 2022-04-09 at 15:38 +0800, Miaohe Lin wrote:
> > > Hi everyone,
> > > This series contains a few patches to remove unneeded lock page and
> > > PageMovable check, reduce the rcu lock duration. Also we fix potential
> > > pte_unmap on an not mapped pte. More details can be found in the
> > > respective changelogs. Thanks!
> > 
> > It appears that you ignored my comments for the previous version.  Can
> > you check it?
> 
> I do remember [1] and I tried to make isolate_huge_page consistent with isolate_lru_page.
> But their return value conventions are different. isolate_huge_page return 0 when
> success while isolate_huge_page returns true in this case. So make them consistent
> would lead to many code change. I should have added this in my changelog.

If you found new problem, you can reply to the original email.  Just
don't ignore the comments.

Best Regards,
Huang, Ying

> Thanks.
> 
> [1] https://lore.kernel.org/linux-mm/8735jsgctq.fsf@yhuang6-desk2.ccr.corp.intel.com/
> 
> 
> > 
> > Best Regards,
> > Huang, Ying
> > 
> > > ---
> > > v1:
> > >   rebase [1] on mainline.
> > > 
> > > [1] https://lore.kernel.org/lkml/20220304093409.25829-2-linmiaohe@huawei.com/T/
> > > ---
> > > Miaohe Lin (4):
> > >   mm/migration: reduce the rcu lock duration
> > >   mm/migration: remove unneeded lock page and PageMovable check
> > >   mm/migration: return errno when isolate_huge_page failed
> > >   mm/migration: fix potential pte_unmap on an not mapped pte
> > > 
> > >  include/linux/migrate.h |  2 +-
> > >  include/linux/swapops.h |  4 ++--
> > >  mm/filemap.c            | 10 +++++-----
> > >  mm/hugetlb.c            |  2 +-
> > >  mm/migrate.c            | 31 +++++++++++++------------------
> > >  5 files changed, 22 insertions(+), 27 deletions(-)
> > > 
> > 
> > 
> > 
> > .
> > 
> 



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

* Re: [PATCH 0/4] A few cleanup and fixup patches for migration
  2022-04-12  3:29   ` Miaohe Lin
  2022-04-12  6:33     ` ying.huang
@ 2022-04-12  7:00     ` ying.huang
  2022-04-12  9:06       ` Miaohe Lin
  1 sibling, 1 reply; 21+ messages in thread
From: ying.huang @ 2022-04-12  7:00 UTC (permalink / raw)
  To: Miaohe Lin
  Cc: mike.kravetz, shy828301, willy, ziy, minchan, apopple,
	dave.hansen, o451686892, jhubbard, peterx, naoya.horiguchi,
	mhocko, riel, osalvador, david, sfr, linux-mm, linux-kernel,
	Andrew Morton

On Tue, 2022-04-12 at 11:29 +0800, Miaohe Lin wrote:
> On 2022/4/12 10:25, ying.huang@intel.com wrote:
> > On Sat, 2022-04-09 at 15:38 +0800, Miaohe Lin wrote:
> > > Hi everyone,
> > > This series contains a few patches to remove unneeded lock page and
> > > PageMovable check, reduce the rcu lock duration. Also we fix potential
> > > pte_unmap on an not mapped pte. More details can be found in the
> > > respective changelogs. Thanks!
> > 
> > It appears that you ignored my comments for the previous version.  Can
> > you check it?
> 
> I do remember [1] and I tried to make isolate_huge_page consistent with isolate_lru_page.
> But their return value conventions are different. isolate_huge_page return 0 when
> success while isolate_huge_page returns true in this case. So make them consistent
> would lead to many code change. I should have added this in my changelog.

I found that there are only 7 callers of isolate_huge_page().  It sounds
like something that is still doable.

Best Regards,
Huang, Ying

> Thanks.
> 
> [1] https://lore.kernel.org/linux-mm/8735jsgctq.fsf@yhuang6-desk2.ccr.corp.intel.com/
> 
> 
> > 
> > Best Regards,
> > Huang, Ying
> > 
> > > ---
> > > v1:
> > >   rebase [1] on mainline.
> > > 
> > > [1] https://lore.kernel.org/lkml/20220304093409.25829-2-linmiaohe@huawei.com/T/
> > > ---
> > > Miaohe Lin (4):
> > >   mm/migration: reduce the rcu lock duration
> > >   mm/migration: remove unneeded lock page and PageMovable check
> > >   mm/migration: return errno when isolate_huge_page failed
> > >   mm/migration: fix potential pte_unmap on an not mapped pte
> > > 
> > >  include/linux/migrate.h |  2 +-
> > >  include/linux/swapops.h |  4 ++--
> > >  mm/filemap.c            | 10 +++++-----
> > >  mm/hugetlb.c            |  2 +-
> > >  mm/migrate.c            | 31 +++++++++++++------------------
> > >  5 files changed, 22 insertions(+), 27 deletions(-)
> > > 
> > 
> > 
> > 
> > .
> > 
> 



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

* Re: [PATCH 0/4] A few cleanup and fixup patches for migration
  2022-04-12  6:33     ` ying.huang
@ 2022-04-12  8:59       ` Miaohe Lin
  0 siblings, 0 replies; 21+ messages in thread
From: Miaohe Lin @ 2022-04-12  8:59 UTC (permalink / raw)
  To: ying.huang
  Cc: mike.kravetz, shy828301, willy, ziy, minchan, apopple,
	dave.hansen, o451686892, jhubbard, peterx, naoya.horiguchi,
	mhocko, riel, osalvador, david, sfr, linux-mm, linux-kernel,
	Andrew Morton

On 2022/4/12 14:33, ying.huang@intel.com wrote:
> On Tue, 2022-04-12 at 11:29 +0800, Miaohe Lin wrote:
>> On 2022/4/12 10:25, ying.huang@intel.com wrote:
>>> On Sat, 2022-04-09 at 15:38 +0800, Miaohe Lin wrote:
>>>> Hi everyone,
>>>> This series contains a few patches to remove unneeded lock page and
>>>> PageMovable check, reduce the rcu lock duration. Also we fix potential
>>>> pte_unmap on an not mapped pte. More details can be found in the
>>>> respective changelogs. Thanks!
>>>
>>> It appears that you ignored my comments for the previous version.  Can
>>> you check it?
>>
>> I do remember [1] and I tried to make isolate_huge_page consistent with isolate_lru_page.
>> But their return value conventions are different. isolate_huge_page return 0 when
>> success while isolate_huge_page returns true in this case. So make them consistent
>> would lead to many code change. I should have added this in my changelog.
> 
> If you found new problem, you can reply to the original email.  Just
> don't ignore the comments.

Sorry about it. I would take care of this next time. Thanks!

> 
> Best Regards,
> Huang, Ying
> 
>> Thanks.
>>
>> [1] https://lore.kernel.org/linux-mm/8735jsgctq.fsf@yhuang6-desk2.ccr.corp.intel.com/
>>
>>
>>>
>>> Best Regards,
>>> Huang, Ying
>>>
>>>> ---
>>>> v1:
>>>>   rebase [1] on mainline.
>>>>
>>>> [1] https://lore.kernel.org/lkml/20220304093409.25829-2-linmiaohe@huawei.com/T/
>>>> ---
>>>> Miaohe Lin (4):
>>>>   mm/migration: reduce the rcu lock duration
>>>>   mm/migration: remove unneeded lock page and PageMovable check
>>>>   mm/migration: return errno when isolate_huge_page failed
>>>>   mm/migration: fix potential pte_unmap on an not mapped pte
>>>>
>>>>  include/linux/migrate.h |  2 +-
>>>>  include/linux/swapops.h |  4 ++--
>>>>  mm/filemap.c            | 10 +++++-----
>>>>  mm/hugetlb.c            |  2 +-
>>>>  mm/migrate.c            | 31 +++++++++++++------------------
>>>>  5 files changed, 22 insertions(+), 27 deletions(-)
>>>>
>>>
>>>
>>>
>>> .
>>>
>>
> 
> 
> .
> 


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

* Re: [PATCH 0/4] A few cleanup and fixup patches for migration
  2022-04-12  7:00     ` ying.huang
@ 2022-04-12  9:06       ` Miaohe Lin
  0 siblings, 0 replies; 21+ messages in thread
From: Miaohe Lin @ 2022-04-12  9:06 UTC (permalink / raw)
  To: ying.huang
  Cc: mike.kravetz, shy828301, willy, ziy, minchan, apopple,
	dave.hansen, o451686892, jhubbard, peterx, naoya.horiguchi,
	mhocko, riel, osalvador, david, sfr, linux-mm, linux-kernel,
	Andrew Morton

On 2022/4/12 15:00, ying.huang@intel.com wrote:
> On Tue, 2022-04-12 at 11:29 +0800, Miaohe Lin wrote:
>> On 2022/4/12 10:25, ying.huang@intel.com wrote:
>>> On Sat, 2022-04-09 at 15:38 +0800, Miaohe Lin wrote:
>>>> Hi everyone,
>>>> This series contains a few patches to remove unneeded lock page and
>>>> PageMovable check, reduce the rcu lock duration. Also we fix potential
>>>> pte_unmap on an not mapped pte. More details can be found in the
>>>> respective changelogs. Thanks!
>>>
>>> It appears that you ignored my comments for the previous version.  Can
>>> you check it?
>>
>> I do remember [1] and I tried to make isolate_huge_page consistent with isolate_lru_page.
>> But their return value conventions are different. isolate_huge_page return 0 when
>> success while isolate_huge_page returns true in this case. So make them consistent
>> would lead to many code change. I should have added this in my changelog.
> 
> I found that there are only 7 callers of isolate_huge_page().  It sounds
> like something that is still doable.

Fine, I will try to do this. :)

Thanks!

> 
> Best Regards,
> Huang, Ying
> 
>> Thanks.
>>
>> [1] https://lore.kernel.org/linux-mm/8735jsgctq.fsf@yhuang6-desk2.ccr.corp.intel.com/
>>
>>
>>>
>>> Best Regards,
>>> Huang, Ying
>>>
>>>> ---
>>>> v1:
>>>>   rebase [1] on mainline.
>>>>
>>>> [1] https://lore.kernel.org/lkml/20220304093409.25829-2-linmiaohe@huawei.com/T/
>>>> ---
>>>> Miaohe Lin (4):
>>>>   mm/migration: reduce the rcu lock duration
>>>>   mm/migration: remove unneeded lock page and PageMovable check
>>>>   mm/migration: return errno when isolate_huge_page failed
>>>>   mm/migration: fix potential pte_unmap on an not mapped pte
>>>>
>>>>  include/linux/migrate.h |  2 +-
>>>>  include/linux/swapops.h |  4 ++--
>>>>  mm/filemap.c            | 10 +++++-----
>>>>  mm/hugetlb.c            |  2 +-
>>>>  mm/migrate.c            | 31 +++++++++++++------------------
>>>>  5 files changed, 22 insertions(+), 27 deletions(-)
>>>>
>>>
>>>
>>>
>>> .
>>>
>>
> 
> 
> 
> .
> 


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

end of thread, other threads:[~2022-04-12 10:18 UTC | newest]

Thread overview: 21+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-04-09  7:38 [PATCH 0/4] A few cleanup and fixup patches for migration Miaohe Lin
2022-04-09  7:38 ` [PATCH 1/4] mm/migration: reduce the rcu lock duration Miaohe Lin
2022-04-11 14:09   ` Christoph Hellwig
2022-04-12  2:07   ` ying.huang
2022-04-12  3:21     ` Miaohe Lin
2022-04-09  7:38 ` [PATCH 2/4] mm/migration: remove unneeded lock page and PageMovable check Miaohe Lin
2022-04-11 14:09   ` Christoph Hellwig
2022-04-09  7:38 ` [PATCH 3/4] mm/migration: return errno when isolate_huge_page failed Miaohe Lin
2022-04-11 14:10   ` Christoph Hellwig
2022-04-12  3:13     ` Miaohe Lin
2022-04-09  7:38 ` [PATCH 4/4] mm/migration: fix potential pte_unmap on an not mapped pte Miaohe Lin
2022-04-09 11:38   ` kernel test robot
2022-04-11  1:54     ` Miaohe Lin
2022-04-11 11:41   ` David Hildenbrand
2022-04-12  2:55     ` Miaohe Lin
2022-04-12  2:25 ` [PATCH 0/4] A few cleanup and fixup patches for migration ying.huang
2022-04-12  3:29   ` Miaohe Lin
2022-04-12  6:33     ` ying.huang
2022-04-12  8:59       ` Miaohe Lin
2022-04-12  7:00     ` ying.huang
2022-04-12  9:06       ` 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).