[-next,v2,17/19] mm: convert wp_page_reuse() and finish_mkwrite_fault() to take a folio

Message ID 20231013085603.1227349-18-wangkefeng.wang@huawei.com
State New
Headers
Series mm: convert page cpupid functions to folios |

Commit Message

Kefeng Wang Oct. 13, 2023, 8:56 a.m. UTC
  Saves one compound_head() call, also in preparation for
page_cpupid_xchg_last() conversion.

Signed-off-by: Kefeng Wang <wangkefeng.wang@huawei.com>
---
 mm/memory.c | 18 +++++++++---------
 1 file changed, 9 insertions(+), 9 deletions(-)
  

Comments

kernel test robot Oct. 17, 2023, 7:33 a.m. UTC | #1
Hi Kefeng,

kernel test robot noticed the following build warnings:

[auto build test WARNING on akpm-mm/mm-everything]

url:    https://github.com/intel-lab-lkp/linux/commits/Kefeng-Wang/mm_types-add-virtual-and-_last_cpupid-into-struct-folio/20231017-121040
base:   https://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm.git mm-everything
patch link:    https://lore.kernel.org/r/20231013085603.1227349-18-wangkefeng.wang%40huawei.com
patch subject: [PATCH -next v2 17/19] mm: convert wp_page_reuse() and finish_mkwrite_fault() to take a folio
config: m68k-allyesconfig (https://download.01.org/0day-ci/archive/20231017/202310171537.XhmrkImn-lkp@intel.com/config)
compiler: m68k-linux-gcc (GCC) 13.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20231017/202310171537.XhmrkImn-lkp@intel.com/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202310171537.XhmrkImn-lkp@intel.com/

All warnings (new ones prefixed by >>):

>> mm/memory.c:3276: warning: Function parameter or member 'folio' not described in 'finish_mkwrite_fault'


vim +3276 mm/memory.c

2f38ab2c3c7fef Shachar Raindel 2015-04-14  3258  
66a6197c118540 Jan Kara        2016-12-14  3259  /**
66a6197c118540 Jan Kara        2016-12-14  3260   * finish_mkwrite_fault - finish page fault for a shared mapping, making PTE
66a6197c118540 Jan Kara        2016-12-14  3261   *			  writeable once the page is prepared
66a6197c118540 Jan Kara        2016-12-14  3262   *
66a6197c118540 Jan Kara        2016-12-14  3263   * @vmf: structure describing the fault
66a6197c118540 Jan Kara        2016-12-14  3264   *
66a6197c118540 Jan Kara        2016-12-14  3265   * This function handles all that is needed to finish a write page fault in a
66a6197c118540 Jan Kara        2016-12-14  3266   * shared mapping due to PTE being read-only once the mapped page is prepared.
a862f68a8b3600 Mike Rapoport   2019-03-05  3267   * It handles locking of PTE and modifying it.
66a6197c118540 Jan Kara        2016-12-14  3268   *
66a6197c118540 Jan Kara        2016-12-14  3269   * The function expects the page to be locked or other protection against
66a6197c118540 Jan Kara        2016-12-14  3270   * concurrent faults / writeback (such as DAX radix tree locks).
a862f68a8b3600 Mike Rapoport   2019-03-05  3271   *
2797e79f1a491f Liu Xiang       2021-06-28  3272   * Return: %0 on success, %VM_FAULT_NOPAGE when PTE got changed before
a862f68a8b3600 Mike Rapoport   2019-03-05  3273   * we acquired PTE lock.
66a6197c118540 Jan Kara        2016-12-14  3274   */
60fe935fc6b035 Kefeng Wang     2023-10-13  3275  static vm_fault_t finish_mkwrite_fault(struct vm_fault *vmf, struct folio *folio)
66a6197c118540 Jan Kara        2016-12-14 @3276  {
66a6197c118540 Jan Kara        2016-12-14  3277  	WARN_ON_ONCE(!(vmf->vma->vm_flags & VM_SHARED));
66a6197c118540 Jan Kara        2016-12-14  3278  	vmf->pte = pte_offset_map_lock(vmf->vma->vm_mm, vmf->pmd, vmf->address,
66a6197c118540 Jan Kara        2016-12-14  3279  				       &vmf->ptl);
3db82b9374ca92 Hugh Dickins    2023-06-08  3280  	if (!vmf->pte)
3db82b9374ca92 Hugh Dickins    2023-06-08  3281  		return VM_FAULT_NOPAGE;
66a6197c118540 Jan Kara        2016-12-14  3282  	/*
66a6197c118540 Jan Kara        2016-12-14  3283  	 * We might have raced with another page fault while we released the
66a6197c118540 Jan Kara        2016-12-14  3284  	 * pte_offset_map_lock.
66a6197c118540 Jan Kara        2016-12-14  3285  	 */
c33c794828f212 Ryan Roberts    2023-06-12  3286  	if (!pte_same(ptep_get(vmf->pte), vmf->orig_pte)) {
7df676974359f9 Bibo Mao        2020-05-27  3287  		update_mmu_tlb(vmf->vma, vmf->address, vmf->pte);
66a6197c118540 Jan Kara        2016-12-14  3288  		pte_unmap_unlock(vmf->pte, vmf->ptl);
a19e25536ed3a2 Jan Kara        2016-12-14  3289  		return VM_FAULT_NOPAGE;
66a6197c118540 Jan Kara        2016-12-14  3290  	}
60fe935fc6b035 Kefeng Wang     2023-10-13  3291  	wp_page_reuse(vmf, folio);
a19e25536ed3a2 Jan Kara        2016-12-14  3292  	return 0;
66a6197c118540 Jan Kara        2016-12-14  3293  }
66a6197c118540 Jan Kara        2016-12-14  3294
  
Kefeng Wang Oct. 17, 2023, 9:04 a.m. UTC | #2
On 2023/10/17 15:33, kernel test robot wrote:
> Hi Kefeng,
> 
> kernel test robot noticed the following build warnings:
> 
> [auto build test WARNING on akpm-mm/mm-everything]
> 
> url:    https://github.com/intel-lab-lkp/linux/commits/Kefeng-Wang/mm_types-add-virtual-and-_last_cpupid-into-struct-folio/20231017-121040
> base:   https://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm.git mm-everything
> patch link:    https://lore.kernel.org/r/20231013085603.1227349-18-wangkefeng.wang%40huawei.com
> patch subject: [PATCH -next v2 17/19] mm: convert wp_page_reuse() and finish_mkwrite_fault() to take a folio
> config: m68k-allyesconfig (https://download.01.org/0day-ci/archive/20231017/202310171537.XhmrkImn-lkp@intel.com/config)
> compiler: m68k-linux-gcc (GCC) 13.2.0
> reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20231017/202310171537.XhmrkImn-lkp@intel.com/reproduce)
> 
> If you fix the issue in a separate patch/commit (i.e. not just a new version of
> the same patch/commit), kindly add following tags
> | Reported-by: kernel test robot <lkp@intel.com>
> | Closes: https://lore.kernel.org/oe-kbuild-all/202310171537.XhmrkImn-lkp@intel.com/
> 
> All warnings (new ones prefixed by >>):
> 
>>> mm/memory.c:3276: warning: Function parameter or member 'folio' not described in 'finish_mkwrite_fault'
> 

Hi Andrew, should I resend this patch? or could you help me to update
it, also a comment(page -> folio's) on patch18, thanks.

> 
> vim +3276 mm/memory.c
> 
> 2f38ab2c3c7fef Shachar Raindel 2015-04-14  3258
> 66a6197c118540 Jan Kara        2016-12-14  3259  /**
> 66a6197c118540 Jan Kara        2016-12-14  3260   * finish_mkwrite_fault - finish page fault for a shared mapping, making PTE
> 66a6197c118540 Jan Kara        2016-12-14  3261   *			  writeable once the page is prepared
> 66a6197c118540 Jan Kara        2016-12-14  3262   *
> 66a6197c118540 Jan Kara        2016-12-14  3263   * @vmf: structure describing the fault
> 66a6197c118540 Jan Kara        2016-12-14  3264   *
> 66a6197c118540 Jan Kara        2016-12-14  3265   * This function handles all that is needed to finish a write page fault in a
> 66a6197c118540 Jan Kara        2016-12-14  3266   * shared mapping due to PTE being read-only once the mapped page is prepared.
> a862f68a8b3600 Mike Rapoport   2019-03-05  3267   * It handles locking of PTE and modifying it.
> 66a6197c118540 Jan Kara        2016-12-14  3268   *
> 66a6197c118540 Jan Kara        2016-12-14  3269   * The function expects the page to be locked or other protection against
> 66a6197c118540 Jan Kara        2016-12-14  3270   * concurrent faults / writeback (such as DAX radix tree locks).
> a862f68a8b3600 Mike Rapoport   2019-03-05  3271   *
> 2797e79f1a491f Liu Xiang       2021-06-28  3272   * Return: %0 on success, %VM_FAULT_NOPAGE when PTE got changed before
> a862f68a8b3600 Mike Rapoport   2019-03-05  3273   * we acquired PTE lock.
> 66a6197c118540 Jan Kara        2016-12-14  3274   */
> 60fe935fc6b035 Kefeng Wang     2023-10-13  3275  static vm_fault_t finish_mkwrite_fault(struct vm_fault *vmf, struct folio *folio)
> 66a6197c118540 Jan Kara        2016-12-14 @3276  {
> 66a6197c118540 Jan Kara        2016-12-14  3277  	WARN_ON_ONCE(!(vmf->vma->vm_flags & VM_SHARED));
> 66a6197c118540 Jan Kara        2016-12-14  3278  	vmf->pte = pte_offset_map_lock(vmf->vma->vm_mm, vmf->pmd, vmf->address,
> 66a6197c118540 Jan Kara        2016-12-14  3279  				       &vmf->ptl);
> 3db82b9374ca92 Hugh Dickins    2023-06-08  3280  	if (!vmf->pte)
> 3db82b9374ca92 Hugh Dickins    2023-06-08  3281  		return VM_FAULT_NOPAGE;
> 66a6197c118540 Jan Kara        2016-12-14  3282  	/*
> 66a6197c118540 Jan Kara        2016-12-14  3283  	 * We might have raced with another page fault while we released the
> 66a6197c118540 Jan Kara        2016-12-14  3284  	 * pte_offset_map_lock.
> 66a6197c118540 Jan Kara        2016-12-14  3285  	 */
> c33c794828f212 Ryan Roberts    2023-06-12  3286  	if (!pte_same(ptep_get(vmf->pte), vmf->orig_pte)) {
> 7df676974359f9 Bibo Mao        2020-05-27  3287  		update_mmu_tlb(vmf->vma, vmf->address, vmf->pte);
> 66a6197c118540 Jan Kara        2016-12-14  3288  		pte_unmap_unlock(vmf->pte, vmf->ptl);
> a19e25536ed3a2 Jan Kara        2016-12-14  3289  		return VM_FAULT_NOPAGE;
> 66a6197c118540 Jan Kara        2016-12-14  3290  	}
> 60fe935fc6b035 Kefeng Wang     2023-10-13  3291  	wp_page_reuse(vmf, folio);
> a19e25536ed3a2 Jan Kara        2016-12-14  3292  	return 0;
> 66a6197c118540 Jan Kara        2016-12-14  3293  }
> 66a6197c118540 Jan Kara        2016-12-14  3294
>
  
Andrew Morton Oct. 17, 2023, 2:51 p.m. UTC | #3
On Tue, 17 Oct 2023 17:04:41 +0800 Kefeng Wang <wangkefeng.wang@huawei.com> wrote:

> >>> mm/memory.c:3276: warning: Function parameter or member 'folio' not described in 'finish_mkwrite_fault'
> > 
> 
> Hi Andrew, should I resend this patch? or could you help me to update
> it, also a comment(page -> folio's) on patch18, thanks.

I'd assumed a new series would be sent, addressing Matthew's comments.
  

Patch

diff --git a/mm/memory.c b/mm/memory.c
index b6cc24257683..6b58ceb0961f 100644
--- a/mm/memory.c
+++ b/mm/memory.c
@@ -3018,7 +3018,7 @@  static vm_fault_t fault_dirty_shared_page(struct vm_fault *vmf)
  * case, all we need to do here is to mark the page as writable and update
  * any related book-keeping.
  */
-static inline void wp_page_reuse(struct vm_fault *vmf)
+static inline void wp_page_reuse(struct vm_fault *vmf, struct folio *folio)
 	__releases(vmf->ptl)
 {
 	struct vm_area_struct *vma = vmf->vma;
@@ -3026,7 +3026,7 @@  static inline void wp_page_reuse(struct vm_fault *vmf)
 	pte_t entry;
 
 	VM_BUG_ON(!(vmf->flags & FAULT_FLAG_WRITE));
-	VM_BUG_ON(page && PageAnon(page) && !PageAnonExclusive(page));
+	VM_BUG_ON(folio && folio_test_anon(folio) && !PageAnonExclusive(page));
 
 	/*
 	 * Clear the pages cpupid information as the existing
@@ -3272,7 +3272,7 @@  static vm_fault_t wp_page_copy(struct vm_fault *vmf)
  * Return: %0 on success, %VM_FAULT_NOPAGE when PTE got changed before
  * we acquired PTE lock.
  */
-static vm_fault_t finish_mkwrite_fault(struct vm_fault *vmf)
+static vm_fault_t finish_mkwrite_fault(struct vm_fault *vmf, struct folio *folio)
 {
 	WARN_ON_ONCE(!(vmf->vma->vm_flags & VM_SHARED));
 	vmf->pte = pte_offset_map_lock(vmf->vma->vm_mm, vmf->pmd, vmf->address,
@@ -3288,7 +3288,7 @@  static vm_fault_t finish_mkwrite_fault(struct vm_fault *vmf)
 		pte_unmap_unlock(vmf->pte, vmf->ptl);
 		return VM_FAULT_NOPAGE;
 	}
-	wp_page_reuse(vmf);
+	wp_page_reuse(vmf, folio);
 	return 0;
 }
 
@@ -3312,9 +3312,9 @@  static vm_fault_t wp_pfn_shared(struct vm_fault *vmf)
 		ret = vma->vm_ops->pfn_mkwrite(vmf);
 		if (ret & (VM_FAULT_ERROR | VM_FAULT_NOPAGE))
 			return ret;
-		return finish_mkwrite_fault(vmf);
+		return finish_mkwrite_fault(vmf, NULL);
 	}
-	wp_page_reuse(vmf);
+	wp_page_reuse(vmf, NULL);
 	return 0;
 }
 
@@ -3342,14 +3342,14 @@  static vm_fault_t wp_page_shared(struct vm_fault *vmf, struct folio *folio)
 			folio_put(folio);
 			return tmp;
 		}
-		tmp = finish_mkwrite_fault(vmf);
+		tmp = finish_mkwrite_fault(vmf, folio);
 		if (unlikely(tmp & (VM_FAULT_ERROR | VM_FAULT_NOPAGE))) {
 			folio_unlock(folio);
 			folio_put(folio);
 			return tmp;
 		}
 	} else {
-		wp_page_reuse(vmf);
+		wp_page_reuse(vmf, folio);
 		folio_lock(folio);
 	}
 	ret |= fault_dirty_shared_page(vmf);
@@ -3494,7 +3494,7 @@  static vm_fault_t do_wp_page(struct vm_fault *vmf)
 			pte_unmap_unlock(vmf->pte, vmf->ptl);
 			return 0;
 		}
-		wp_page_reuse(vmf);
+		wp_page_reuse(vmf, folio);
 		return 0;
 	}
 	/*