[-next,v2,18/19] mm: use folio_xchg_last_cpupid() in wp_page_reuse()

Message ID 20231013085603.1227349-19-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
  Convert to use folio_xchg_last_cpupid() in wp_page_reuse(), and remove
page variable.

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

Comments

Matthew Wilcox Oct. 13, 2023, 3:19 p.m. UTC | #1
On Fri, Oct 13, 2023 at 04:56:02PM +0800, Kefeng Wang wrote:
> Convert to use folio_xchg_last_cpupid() in wp_page_reuse(), and remove
> page variable.

... another case where we're changing behaviour and need to argue it's
desirable.

> -	/*
> -	 * Clear the pages cpupid information as the existing
> -	 * information potentially belongs to a now completely
> -	 * unrelated process.
> -	 */
> -	if (page)
> -		page_cpupid_xchg_last(page, (1 << LAST_CPUPID_SHIFT) - 1);
> +	if (folio) {
> +		VM_BUG_ON(folio_test_anon(folio) &&
> +			  !PageAnonExclusive(vmf->page));
> +		/*
> +		 * Clear the pages cpupid information as the existing

s/pages/folio's/

> +		 * information potentially belongs to a now completely
> +		 * unrelated process.
> +		 */
> +		folio_xchg_last_cpupid(folio, (1 << LAST_CPUPID_SHIFT) - 1);
> +	}
  

Patch

diff --git a/mm/memory.c b/mm/memory.c
index 6b58ceb0961f..e85c009917b4 100644
--- a/mm/memory.c
+++ b/mm/memory.c
@@ -3022,19 +3022,20 @@  static inline void wp_page_reuse(struct vm_fault *vmf, struct folio *folio)
 	__releases(vmf->ptl)
 {
 	struct vm_area_struct *vma = vmf->vma;
-	struct page *page = vmf->page;
 	pte_t entry;
 
 	VM_BUG_ON(!(vmf->flags & FAULT_FLAG_WRITE));
-	VM_BUG_ON(folio && folio_test_anon(folio) && !PageAnonExclusive(page));
 
-	/*
-	 * Clear the pages cpupid information as the existing
-	 * information potentially belongs to a now completely
-	 * unrelated process.
-	 */
-	if (page)
-		page_cpupid_xchg_last(page, (1 << LAST_CPUPID_SHIFT) - 1);
+	if (folio) {
+		VM_BUG_ON(folio_test_anon(folio) &&
+			  !PageAnonExclusive(vmf->page));
+		/*
+		 * Clear the pages cpupid information as the existing
+		 * information potentially belongs to a now completely
+		 * unrelated process.
+		 */
+		folio_xchg_last_cpupid(folio, (1 << LAST_CPUPID_SHIFT) - 1);
+	}
 
 	flush_cache_page(vma, vmf->address, pte_pfn(vmf->orig_pte));
 	entry = pte_mkyoung(vmf->orig_pte);