All of lore.kernel.org
 help / color / mirror / Atom feed
diff for duplicates of <20171019140426.21f51957@MiWiFi-R3-srv>

diff --git a/a/1.txt b/N1/1.txt
index 297b842..ad57278 100644
--- a/a/1.txt
+++ b/N1/1.txt
@@ -1,8 +1,8 @@
 On Mon, 16 Oct 2017 23:10:02 -0400
 jglisse@redhat.com wrote:
 
-> From: Jérôme Glisse <jglisse@redhat.com>
-> 
+> From: J=C3=A9r=C3=B4me Glisse <jglisse@redhat.com>
+>=20
 > +		/*
 > +		 * No need to call mmu_notifier_invalidate_range() as we are
 > +		 * downgrading page table protection not changing it to point
@@ -13,20 +13,23 @@ jglisse@redhat.com wrote:
 >  		if (pmdp) {
 >  #ifdef CONFIG_FS_DAX_PMD
 >  			pmd_t pmd;
-> @@ -628,7 +635,6 @@ static void dax_mapping_entry_mkclean(struct address_space *mapping,
->  			pmd = pmd_wrprotect(pmd);
->  			pmd = pmd_mkclean(pmd);
+> @@ -628,7 +635,6 @@ static void dax_mapping_entry_mkclean(struct address_=
+space *mapping,
+>  			pmd =3D pmd_wrprotect(pmd);
+>  			pmd =3D pmd_mkclean(pmd);
 >  			set_pmd_at(vma->vm_mm, address, pmdp, pmd);
 > -			mmu_notifier_invalidate_range(vma->vm_mm, start, end);
 
-Could the secondary TLB still see the mapping as dirty and propagate the dirty bit back?
+Could the secondary TLB still see the mapping as dirty and propagate the di=
+rty bit back?
 
 >  unlock_pmd:
 >  			spin_unlock(ptl);
 >  #endif
-> @@ -643,7 +649,6 @@ static void dax_mapping_entry_mkclean(struct address_space *mapping,
->  			pte = pte_wrprotect(pte);
->  			pte = pte_mkclean(pte);
+> @@ -643,7 +649,6 @@ static void dax_mapping_entry_mkclean(struct address_=
+space *mapping,
+>  			pte =3D pte_wrprotect(pte);
+>  			pte =3D pte_mkclean(pte);
 >  			set_pte_at(vma->vm_mm, address, ptep, pte);
 > -			mmu_notifier_invalidate_range(vma->vm_mm, start, end);
 
@@ -53,10 +56,11 @@ Ditto
 > index c037d3d34950..ff5bc647b51d 100644
 > --- a/mm/huge_memory.c
 > +++ b/mm/huge_memory.c
-> @@ -1186,8 +1186,15 @@ static int do_huge_pmd_wp_page_fallback(struct vm_fault *vmf, pmd_t orig_pmd,
+> @@ -1186,8 +1186,15 @@ static int do_huge_pmd_wp_page_fallback(struct vm_=
+fault *vmf, pmd_t orig_pmd,
 >  		goto out_free_pages;
 >  	VM_BUG_ON_PAGE(!PageHead(page), page);
->  
+> =20
 > +	/*
 > +	 * Leave pmd empty until pte is filled note we must notify here as
 > +	 * concurrent CPU thread might write to new page before the call to
@@ -67,13 +71,14 @@ Ditto
 > +	 */
 >  	pmdp_huge_clear_flush_notify(vma, haddr, vmf->pmd);
 > -	/* leave pmd empty until pte is filled */
->  
->  	pgtable = pgtable_trans_huge_withdraw(vma->vm_mm, vmf->pmd);
+> =20
+>  	pgtable =3D pgtable_trans_huge_withdraw(vma->vm_mm, vmf->pmd);
 >  	pmd_populate(vma->vm_mm, &_pmd, pgtable);
