From: kernel test robot <lkp@intel.com> To: Peter Xu <peterx@redhat.com>, linux-kernel@vger.kernel.org, linux-mm@kvack.org Cc: clang-built-linux@googlegroups.com, kbuild-all@lists.01.org, Axel Rasmussen <axelrasmussen@google.com>, Nadav Amit <nadav.amit@gmail.com>, Jerome Glisse <jglisse@redhat.com>, "Kirill A . Shutemov" <kirill@shutemov.name>, Jason Gunthorpe <jgg@ziepe.ca>, Alistair Popple <apopple@nvidia.com>, Andrew Morton <akpm@linux-foundation.org>, Linux Memory Management List <linux-mm@kvack.org> Subject: Re: [PATCH v5 19/26] hugetlb/userfaultfd: Handle UFFDIO_WRITEPROTECT Date: Wed, 21 Jul 2021 16:24:49 +0800 [thread overview] Message-ID: <202107211659.FK2HCJwj-lkp@intel.com> (raw) In-Reply-To: <20210715201630.211865-1-peterx@redhat.com> [-- Attachment #1: Type: text/plain, Size: 12573 bytes --] Hi Peter, Thank you for the patch! Yet something to improve: [auto build test ERROR on kselftest/next] [also build test ERROR on linus/master v5.14-rc2 next-20210720] [cannot apply to hnaz-linux-mm/master asm-generic/master arm64/for-next/core linux/master tip/x86/core] [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/0day-ci/linux/commits/Peter-Xu/userfaultfd-wp-Support-shmem-and-hugetlbfs/20210716-041947 base: https://git.kernel.org/pub/scm/linux/kernel/git/shuah/linux-kselftest.git next config: s390-randconfig-r023-20210716 (attached as .config) compiler: clang version 13.0.0 (https://github.com/llvm/llvm-project 5d5b08761f944d5b9822d582378333cc4b36a0a7) 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 # install s390 cross compiling tool for clang build # apt-get install binutils-s390x-linux-gnu # https://github.com/0day-ci/linux/commit/23779145f29982887db86a44763fa794325c479f git remote add linux-review https://github.com/0day-ci/linux git fetch --no-tags linux-review Peter-Xu/userfaultfd-wp-Support-shmem-and-hugetlbfs/20210716-041947 git checkout 23779145f29982887db86a44763fa794325c479f # save the attached .config to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=s390 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 >>): In file included from mm/hugetlb.c:19: In file included from include/linux/memblock.h:14: In file included from arch/s390/include/asm/dma.h:5: In file included from arch/s390/include/asm/io.h:75: include/asm-generic/io.h:464:31: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] val = __raw_readb(PCI_IOBASE + addr); ~~~~~~~~~~ ^ include/asm-generic/io.h:477:61: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] val = __le16_to_cpu((__le16 __force)__raw_readw(PCI_IOBASE + addr)); ~~~~~~~~~~ ^ include/uapi/linux/byteorder/big_endian.h:36:59: note: expanded from macro '__le16_to_cpu' #define __le16_to_cpu(x) __swab16((__force __u16)(__le16)(x)) ^ include/uapi/linux/swab.h:102:54: note: expanded from macro '__swab16' #define __swab16(x) (__u16)__builtin_bswap16((__u16)(x)) ^ In file included from mm/hugetlb.c:19: In file included from include/linux/memblock.h:14: In file included from arch/s390/include/asm/dma.h:5: In file included from arch/s390/include/asm/io.h:75: include/asm-generic/io.h:490:61: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] val = __le32_to_cpu((__le32 __force)__raw_readl(PCI_IOBASE + addr)); ~~~~~~~~~~ ^ include/uapi/linux/byteorder/big_endian.h:34:59: note: expanded from macro '__le32_to_cpu' #define __le32_to_cpu(x) __swab32((__force __u32)(__le32)(x)) ^ include/uapi/linux/swab.h:115:54: note: expanded from macro '__swab32' #define __swab32(x) (__u32)__builtin_bswap32((__u32)(x)) ^ In file included from mm/hugetlb.c:19: In file included from include/linux/memblock.h:14: In file included from arch/s390/include/asm/dma.h:5: In file included from arch/s390/include/asm/io.h:75: include/asm-generic/io.h:501:33: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] __raw_writeb(value, PCI_IOBASE + addr); ~~~~~~~~~~ ^ include/asm-generic/io.h:511:59: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] __raw_writew((u16 __force)cpu_to_le16(value), PCI_IOBASE + addr); ~~~~~~~~~~ ^ include/asm-generic/io.h:521:59: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] __raw_writel((u32 __force)cpu_to_le32(value), PCI_IOBASE + addr); ~~~~~~~~~~ ^ include/asm-generic/io.h:609:20: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] readsb(PCI_IOBASE + addr, buffer, count); ~~~~~~~~~~ ^ include/asm-generic/io.h:617:20: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] readsw(PCI_IOBASE + addr, buffer, count); ~~~~~~~~~~ ^ include/asm-generic/io.h:625:20: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] readsl(PCI_IOBASE + addr, buffer, count); ~~~~~~~~~~ ^ include/asm-generic/io.h:634:21: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] writesb(PCI_IOBASE + addr, buffer, count); ~~~~~~~~~~ ^ include/asm-generic/io.h:643:21: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] writesw(PCI_IOBASE + addr, buffer, count); ~~~~~~~~~~ ^ include/asm-generic/io.h:652:21: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] writesl(PCI_IOBASE + addr, buffer, count); ~~~~~~~~~~ ^ mm/hugetlb.c:5063:29: error: implicit declaration of function 'huge_pte_uffd_wp' [-Werror,-Wimplicit-function-declaration] if (userfaultfd_wp(vma) && huge_pte_uffd_wp(huge_ptep_get(ptep)) && ^ mm/hugetlb.c:5301:14: error: implicit declaration of function 'huge_pte_mkuffd_wp' [-Werror,-Wimplicit-function-declaration] _dst_pte = huge_pte_mkuffd_wp(_dst_pte); ^ mm/hugetlb.c:5301:14: note: did you mean 'pte_mkuffd_wp'? include/asm-generic/pgtable_uffd.h:18:30: note: 'pte_mkuffd_wp' declared here static __always_inline pte_t pte_mkuffd_wp(pte_t pte) ^ mm/hugetlb.c:5301:12: error: assigning to 'pte_t' from incompatible type 'int' _dst_pte = huge_pte_mkuffd_wp(_dst_pte); ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ mm/hugetlb.c:5595:11: error: implicit declaration of function 'huge_pte_mkuffd_wp' [-Werror,-Wimplicit-function-declaration] pte = huge_pte_mkuffd_wp(huge_pte_wrprotect(pte)); ^ mm/hugetlb.c:5595:9: error: assigning to 'pte_t' from incompatible type 'int' pte = huge_pte_mkuffd_wp(huge_pte_wrprotect(pte)); ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ >> mm/hugetlb.c:5597:11: error: implicit declaration of function 'huge_pte_clear_uffd_wp' [-Werror,-Wimplicit-function-declaration] pte = huge_pte_clear_uffd_wp(pte); ^ mm/hugetlb.c:5597:11: note: did you mean 'pte_clear_uffd_wp'? include/asm-generic/pgtable_uffd.h:28:30: note: 'pte_clear_uffd_wp' declared here static __always_inline pte_t pte_clear_uffd_wp(pte_t pte) ^ mm/hugetlb.c:5597:9: error: assigning to 'pte_t' from incompatible type 'int' pte = huge_pte_clear_uffd_wp(pte); ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~ 12 warnings and 7 errors generated. vim +/huge_pte_clear_uffd_wp +5597 mm/hugetlb.c 5520 5521 unsigned long hugetlb_change_protection(struct vm_area_struct *vma, 5522 unsigned long address, unsigned long end, 5523 pgprot_t newprot, unsigned long cp_flags) 5524 { 5525 struct mm_struct *mm = vma->vm_mm; 5526 unsigned long start = address; 5527 pte_t *ptep; 5528 pte_t pte; 5529 struct hstate *h = hstate_vma(vma); 5530 unsigned long pages = 0; 5531 bool shared_pmd = false; 5532 struct mmu_notifier_range range; 5533 bool uffd_wp = cp_flags & MM_CP_UFFD_WP; 5534 bool uffd_wp_resolve = cp_flags & MM_CP_UFFD_WP_RESOLVE; 5535 5536 /* 5537 * In the case of shared PMDs, the area to flush could be beyond 5538 * start/end. Set range.start/range.end to cover the maximum possible 5539 * range if PMD sharing is possible. 5540 */ 5541 mmu_notifier_range_init(&range, MMU_NOTIFY_PROTECTION_VMA, 5542 0, vma, mm, start, end); 5543 adjust_range_if_pmd_sharing_possible(vma, &range.start, &range.end); 5544 5545 BUG_ON(address >= end); 5546 flush_cache_range(vma, range.start, range.end); 5547 5548 mmu_notifier_invalidate_range_start(&range); 5549 i_mmap_lock_write(vma->vm_file->f_mapping); 5550 for (; address < end; address += huge_page_size(h)) { 5551 spinlock_t *ptl; 5552 ptep = huge_pte_offset(mm, address, huge_page_size(h)); 5553 if (!ptep) 5554 continue; 5555 ptl = huge_pte_lock(h, mm, ptep); 5556 if (huge_pmd_unshare(mm, vma, &address, ptep)) { 5557 pages++; 5558 spin_unlock(ptl); 5559 shared_pmd = true; 5560 continue; 5561 } 5562 pte = huge_ptep_get(ptep); 5563 if (unlikely(is_hugetlb_entry_hwpoisoned(pte))) { 5564 spin_unlock(ptl); 5565 continue; 5566 } 5567 if (unlikely(is_hugetlb_entry_migration(pte))) { 5568 swp_entry_t entry = pte_to_swp_entry(pte); 5569 5570 if (is_writable_migration_entry(entry)) { 5571 pte_t newpte; 5572 5573 entry = make_readable_migration_entry( 5574 swp_offset(entry)); 5575 newpte = swp_entry_to_pte(entry); 5576 if (uffd_wp) 5577 newpte = pte_swp_mkuffd_wp(newpte); 5578 else if (uffd_wp_resolve) 5579 newpte = pte_swp_clear_uffd_wp(newpte); 5580 set_huge_swap_pte_at(mm, address, ptep, 5581 newpte, huge_page_size(h)); 5582 pages++; 5583 } 5584 spin_unlock(ptl); 5585 continue; 5586 } 5587 if (!huge_pte_none(pte)) { 5588 pte_t old_pte; 5589 unsigned int shift = huge_page_shift(hstate_vma(vma)); 5590 5591 old_pte = huge_ptep_modify_prot_start(vma, address, ptep); 5592 pte = pte_mkhuge(huge_pte_modify(old_pte, newprot)); 5593 pte = arch_make_huge_pte(pte, shift, vma->vm_flags); 5594 if (uffd_wp) 5595 pte = huge_pte_mkuffd_wp(huge_pte_wrprotect(pte)); 5596 else if (uffd_wp_resolve) > 5597 pte = huge_pte_clear_uffd_wp(pte); 5598 huge_ptep_modify_prot_commit(vma, address, ptep, old_pte, pte); 5599 pages++; 5600 } 5601 spin_unlock(ptl); 5602 } 5603 /* 5604 * Must flush TLB before releasing i_mmap_rwsem: x86's huge_pmd_unshare 5605 * may have cleared our pud entry and done put_page on the page table: 5606 * once we release i_mmap_rwsem, another task can do the final put_page 5607 * and that page table be reused and filled with junk. If we actually 5608 * did unshare a page of pmds, flush the range corresponding to the pud. 5609 */ 5610 if (shared_pmd) 5611 flush_hugetlb_tlb_range(vma, range.start, range.end); 5612 else 5613 flush_hugetlb_tlb_range(vma, start, end); 5614 /* 5615 * No need to call mmu_notifier_invalidate_range() we are downgrading 5616 * page table protection not changing it to point to a new page. 5617 * 5618 * See Documentation/vm/mmu_notifier.rst 5619 */ 5620 i_mmap_unlock_write(vma->vm_file->f_mapping); 5621 mmu_notifier_invalidate_range_end(&range); 5622 5623 return pages << h->order; 5624 } 5625 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org [-- Attachment #2: .config.gz --] [-- Type: application/gzip, Size: 28300 bytes --]
WARNING: multiple messages have this Message-ID (diff)
From: kernel test robot <lkp@intel.com> To: kbuild-all@lists.01.org Subject: Re: [PATCH v5 19/26] hugetlb/userfaultfd: Handle UFFDIO_WRITEPROTECT Date: Wed, 21 Jul 2021 16:24:49 +0800 [thread overview] Message-ID: <202107211659.FK2HCJwj-lkp@intel.com> (raw) In-Reply-To: <20210715201630.211865-1-peterx@redhat.com> [-- Attachment #1: Type: text/plain, Size: 12811 bytes --] Hi Peter, Thank you for the patch! Yet something to improve: [auto build test ERROR on kselftest/next] [also build test ERROR on linus/master v5.14-rc2 next-20210720] [cannot apply to hnaz-linux-mm/master asm-generic/master arm64/for-next/core linux/master tip/x86/core] [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/0day-ci/linux/commits/Peter-Xu/userfaultfd-wp-Support-shmem-and-hugetlbfs/20210716-041947 base: https://git.kernel.org/pub/scm/linux/kernel/git/shuah/linux-kselftest.git next config: s390-randconfig-r023-20210716 (attached as .config) compiler: clang version 13.0.0 (https://github.com/llvm/llvm-project 5d5b08761f944d5b9822d582378333cc4b36a0a7) 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 # install s390 cross compiling tool for clang build # apt-get install binutils-s390x-linux-gnu # https://github.com/0day-ci/linux/commit/23779145f29982887db86a44763fa794325c479f git remote add linux-review https://github.com/0day-ci/linux git fetch --no-tags linux-review Peter-Xu/userfaultfd-wp-Support-shmem-and-hugetlbfs/20210716-041947 git checkout 23779145f29982887db86a44763fa794325c479f # save the attached .config to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=s390 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 >>): In file included from mm/hugetlb.c:19: In file included from include/linux/memblock.h:14: In file included from arch/s390/include/asm/dma.h:5: In file included from arch/s390/include/asm/io.h:75: include/asm-generic/io.h:464:31: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] val = __raw_readb(PCI_IOBASE + addr); ~~~~~~~~~~ ^ include/asm-generic/io.h:477:61: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] val = __le16_to_cpu((__le16 __force)__raw_readw(PCI_IOBASE + addr)); ~~~~~~~~~~ ^ include/uapi/linux/byteorder/big_endian.h:36:59: note: expanded from macro '__le16_to_cpu' #define __le16_to_cpu(x) __swab16((__force __u16)(__le16)(x)) ^ include/uapi/linux/swab.h:102:54: note: expanded from macro '__swab16' #define __swab16(x) (__u16)__builtin_bswap16((__u16)(x)) ^ In file included from mm/hugetlb.c:19: In file included from include/linux/memblock.h:14: In file included from arch/s390/include/asm/dma.h:5: In file included from arch/s390/include/asm/io.h:75: include/asm-generic/io.h:490:61: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] val = __le32_to_cpu((__le32 __force)__raw_readl(PCI_IOBASE + addr)); ~~~~~~~~~~ ^ include/uapi/linux/byteorder/big_endian.h:34:59: note: expanded from macro '__le32_to_cpu' #define __le32_to_cpu(x) __swab32((__force __u32)(__le32)(x)) ^ include/uapi/linux/swab.h:115:54: note: expanded from macro '__swab32' #define __swab32(x) (__u32)__builtin_bswap32((__u32)(x)) ^ In file included from mm/hugetlb.c:19: In file included from include/linux/memblock.h:14: In file included from arch/s390/include/asm/dma.h:5: In file included from arch/s390/include/asm/io.h:75: include/asm-generic/io.h:501:33: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] __raw_writeb(value, PCI_IOBASE + addr); ~~~~~~~~~~ ^ include/asm-generic/io.h:511:59: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] __raw_writew((u16 __force)cpu_to_le16(value), PCI_IOBASE + addr); ~~~~~~~~~~ ^ include/asm-generic/io.h:521:59: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] __raw_writel((u32 __force)cpu_to_le32(value), PCI_IOBASE + addr); ~~~~~~~~~~ ^ include/asm-generic/io.h:609:20: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] readsb(PCI_IOBASE + addr, buffer, count); ~~~~~~~~~~ ^ include/asm-generic/io.h:617:20: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] readsw(PCI_IOBASE + addr, buffer, count); ~~~~~~~~~~ ^ include/asm-generic/io.h:625:20: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] readsl(PCI_IOBASE + addr, buffer, count); ~~~~~~~~~~ ^ include/asm-generic/io.h:634:21: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] writesb(PCI_IOBASE + addr, buffer, count); ~~~~~~~~~~ ^ include/asm-generic/io.h:643:21: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] writesw(PCI_IOBASE + addr, buffer, count); ~~~~~~~~~~ ^ include/asm-generic/io.h:652:21: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] writesl(PCI_IOBASE + addr, buffer, count); ~~~~~~~~~~ ^ mm/hugetlb.c:5063:29: error: implicit declaration of function 'huge_pte_uffd_wp' [-Werror,-Wimplicit-function-declaration] if (userfaultfd_wp(vma) && huge_pte_uffd_wp(huge_ptep_get(ptep)) && ^ mm/hugetlb.c:5301:14: error: implicit declaration of function 'huge_pte_mkuffd_wp' [-Werror,-Wimplicit-function-declaration] _dst_pte = huge_pte_mkuffd_wp(_dst_pte); ^ mm/hugetlb.c:5301:14: note: did you mean 'pte_mkuffd_wp'? include/asm-generic/pgtable_uffd.h:18:30: note: 'pte_mkuffd_wp' declared here static __always_inline pte_t pte_mkuffd_wp(pte_t pte) ^ mm/hugetlb.c:5301:12: error: assigning to 'pte_t' from incompatible type 'int' _dst_pte = huge_pte_mkuffd_wp(_dst_pte); ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ mm/hugetlb.c:5595:11: error: implicit declaration of function 'huge_pte_mkuffd_wp' [-Werror,-Wimplicit-function-declaration] pte = huge_pte_mkuffd_wp(huge_pte_wrprotect(pte)); ^ mm/hugetlb.c:5595:9: error: assigning to 'pte_t' from incompatible type 'int' pte = huge_pte_mkuffd_wp(huge_pte_wrprotect(pte)); ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ >> mm/hugetlb.c:5597:11: error: implicit declaration of function 'huge_pte_clear_uffd_wp' [-Werror,-Wimplicit-function-declaration] pte = huge_pte_clear_uffd_wp(pte); ^ mm/hugetlb.c:5597:11: note: did you mean 'pte_clear_uffd_wp'? include/asm-generic/pgtable_uffd.h:28:30: note: 'pte_clear_uffd_wp' declared here static __always_inline pte_t pte_clear_uffd_wp(pte_t pte) ^ mm/hugetlb.c:5597:9: error: assigning to 'pte_t' from incompatible type 'int' pte = huge_pte_clear_uffd_wp(pte); ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~ 12 warnings and 7 errors generated. vim +/huge_pte_clear_uffd_wp +5597 mm/hugetlb.c 5520 5521 unsigned long hugetlb_change_protection(struct vm_area_struct *vma, 5522 unsigned long address, unsigned long end, 5523 pgprot_t newprot, unsigned long cp_flags) 5524 { 5525 struct mm_struct *mm = vma->vm_mm; 5526 unsigned long start = address; 5527 pte_t *ptep; 5528 pte_t pte; 5529 struct hstate *h = hstate_vma(vma); 5530 unsigned long pages = 0; 5531 bool shared_pmd = false; 5532 struct mmu_notifier_range range; 5533 bool uffd_wp = cp_flags & MM_CP_UFFD_WP; 5534 bool uffd_wp_resolve = cp_flags & MM_CP_UFFD_WP_RESOLVE; 5535 5536 /* 5537 * In the case of shared PMDs, the area to flush could be beyond 5538 * start/end. Set range.start/range.end to cover the maximum possible 5539 * range if PMD sharing is possible. 5540 */ 5541 mmu_notifier_range_init(&range, MMU_NOTIFY_PROTECTION_VMA, 5542 0, vma, mm, start, end); 5543 adjust_range_if_pmd_sharing_possible(vma, &range.start, &range.end); 5544 5545 BUG_ON(address >= end); 5546 flush_cache_range(vma, range.start, range.end); 5547 5548 mmu_notifier_invalidate_range_start(&range); 5549 i_mmap_lock_write(vma->vm_file->f_mapping); 5550 for (; address < end; address += huge_page_size(h)) { 5551 spinlock_t *ptl; 5552 ptep = huge_pte_offset(mm, address, huge_page_size(h)); 5553 if (!ptep) 5554 continue; 5555 ptl = huge_pte_lock(h, mm, ptep); 5556 if (huge_pmd_unshare(mm, vma, &address, ptep)) { 5557 pages++; 5558 spin_unlock(ptl); 5559 shared_pmd = true; 5560 continue; 5561 } 5562 pte = huge_ptep_get(ptep); 5563 if (unlikely(is_hugetlb_entry_hwpoisoned(pte))) { 5564 spin_unlock(ptl); 5565 continue; 5566 } 5567 if (unlikely(is_hugetlb_entry_migration(pte))) { 5568 swp_entry_t entry = pte_to_swp_entry(pte); 5569 5570 if (is_writable_migration_entry(entry)) { 5571 pte_t newpte; 5572 5573 entry = make_readable_migration_entry( 5574 swp_offset(entry)); 5575 newpte = swp_entry_to_pte(entry); 5576 if (uffd_wp) 5577 newpte = pte_swp_mkuffd_wp(newpte); 5578 else if (uffd_wp_resolve) 5579 newpte = pte_swp_clear_uffd_wp(newpte); 5580 set_huge_swap_pte_at(mm, address, ptep, 5581 newpte, huge_page_size(h)); 5582 pages++; 5583 } 5584 spin_unlock(ptl); 5585 continue; 5586 } 5587 if (!huge_pte_none(pte)) { 5588 pte_t old_pte; 5589 unsigned int shift = huge_page_shift(hstate_vma(vma)); 5590 5591 old_pte = huge_ptep_modify_prot_start(vma, address, ptep); 5592 pte = pte_mkhuge(huge_pte_modify(old_pte, newprot)); 5593 pte = arch_make_huge_pte(pte, shift, vma->vm_flags); 5594 if (uffd_wp) 5595 pte = huge_pte_mkuffd_wp(huge_pte_wrprotect(pte)); 5596 else if (uffd_wp_resolve) > 5597 pte = huge_pte_clear_uffd_wp(pte); 5598 huge_ptep_modify_prot_commit(vma, address, ptep, old_pte, pte); 5599 pages++; 5600 } 5601 spin_unlock(ptl); 5602 } 5603 /* 5604 * Must flush TLB before releasing i_mmap_rwsem: x86's huge_pmd_unshare 5605 * may have cleared our pud entry and done put_page on the page table: 5606 * once we release i_mmap_rwsem, another task can do the final put_page 5607 * and that page table be reused and filled with junk. If we actually 5608 * did unshare a page of pmds, flush the range corresponding to the pud. 5609 */ 5610 if (shared_pmd) 5611 flush_hugetlb_tlb_range(vma, range.start, range.end); 5612 else 5613 flush_hugetlb_tlb_range(vma, start, end); 5614 /* 5615 * No need to call mmu_notifier_invalidate_range() we are downgrading 5616 * page table protection not changing it to point to a new page. 5617 * 5618 * See Documentation/vm/mmu_notifier.rst 5619 */ 5620 i_mmap_unlock_write(vma->vm_file->f_mapping); 5621 mmu_notifier_invalidate_range_end(&range); 5622 5623 return pages << h->order; 5624 } 5625 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org [-- Attachment #2: config.gz --] [-- Type: application/gzip, Size: 28300 bytes --]
next prev parent reply other threads:[~2021-07-21 8:35 UTC|newest] Thread overview: 55+ messages / expand[flat|nested] mbox.gz Atom feed top 2021-07-15 20:13 [PATCH v5 00/26] userfaultfd-wp: Support shmem and hugetlbfs Peter Xu 2021-07-15 20:13 ` [PATCH v5 01/26] mm/shmem: Unconditionally set pte dirty in mfill_atomic_install_pte Peter Xu 2021-07-15 20:13 ` [PATCH v5 02/26] shmem/userfaultfd: Take care of UFFDIO_COPY_MODE_WP Peter Xu 2021-07-15 20:13 ` [PATCH v5 03/26] mm: Clear vmf->pte after pte_unmap_same() returns Peter Xu 2021-07-15 20:14 ` [PATCH v5 04/26] mm/userfaultfd: Introduce special pte for unmapped file-backed mem Peter Xu 2021-07-15 20:14 ` [PATCH v5 05/26] mm/swap: Introduce the idea of special swap ptes Peter Xu 2021-07-16 5:50 ` Alistair Popple 2021-07-16 19:11 ` Peter Xu 2021-07-21 11:28 ` Alistair Popple 2021-07-21 21:35 ` Peter Xu 2021-07-22 1:08 ` Alistair Popple 2021-07-22 15:21 ` Peter Xu 2021-07-15 20:14 ` [PATCH v5 06/26] shmem/userfaultfd: Handle uffd-wp special pte in page fault handler Peter Xu 2021-07-15 20:14 ` [PATCH v5 07/26] mm: Drop first_index/last_index in zap_details Peter Xu 2021-07-15 20:14 ` [PATCH v5 08/26] mm: Introduce zap_details.zap_flags Peter Xu 2021-07-15 20:14 ` [PATCH v5 09/26] mm: Introduce ZAP_FLAG_SKIP_SWAP Peter Xu 2021-07-15 20:14 ` [PATCH v5 10/26] shmem/userfaultfd: Persist uffd-wp bit across zapping for file-backed Peter Xu 2021-07-15 20:15 ` [PATCH v5 11/26] shmem/userfaultfd: Allow wr-protect none pte for file-backed mem Peter Xu 2021-07-15 20:16 ` [PATCH v5 12/26] shmem/userfaultfd: Allows file-back mem to be uffd wr-protected on thps Peter Xu 2021-07-15 20:16 ` [PATCH v5 13/26] shmem/userfaultfd: Handle the left-overed special swap ptes Peter Xu 2021-07-15 20:16 ` [PATCH v5 14/26] shmem/userfaultfd: Pass over uffd-wp special swap pte when fork() Peter Xu 2021-07-15 20:16 ` [PATCH v5 15/26] mm/hugetlb: Drop __unmap_hugepage_range definition from hugetlb.h Peter Xu 2021-07-15 20:16 ` [PATCH v5 16/26] mm/hugetlb: Introduce huge pte version of uffd-wp helpers Peter Xu 2021-07-15 20:16 ` [PATCH v5 17/26] hugetlb/userfaultfd: Hook page faults for uffd write protection Peter Xu 2021-07-20 15:37 ` kernel test robot 2021-07-20 15:37 ` kernel test robot 2021-07-21 21:50 ` Peter Xu 2021-07-21 21:50 ` Peter Xu 2021-07-15 20:16 ` [PATCH v5 18/26] hugetlb/userfaultfd: Take care of UFFDIO_COPY_MODE_WP Peter Xu 2021-07-20 23:59 ` kernel test robot 2021-07-20 23:59 ` kernel test robot 2021-07-15 20:16 ` [PATCH v5 19/26] hugetlb/userfaultfd: Handle UFFDIO_WRITEPROTECT Peter Xu 2021-07-21 8:24 ` kernel test robot [this message] 2021-07-21 8:24 ` kernel test robot 2021-07-15 20:16 ` [PATCH v5 20/26] mm/hugetlb: Introduce huge version of special swap pte helpers Peter Xu 2021-07-15 20:16 ` [PATCH v5 21/26] hugetlb/userfaultfd: Handle uffd-wp special pte in hugetlb pf handler Peter Xu 2021-07-15 20:16 ` [PATCH v5 22/26] hugetlb/userfaultfd: Allow wr-protect none ptes Peter Xu 2021-07-15 20:16 ` [PATCH v5 23/26] hugetlb/userfaultfd: Only drop uffd-wp special pte if required Peter Xu 2021-07-15 20:16 ` [PATCH v5 24/26] mm/pagemap: Recognize uffd-wp bit for shmem/hugetlbfs Peter Xu 2021-07-19 9:53 ` Tiberiu Georgescu 2021-07-19 16:03 ` Peter Xu 2021-07-19 17:23 ` Tiberiu Georgescu 2021-07-19 17:56 ` Peter Xu 2021-07-21 14:38 ` Ivan Teterevkov 2021-07-21 16:19 ` David Hildenbrand 2021-07-21 19:54 ` Ivan Teterevkov 2021-07-21 22:28 ` Peter Xu 2021-07-21 22:57 ` Peter Xu 2021-07-22 6:27 ` David Hildenbrand 2021-07-22 16:08 ` Peter Xu 2021-07-15 20:16 ` [PATCH v5 25/26] mm/userfaultfd: Enable write protection for shmem & hugetlbfs Peter Xu 2021-07-15 20:16 ` [PATCH v5 26/26] userfaultfd/selftests: Enable uffd-wp for shmem/hugetlbfs Peter Xu 2021-07-19 19:21 ` [PATCH v5 00/26] userfaultfd-wp: Support shmem and hugetlbfs David Hildenbrand 2021-07-19 20:12 ` Peter Xu 2021-07-22 18:30 ` Peter Xu
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=202107211659.FK2HCJwj-lkp@intel.com \ --to=lkp@intel.com \ --cc=akpm@linux-foundation.org \ --cc=apopple@nvidia.com \ --cc=axelrasmussen@google.com \ --cc=clang-built-linux@googlegroups.com \ --cc=jgg@ziepe.ca \ --cc=jglisse@redhat.com \ --cc=kbuild-all@lists.01.org \ --cc=kirill@shutemov.name \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-mm@kvack.org \ --cc=nadav.amit@gmail.com \ --cc=peterx@redhat.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
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.