-> @@ -2026,8 +2033,15 @@ static void __split_huge_zero_page_pmd(struct vm_area_struct *vma,
+> @@ -2026,8 +2033,15 @@ static void __split_huge_zero_page_pmd(struct vm_a=
+rea_struct *vma,
 >  	pmd_t _pmd;
 >  	int i;
->  
+> =20
 > -	/* leave pmd empty until pte is filled */
 > -	pmdp_huge_clear_flush_notify(vma, haddr, pmd);
 > +	/*
@@ -88,14 +93,15 @@ Ditto
 
 Shouldn't the secondary TLB know if the page size changed?
 
->  
->  	pgtable = pgtable_trans_huge_withdraw(mm, pmd);
+> =20
+>  	pgtable =3D pgtable_trans_huge_withdraw(mm, pmd);
 >  	pmd_populate(mm, &_pmd, pgtable);
 > diff --git a/mm/hugetlb.c b/mm/hugetlb.c
 > index 1768efa4c501..63a63f1b536c 100644
 > --- a/mm/hugetlb.c
 > +++ b/mm/hugetlb.c
-> @@ -3254,9 +3254,14 @@ int copy_hugetlb_page_range(struct mm_struct *dst, struct mm_struct *src,
+> @@ -3254,9 +3254,14 @@ int copy_hugetlb_page_range(struct mm_struct *dst,=
+ struct mm_struct *src,
 >  			set_huge_swap_pte_at(dst, addr, dst_pte, entry, sz);
 >  		} else {
 >  			if (cow) {
@@ -113,9 +119,10 @@ OK.. so we could get write faults on write accesses from the device.
 > -				mmu_notifier_invalidate_range(src, mmun_start,
 > -								   mmun_end);
 >  			}
->  			entry = huge_ptep_get(src_pte);
->  			ptepage = pte_page(entry);
-> @@ -4288,7 +4293,12 @@ unsigned long hugetlb_change_protection(struct vm_area_struct *vma,
+>  			entry =3D huge_ptep_get(src_pte);
+>  			ptepage =3D pte_page(entry);
+> @@ -4288,7 +4293,12 @@ unsigned long hugetlb_change_protection(struct vm_=
+area_struct *vma,
 >  	 * and that page table be reused and filled with junk.
 >  	 */
 >  	flush_hugetlb_tlb_range(vma, start, end);
@@ -128,12 +135,13 @@ OK.. so we could get write faults on write accesses from the device.
 > +	 */
 >  	i_mmap_unlock_write(vma->vm_file->f_mapping);
 >  	mmu_notifier_invalidate_range_end(mm, start, end);
->  
+> =20
 > diff --git a/mm/ksm.c b/mm/ksm.c
 > index 6cb60f46cce5..be8f4576f842 100644
 > --- a/mm/ksm.c
 > +++ b/mm/ksm.c
-> @@ -1052,8 +1052,13 @@ static int write_protect_page(struct vm_area_struct *vma, struct page *page,
+> @@ -1052,8 +1052,13 @@ static int write_protect_page(struct vm_area_struc=
+t *vma, struct page *page,
 >  		 * So we clear the pte and flush the tlb before the check
 >  		 * this assure us that no O_DIRECT can happen after the check
 >  		 * or in the middle of the check.
@@ -143,14 +151,15 @@ OK.. so we could get write faults on write accesses from the device.
 > +		 *
 > +		 * See Documentation/vm/mmu_notifier.txt
 >  		 */
-> -		entry = ptep_clear_flush_notify(vma, pvmw.address, pvmw.pte);
-> +		entry = ptep_clear_flush(vma, pvmw.address, pvmw.pte);
+> -		entry =3D ptep_clear_flush_notify(vma, pvmw.address, pvmw.pte);
+> +		entry =3D ptep_clear_flush(vma, pvmw.address, pvmw.pte);
 >  		/*
 >  		 * Check that no O_DIRECT or similar I/O is in progress on the
 >  		 * page
-> @@ -1136,7 +1141,13 @@ static int replace_page(struct vm_area_struct *vma, struct page *page,
+> @@ -1136,7 +1141,13 @@ static int replace_page(struct vm_area_struct *vma=
+, struct page *page,
 >  	}
->  
+> =20
 >  	flush_cache_page(vma, addr, pte_pfn(*ptep));
 > -	ptep_clear_flush_notify(vma, addr, ptep);
 > +	/*
@@ -161,16 +170,17 @@ OK.. so we could get write faults on write accesses from the device.
 > +	 */
 > +	ptep_clear_flush(vma, addr, ptep);
 >  	set_pte_at_notify(mm, addr, ptep, newpte);
->  
+> =20
 >  	page_remove_rmap(page, false);
 > diff --git a/mm/rmap.c b/mm/rmap.c
 > index 061826278520..6b5a0f219ac0 100644
 > --- a/mm/rmap.c
 > +++ b/mm/rmap.c
-> @@ -937,10 +937,15 @@ static bool page_mkclean_one(struct page *page, struct vm_area_struct *vma,
+> @@ -937,10 +937,15 @@ static bool page_mkclean_one(struct page *page, str=
+uct vm_area_struct *vma,
 >  #endif
 >  		}
->  
+> =20
 > -		if (ret) {
 > -			mmu_notifier_invalidate_range(vma->vm_mm, cstart, cend);
 > +		/*
@@ -184,11 +194,12 @@ OK.. so we could get write faults on write accesses from the device.
 >  			(*cleaned)++;
 > -		}
 >  	}
->  
+> =20
 >  	mmu_notifier_invalidate_range_end(vma->vm_mm, start, end);
-> @@ -1424,6 +1429,10 @@ static bool try_to_unmap_one(struct page *page, struct vm_area_struct *vma,
+> @@ -1424,6 +1429,10 @@ static bool try_to_unmap_one(struct page *page, st=
+ruct vm_area_struct *vma,
 >  			if (pte_soft_dirty(pteval))
->  				swp_pte = pte_swp_mksoft_dirty(swp_pte);
+>  				swp_pte =3D pte_swp_mksoft_dirty(swp_pte);
 >  			set_pte_at(mm, pvmw.address, pvmw.pte, swp_pte);
 > +			/*
 > +			 * No need to invalidate here it will synchronize on
@@ -196,8 +207,9 @@ OK.. so we could get write faults on write accesses from the device.
 > +			 */
 >  			goto discard;
 >  		}
->  
-> @@ -1481,6 +1490,9 @@ static bool try_to_unmap_one(struct page *page, struct vm_area_struct *vma,
+> =20
+> @@ -1481,6 +1490,9 @@ static bool try_to_unmap_one(struct page *page, str=
+uct vm_area_struct *vma,
 >  			 * will take care of the rest.
 >  			 */
 >  			dec_mm_counter(mm, mm_counter(page));
@@ -207,27 +219,30 @@ OK.. so we could get write faults on write accesses from the device.
 >  		} else if (IS_ENABLED(CONFIG_MIGRATION) &&
 >  				(flags & (TTU_MIGRATION|TTU_SPLIT_FREEZE))) {
 >  			swp_entry_t entry;
-> @@ -1496,6 +1508,10 @@ static bool try_to_unmap_one(struct page *page, struct vm_area_struct *vma,
+> @@ -1496,6 +1508,10 @@ static bool try_to_unmap_one(struct page *page, st=
+ruct vm_area_struct *vma,
 >  			if (pte_soft_dirty(pteval))
->  				swp_pte = pte_swp_mksoft_dirty(swp_pte);
+>  				swp_pte =3D pte_swp_mksoft_dirty(swp_pte);
 >  			set_pte_at(mm, address, pvmw.pte, swp_pte);
 > +			/*
 > +			 * No need to invalidate here it will synchronize on
 > +			 * against the special swap migration pte.
 > +			 */
 >  		} else if (PageAnon(page)) {
->  			swp_entry_t entry = { .val = page_private(subpage) };
+>  			swp_entry_t entry =3D { .val =3D page_private(subpage) };
 >  			pte_t swp_pte;
-> @@ -1507,6 +1523,8 @@ static bool try_to_unmap_one(struct page *page, struct vm_area_struct *vma,
+> @@ -1507,6 +1523,8 @@ static bool try_to_unmap_one(struct page *page, str=
+uct vm_area_struct *vma,
 >  				WARN_ON_ONCE(1);
->  				ret = false;
+>  				ret =3D false;
 >  				/* We have to invalidate as we cleared the pte */
 > +				mmu_notifier_invalidate_range(mm, address,
 > +							address + PAGE_SIZE);
 >  				page_vma_mapped_walk_done(&pvmw);
 >  				break;
 >  			}
-> @@ -1514,6 +1532,9 @@ static bool try_to_unmap_one(struct page *page, struct vm_area_struct *vma,
+> @@ -1514,6 +1532,9 @@ static bool try_to_unmap_one(struct page *page, str=
+uct vm_area_struct *vma,
 >  			/* MADV_FREE page check */
 >  			if (!PageSwapBacked(page)) {
 >  				if (!PageDirty(page)) {
@@ -237,9 +252,10 @@ OK.. so we could get write faults on write accesses from the device.
 >  					dec_mm_counter(mm, MM_ANONPAGES);
 >  					goto discard;
 >  				}
-> @@ -1547,13 +1568,39 @@ static bool try_to_unmap_one(struct page *page, struct vm_area_struct *vma,
+> @@ -1547,13 +1568,39 @@ static bool try_to_unmap_one(struct page *page, s=
+truct vm_area_struct *vma,
 >  			if (pte_soft_dirty(pteval))
->  				swp_pte = pte_swp_mksoft_dirty(swp_pte);
+>  				swp_pte =3D pte_swp_mksoft_dirty(swp_pte);
 >  			set_pte_at(mm, address, pvmw.pte, swp_pte);
 > -		} else
 > +			/* Invalidate as we cleared the pte */
@@ -278,7 +294,7 @@ OK.. so we could get write faults on write accesses from the device.
 > -		mmu_notifier_invalidate_range(mm, address,
 > -					      address + PAGE_SIZE);
 >  	}
->  
+> =20
 >  	mmu_notifier_invalidate_range_end(vma->vm_mm, start, end);
 
 Looking at the patchset, I understand the efficiency, but I am concerned
diff --git a/a/content_digest b/N1/content_digest
index c1477e9..691c542 100644
--- a/a/content_digest
+++ b/N1/content_digest
@@ -26,8 +26,8 @@
  "On Mon, 16 Oct 2017 23:10:02 -0400\n"
  "jglisse@redhat.com wrote:\n"
  "\n"
- "> From: J\303\251r\303\264me Glisse <jglisse@redhat.com>\n"
- "> \n"
+ "> From: J=C3=A9r=C3=B4me Glisse <jglisse@redhat.com>\n"
+ ">=20\n"
  "> +\t\t/*\n"
  "> +\t\t * No need to call mmu_notifier_invalidate_range() as we are\n"
  "> +\t\t * downgrading page table protection not changing it to point\n"
@@ -38,20 +38,23 @@
  ">  \t\tif (pmdp) {\n"
  ">  #ifdef CONFIG_FS_DAX_PMD\n"
  ">  \t\t\tpmd_t pmd;\n"
- "> @@ -628,7 +635,6 @@ static void dax_mapping_entry_mkclean(struct address_space *mapping,\n"
- ">  \t\t\tpmd = pmd_wrprotect(pmd);\n"
- ">  \t\t\tpmd = pmd_mkclean(pmd);\n"
+ "> @@ -628,7 +635,6 @@ static void dax_mapping_entry_mkclean(struct address_=\n"
+ "space *mapping,\n"
+ ">  \t\t\tpmd =3D pmd_wrprotect(pmd);\n"
+ ">  \t\t\tpmd =3D pmd_mkclean(pmd);\n"
  ">  \t\t\tset_pmd_at(vma->vm_mm, address, pmdp, pmd);\n"
  "> -\t\t\tmmu_notifier_invalidate_range(vma->vm_mm, start, end);\n"
  "\n"
- "Could the secondary TLB still see the mapping as dirty and propagate the dirty bit back?\n"
+ "Could the secondary TLB still see the mapping as dirty and propagate the di=\n"
+ "rty bit back?\n"
  "\n"
  ">  unlock_pmd:\n"
  ">  \t\t\tspin_unlock(ptl);\n"
  ">  #endif\n"
- "> @@ -643,7 +649,6 @@ static void dax_mapping_entry_mkclean(struct address_space *mapping,\n"
- ">  \t\t\tpte = pte_wrprotect(pte);\n"
- ">  \t\t\tpte = pte_mkclean(pte);\n"
+ "> @@ -643,7 +649,6 @@ static void dax_mapping_entry_mkclean(struct address_=\n"
+ "space *mapping,\n"
+ ">  \t\t\tpte =3D pte_wrprotect(pte);\n"
+ ">  \t\t\tpte =3D pte_mkclean(pte);\n"
  ">  \t\t\tset_pte_at(vma->vm_mm, address, ptep, pte);\n"
  "> -\t\t\tmmu_notifier_invalidate_range(vma->vm_mm, start, end);\n"
  "\n"
@@ -78,10 +81,11 @@
  "> index c037d3d34950..ff5bc647b51d 100644\n"
  "> --- a/mm/huge_memory.c\n"
  "> +++ b/mm/huge_memory.c\n"
- "> @@ -1186,8 +1186,15 @@ static int do_huge_pmd_wp_page_fallback(struct vm_fault *vmf, pmd_t orig_pmd,\n"
+ "> @@ -1186,8 +1186,15 @@ static int do_huge_pmd_wp_page_fallback(struct vm_=\n"
+ "fault *vmf, pmd_t orig_pmd,\n"
  ">  \t\tgoto out_free_pages;\n"
  ">  \tVM_BUG_ON_PAGE(!PageHead(page), page);\n"
- ">  \n"
+ "> =20\n"
  "> +\t/*\n"
  "> +\t * Leave pmd empty until pte is filled note we must notify here as\n"
  "> +\t * concurrent CPU thread might write to new page before the call to\n"
@@ -92,13 +96,14 @@
  "> +\t */\n"
  ">  \tpmdp_huge_clear_flush_notify(vma, haddr, vmf->pmd);\n"
  "> -\t/* leave pmd empty until pte is filled */\n"
- ">  \n"
- ">  \tpgtable = pgtable_trans_huge_withdraw(vma->vm_mm, vmf->pmd);\n"
+ "> =20\n"
+ ">  \tpgtable =3D pgtable_trans_huge_withdraw(vma->vm_mm, vmf->pmd);\n"
  ">  \tpmd_populate(vma->vm_mm, &_pmd, pgtable);\n"
- "> @@ -2026,8 +2033,15 @@ static void __split_huge_zero_page_pmd(struct vm_area_struct *vma,\n"
+ "> @@ -2026,8 +2033,15 @@ static void __split_huge_zero_page_pmd(struct vm_a=\n"
+ "rea_struct *vma,\n"
  ">  \tpmd_t _pmd;\n"
  ">  \tint i;\n"
- ">  \n"
+ "> =20\n"
  "> -\t/* leave pmd empty until pte is filled */\n"
  "> -\tpmdp_huge_clear_flush_notify(vma, haddr, pmd);\n"
  "> +\t/*\n"
@@ -113,14 +118,15 @@
  "\n"
  "Shouldn't the secondary TLB know if the page size changed?\n"
  "\n"
- ">  \n"
- ">  \tpgtable = pgtable_trans_huge_withdraw(mm, pmd);\n"
+ "> =20\n"
+ ">  \tpgtable =3D pgtable_trans_huge_withdraw(mm, pmd);\n"
  ">  \tpmd_populate(mm, &_pmd, pgtable);\n"
  "> diff --git a/mm/hugetlb.c b/mm/hugetlb.c\n"
  "> index 1768efa4c501..63a63f1b536c 100644\n"
  "> --- a/mm/hugetlb.c\n"
  "> +++ b/mm/hugetlb.c\n"
- "> @@ -3254,9 +3254,14 @@ int copy_hugetlb_page_range(struct mm_struct *dst, struct mm_struct *src,\n"
+ "> @@ -3254,9 +3254,14 @@ int copy_hugetlb_page_range(struct mm_struct *dst,=\n"
+ " struct mm_struct *src,\n"
  ">  \t\t\tset_huge_swap_pte_at(dst, addr, dst_pte, entry, sz);\n"
  ">  \t\t} else {\n"
  ">  \t\t\tif (cow) {\n"
@@ -138,9 +144,10 @@
  "> -\t\t\t\tmmu_notifier_invalidate_range(src, mmun_start,\n"
  "> -\t\t\t\t\t\t\t\t   mmun_end);\n"
  ">  \t\t\t}\n"
- ">  \t\t\tentry = huge_ptep_get(src_pte);\n"
- ">  \t\t\tptepage = pte_page(entry);\n"
- "> @@ -4288,7 +4293,12 @@ unsigned long hugetlb_change_protection(struct vm_area_struct *vma,\n"
+ ">  \t\t\tentry =3D huge_ptep_get(src_pte);\n"
+ ">  \t\t\tptepage =3D pte_page(entry);\n"
+ "> @@ -4288,7 +4293,12 @@ unsigned long hugetlb_change_protection(struct vm_=\n"
+ "area_struct *vma,\n"
  ">  \t * and that page table be reused and filled with junk.\n"
  ">  \t */\n"
  ">  \tflush_hugetlb_tlb_range(vma, start, end);\n"
@@ -153,12 +160,13 @@
  "> +\t */\n"
  ">  \ti_mmap_unlock_write(vma->vm_file->f_mapping);\n"
  ">  \tmmu_notifier_invalidate_range_end(mm, start, end);\n"
- ">  \n"
+ "> =20\n"
  "> diff --git a/mm/ksm.c b/mm/ksm.c\n"
  "> index 6cb60f46cce5..be8f4576f842 100644\n"
  "> --- a/mm/ksm.c\n"
  "> +++ b/mm/ksm.c\n"
- "> @@ -1052,8 +1052,13 @@ static int write_protect_page(struct vm_area_struct *vma, struct page *page,\n"
+ "> @@ -1052,8 +1052,13 @@ static int write_protect_page(struct vm_area_struc=\n"
+ "t *vma, struct page *page,\n"
  ">  \t\t * So we clear the pte and flush the tlb before the check\n"
  ">  \t\t * this assure us that no O_DIRECT can happen after the check\n"
  ">  \t\t * or in the middle of the check.\n"
@@ -168,14 +176,15 @@
  "> +\t\t *\n"
  "> +\t\t * See Documentation/vm/mmu_notifier.txt\n"
  ">  \t\t */\n"
- "> -\t\tentry = ptep_clear_flush_notify(vma, pvmw.address, pvmw.pte);\n"
- "> +\t\tentry = ptep_clear_flush(vma, pvmw.address, pvmw.pte);\n"
+ "> -\t\tentry =3D ptep_clear_flush_notify(vma, pvmw.address, pvmw.pte);\n"
+ "> +\t\tentry =3D ptep_clear_flush(vma, pvmw.address, pvmw.pte);\n"
  ">  \t\t/*\n"
  ">  \t\t * Check that no O_DIRECT or similar I/O is in progress on the\n"
  ">  \t\t * page\n"
- "> @@ -1136,7 +1141,13 @@ static int replace_page(struct vm_area_struct *vma, struct page *page,\n"
+ "> @@ -1136,7 +1141,13 @@ static int replace_page(struct vm_area_struct *vma=\n"
+ ", struct page *page,\n"
  ">  \t}\n"
- ">  \n"
+ "> =20\n"
  ">  \tflush_cache_page(vma, addr, pte_pfn(*ptep));\n"
  "> -\tptep_clear_flush_notify(vma, addr, ptep);\n"
  "> +\t/*\n"
@@ -186,16 +195,17 @@
  "> +\t */\n"
  "> +\tptep_clear_flush(vma, addr, ptep);\n"
  ">  \tset_pte_at_notify(mm, addr, ptep, newpte);\n"
- ">  \n"
+ "> =20\n"
  ">  \tpage_remove_rmap(page, false);\n"
  "> diff --git a/mm/rmap.c b/mm/rmap.c\n"
  "> index 061826278520..6b5a0f219ac0 100644\n"
  "> --- a/mm/rmap.c\n"
  "> +++ b/mm/rmap.c\n"
- "> @@ -937,10 +937,15 @@ static bool page_mkclean_one(struct page *page, struct vm_area_struct *vma,\n"
+ "> @@ -937,10 +937,15 @@ static bool page_mkclean_one(struct page *page, str=\n"
+ "uct vm_area_struct *vma,\n"
  ">  #endif\n"
  ">  \t\t}\n"
- ">  \n"
+ "> =20\n"
  "> -\t\tif (ret) {\n"
  "> -\t\t\tmmu_notifier_invalidate_range(vma->vm_mm, cstart, cend);\n"
  "> +\t\t/*\n"
@@ -209,11 +219,12 @@
  ">  \t\t\t(*cleaned)++;\n"
  "> -\t\t}\n"
  ">  \t}\n"
- ">  \n"
+ "> =20\n"
  ">  \tmmu_notifier_invalidate_range_end(vma->vm_mm, start, end);\n"
- "> @@ -1424,6 +1429,10 @@ static bool try_to_unmap_one(struct page *page, struct vm_area_struct *vma,\n"
+ "> @@ -1424,6 +1429,10 @@ static bool try_to_unmap_one(struct page *page, st=\n"
+ "ruct vm_area_struct *vma,\n"
  ">  \t\t\tif (pte_soft_dirty(pteval))\n"
- ">  \t\t\t\tswp_pte = pte_swp_mksoft_dirty(swp_pte);\n"
+ ">  \t\t\t\tswp_pte =3D pte_swp_mksoft_dirty(swp_pte);\n"
  ">  \t\t\tset_pte_at(mm, pvmw.address, pvmw.pte, swp_pte);\n"
  "> +\t\t\t/*\n"
  "> +\t\t\t * No need to invalidate here it will synchronize on\n"
@@ -221,8 +232,9 @@
  "> +\t\t\t */\n"
  ">  \t\t\tgoto discard;\n"
  ">  \t\t}\n"
- ">  \n"
- "> @@ -1481,6 +1490,9 @@ static bool try_to_unmap_one(struct page *page, struct vm_area_struct *vma,\n"
+ "> =20\n"
+ "> @@ -1481,6 +1490,9 @@ static bool try_to_unmap_one(struct page *page, str=\n"
+ "uct vm_area_struct *vma,\n"
  ">  \t\t\t * will take care of the rest.\n"
  ">  \t\t\t */\n"
  ">  \t\t\tdec_mm_counter(mm, mm_counter(page));\n"
@@ -232,27 +244,30 @@
  ">  \t\t} else if (IS_ENABLED(CONFIG_MIGRATION) &&\n"
  ">  \t\t\t\t(flags & (TTU_MIGRATION|TTU_SPLIT_FREEZE))) {\n"
  ">  \t\t\tswp_entry_t entry;\n"
- "> @@ -1496,6 +1508,10 @@ static bool try_to_unmap_one(struct page *page, struct vm_area_struct *vma,\n"
+ "> @@ -1496,6 +1508,10 @@ static bool try_to_unmap_one(struct page *page, st=\n"
+ "ruct vm_area_struct *vma,\n"
  ">  \t\t\tif (pte_soft_dirty(pteval))\n"
- ">  \t\t\t\tswp_pte = pte_swp_mksoft_dirty(swp_pte);\n"
+ ">  \t\t\t\tswp_pte =3D pte_swp_mksoft_dirty(swp_pte);\n"
  ">  \t\t\tset_pte_at(mm, address, pvmw.pte, swp_pte);\n"
  "> +\t\t\t/*\n"
  "> +\t\t\t * No need to invalidate here it will synchronize on\n"
  "> +\t\t\t * against the special swap migration pte.\n"
  "> +\t\t\t */\n"
  ">  \t\t} else if (PageAnon(page)) {\n"
- ">  \t\t\tswp_entry_t entry = { .val = page_private(subpage) };\n"
+ ">  \t\t\tswp_entry_t entry =3D { .val =3D page_private(subpage) };\n"
  ">  \t\t\tpte_t swp_pte;\n"
- "> @@ -1507,6 +1523,8 @@ static bool try_to_unmap_one(struct page *page, struct vm_area_struct *vma,\n"
+ "> @@ -1507,6 +1523,8 @@ static bool try_to_unmap_one(struct page *page, str=\n"
+ "uct vm_area_struct *vma,\n"
  ">  \t\t\t\tWARN_ON_ONCE(1);\n"
- ">  \t\t\t\tret = false;\n"
+ ">  \t\t\t\tret =3D false;\n"
  ">  \t\t\t\t/* We have to invalidate as we cleared the pte */\n"
  "> +\t\t\t\tmmu_notifier_invalidate_range(mm, address,\n"
  "> +\t\t\t\t\t\t\taddress + PAGE_SIZE);\n"
  ">  \t\t\t\tpage_vma_mapped_walk_done(&pvmw);\n"
  ">  \t\t\t\tbreak;\n"
  ">  \t\t\t}\n"
- "> @@ -1514,6 +1532,9 @@ static bool try_to_unmap_one(struct page *page, struct vm_area_struct *vma,\n"
+ "> @@ -1514,6 +1532,9 @@ static bool try_to_unmap_one(struct page *page, str=\n"
+ "uct vm_area_struct *vma,\n"
  ">  \t\t\t/* MADV_FREE page check */\n"
  ">  \t\t\tif (!PageSwapBacked(page)) {\n"
  ">  \t\t\t\tif (!PageDirty(page)) {\n"
@@ -262,9 +277,10 @@
  ">  \t\t\t\t\tdec_mm_counter(mm, MM_ANONPAGES);\n"
  ">  \t\t\t\t\tgoto discard;\n"
  ">  \t\t\t\t}\n"
- "> @@ -1547,13 +1568,39 @@ static bool try_to_unmap_one(struct page *page, struct vm_area_struct *vma,\n"
+ "> @@ -1547,13 +1568,39 @@ static bool try_to_unmap_one(struct page *page, s=\n"
+ "truct vm_area_struct *vma,\n"
  ">  \t\t\tif (pte_soft_dirty(pteval))\n"
- ">  \t\t\t\tswp_pte = pte_swp_mksoft_dirty(swp_pte);\n"
+ ">  \t\t\t\tswp_pte =3D pte_swp_mksoft_dirty(swp_pte);\n"
  ">  \t\t\tset_pte_at(mm, address, pvmw.pte, swp_pte);\n"
  "> -\t\t} else\n"
  "> +\t\t\t/* Invalidate as we cleared the pte */\n"
@@ -303,7 +319,7 @@
  "> -\t\tmmu_notifier_invalidate_range(mm, address,\n"
  "> -\t\t\t\t\t      address + PAGE_SIZE);\n"
  ">  \t}\n"
- ">  \n"
+ "> =20\n"
  ">  \tmmu_notifier_invalidate_range_end(vma->vm_mm, start, end);\n"
  "\n"
  "Looking at the patchset, I understand the efficiency, but I am concerned\n"
@@ -311,4 +327,4 @@
  "\n"
  Balbir Singh.
 
-d22594b2b0752c604dbe0a0dbe19d9fd06d5c5dcbd7429d2f372da6062605366
+aaeb14709d4c8044f174753cf1c5c112a1c63160d7222d81b2a044ac261eebf0

diff --git a/a/1.txt b/N2/1.txt
index 297b842..c00762e 100644
--- a/a/1.txt
+++ b/N2/1.txt
@@ -285,3 +285,9 @@ Looking at the patchset, I understand the efficiency, but I am concerned
 with correctness.
 
 Balbir Singh.
+
+--
+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>
diff --git a/a/content_digest b/N2/content_digest
index c1477e9..50d98c5 100644
--- a/a/content_digest
+++ b/N2/content_digest
@@ -309,6 +309,12 @@
  "Looking at the patchset, I understand the efficiency, but I am concerned\n"
  "with correctness.\n"
  "\n"
- Balbir Singh.
+ "Balbir Singh.\n"
+ "\n"
+ "--\n"
+ "To unsubscribe, send a message with 'unsubscribe linux-mm' in\n"
+ "the body to majordomo@kvack.org.  For more info on Linux MM,\n"
+ "see: http://www.linux-mm.org/ .\n"
+ "Don't email: <a href=mailto:\"dont@kvack.org\"> email@kvack.org </a>"
 
-d22594b2b0752c604dbe0a0dbe19d9fd06d5c5dcbd7429d2f372da6062605366
+7a2dad5c628fbcb3f0489541b021d442202deaca4c1eed44c9c1527e6c368c6b

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.