From: Axel Rasmussen <axelrasmussen@google.com>
Cc: Alexander Viro <viro@zeniv.linux.org.uk>,
Alexey Dobriyan <adobriyan@gmail.com>,
Andrea Arcangeli <aarcange@redhat.com>,
Andrew Morton <akpm@linux-foundation.org>,
Anshuman Khandual <anshuman.khandual@arm.com>,
Catalin Marinas <catalin.marinas@arm.com>,
Chinwen Chang <chinwen.chang@mediatek.com>,
Huang Ying <ying.huang@intel.com>,
Ingo Molnar <mingo@redhat.com>,
kbuild-all@lists.01.org, clang-built-linux@googlegroups.com,
Linux Memory Management List <linux-mm@kvack.org>
Subject: Re: [PATCH v2 7/9] userfaultfd: add UFFDIO_CONTINUE ioctl
Date: Mon, 25 Jan 2021 09:50:46 -0800 [thread overview]
Message-ID: <CAJHvVcjHmSNXVNxtR3gJSxUnB0yifr+CSi9GnZDXrHeQwi2EpA@mail.gmail.com> (raw)
In-Reply-To: <202101252146.VjG3nQXC-lkp@intel.com>
This build error seems to be caused by a missing #ifdef
CONFIG_USERFAULTFD. I'll send a v3 with this fix, after waiting for
other feedback on the v2 version.
On Mon, Jan 25, 2021 at 5:37 AM kernel test robot <lkp@intel.com> wrote:
>
> Hi Axel,
>
> Thank you for the patch! Yet something to improve:
>
> [auto build test ERROR on arm64/for-next/core]
> [also build test ERROR on powerpc/next s390/features tip/perf/core linus/master v5.11-rc5 next-20210122]
> [cannot apply to hp-parisc/for-next hnaz-linux-mm/master ia64/next sparc-next/master sparc/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/0day-ci/linux/commits/Axel-Rasmussen/userfaultfd-add-minor-fault-handling/20210125-104035
> base: https://git.kernel.org/pub/scm/linux/kernel/git/arm64/linux.git for-next/core
> config: x86_64-randconfig-a013-20210125 (attached as .config)
> compiler: clang version 12.0.0 (https://github.com/llvm/llvm-project 12d0753aca22896fda2cf76781b0ee0524d55065)
> 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 x86_64 cross compiling tool for clang build
> # apt-get install binutils-x86-64-linux-gnu
> # https://github.com/0day-ci/linux/commit/b8fb53c3a341b9b853aa3286286c807088311dbd
> git remote add linux-review https://github.com/0day-ci/linux
> git fetch --no-tags linux-review Axel-Rasmussen/userfaultfd-add-minor-fault-handling/20210125-104035
> git checkout b8fb53c3a341b9b853aa3286286c807088311dbd
> # save the attached .config to linux build tree
> COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=x86_64
>
> 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:39:
> include/linux/hugetlb.h:142:10: warning: declaration of 'enum mcopy_atomic_mode' will not be visible outside of this function [-Wvisibility]
> enum mcopy_atomic_mode mode,
> ^
> mm/hugetlb.c:4659:13: warning: declaration of 'enum mcopy_atomic_mode' will not be visible outside of this function [-Wvisibility]
> enum mcopy_atomic_mode mode,
> ^
> >> mm/hugetlb.c:4654:5: error: conflicting types for 'hugetlb_mcopy_atomic_pte'
> int hugetlb_mcopy_atomic_pte(struct mm_struct *dst_mm,
> ^
> include/linux/hugetlb.h:138:5: note: previous declaration is here
> int hugetlb_mcopy_atomic_pte(struct mm_struct *dst_mm, pte_t *dst_pte,
> ^
> >> mm/hugetlb.c:4659:31: error: variable has incomplete type 'enum mcopy_atomic_mode'
> enum mcopy_atomic_mode mode,
> ^
> mm/hugetlb.c:4659:13: note: forward declaration of 'enum mcopy_atomic_mode'
> enum mcopy_atomic_mode mode,
> ^
> >> mm/hugetlb.c:4675:25: error: use of undeclared identifier 'MCOPY_ATOMIC_CONTINUE'
> if (!*pagep && mode != MCOPY_ATOMIC_CONTINUE) {
> ^
> mm/hugetlb.c:4692:21: error: use of undeclared identifier 'MCOPY_ATOMIC_CONTINUE'
> } else if (mode == MCOPY_ATOMIC_CONTINUE) {
> ^
> mm/hugetlb.c:4711:27: error: use of undeclared identifier 'MCOPY_ATOMIC_CONTINUE'
> if (vm_shared && mode != MCOPY_ATOMIC_CONTINUE) {
> ^
> mm/hugetlb.c:4771:14: error: use of undeclared identifier 'MCOPY_ATOMIC_CONTINUE'
> if (mode != MCOPY_ATOMIC_CONTINUE)
> ^
> 2 warnings and 6 errors generated.
>
>
> vim +/hugetlb_mcopy_atomic_pte +4654 mm/hugetlb.c
>
> 86e5216f8d8aa25 Adam Litke 2006-01-06 4649
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4650 /*
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4651 * Used by userfaultfd UFFDIO_COPY. Based on mcopy_atomic_pte with
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4652 * modifications for huge pages.
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4653 */
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 @4654 int hugetlb_mcopy_atomic_pte(struct mm_struct *dst_mm,
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4655 pte_t *dst_pte,
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4656 struct vm_area_struct *dst_vma,
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4657 unsigned long dst_addr,
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4658 unsigned long src_addr,
> b8fb53c3a341b9b Axel Rasmussen 2021-01-22 @4659 enum mcopy_atomic_mode mode,
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4660 struct page **pagep)
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4661 {
> 1e3921471354244 Andrea Arcangeli 2017-11-02 4662 struct address_space *mapping;
> 1e3921471354244 Andrea Arcangeli 2017-11-02 4663 pgoff_t idx;
> 1e3921471354244 Andrea Arcangeli 2017-11-02 4664 unsigned long size;
> 1c9e8def43a3452 Mike Kravetz 2017-02-22 4665 int vm_shared = dst_vma->vm_flags & VM_SHARED;
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4666 struct hstate *h = hstate_vma(dst_vma);
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4667 pte_t _dst_pte;
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4668 spinlock_t *ptl;
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4669 int ret;
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4670 struct page *page;
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4671
> b8fb53c3a341b9b Axel Rasmussen 2021-01-22 4672 mapping = dst_vma->vm_file->f_mapping;
> b8fb53c3a341b9b Axel Rasmussen 2021-01-22 4673 idx = vma_hugecache_offset(h, dst_vma, dst_addr);
> b8fb53c3a341b9b Axel Rasmussen 2021-01-22 4674
> b8fb53c3a341b9b Axel Rasmussen 2021-01-22 @4675 if (!*pagep && mode != MCOPY_ATOMIC_CONTINUE) {
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4676 ret = -ENOMEM;
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4677 page = alloc_huge_page(dst_vma, dst_addr, 0);
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4678 if (IS_ERR(page))
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4679 goto out;
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4680
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4681 ret = copy_huge_page_from_user(page,
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4682 (const void __user *) src_addr,
> 810a56b943e265b Mike Kravetz 2017-02-22 4683 pages_per_huge_page(h), false);
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4684
> c1e8d7c6a7a682e Michel Lespinasse 2020-06-08 4685 /* fallback to copy_from_user outside mmap_lock */
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4686 if (unlikely(ret)) {
> 9e368259ad98835 Andrea Arcangeli 2018-11-30 4687 ret = -ENOENT;
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4688 *pagep = page;
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4689 /* don't free the page */
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4690 goto out;
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4691 }
> b8fb53c3a341b9b Axel Rasmussen 2021-01-22 4692 } else if (mode == MCOPY_ATOMIC_CONTINUE) {
> b8fb53c3a341b9b Axel Rasmussen 2021-01-22 4693 ret = -EFAULT;
> b8fb53c3a341b9b Axel Rasmussen 2021-01-22 4694 page = find_lock_page(mapping, idx);
> b8fb53c3a341b9b Axel Rasmussen 2021-01-22 4695 *pagep = NULL;
> b8fb53c3a341b9b Axel Rasmussen 2021-01-22 4696 if (!page)
> b8fb53c3a341b9b Axel Rasmussen 2021-01-22 4697 goto out;
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4698 } else {
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4699 page = *pagep;
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4700 *pagep = NULL;
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4701 }
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4702
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4703 /*
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4704 * The memory barrier inside __SetPageUptodate makes sure that
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4705 * preceding stores to the page contents become visible before
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4706 * the set_pte_at() write.
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4707 */
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4708 __SetPageUptodate(page);
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4709
> b8fb53c3a341b9b Axel Rasmussen 2021-01-22 4710 /* Add shared, newly allocated pages to the page cache. */
> b8fb53c3a341b9b Axel Rasmussen 2021-01-22 4711 if (vm_shared && mode != MCOPY_ATOMIC_CONTINUE) {
> 1e3921471354244 Andrea Arcangeli 2017-11-02 4712 size = i_size_read(mapping->host) >> huge_page_shift(h);
> 1e3921471354244 Andrea Arcangeli 2017-11-02 4713 ret = -EFAULT;
> 1e3921471354244 Andrea Arcangeli 2017-11-02 4714 if (idx >= size)
> 1e3921471354244 Andrea Arcangeli 2017-11-02 4715 goto out_release_nounlock;
> 1c9e8def43a3452 Mike Kravetz 2017-02-22 4716
> 1e3921471354244 Andrea Arcangeli 2017-11-02 4717 /*
> 1e3921471354244 Andrea Arcangeli 2017-11-02 4718 * Serialization between remove_inode_hugepages() and
> 1e3921471354244 Andrea Arcangeli 2017-11-02 4719 * huge_add_to_page_cache() below happens through the
> 1e3921471354244 Andrea Arcangeli 2017-11-02 4720 * hugetlb_fault_mutex_table that here must be hold by
> 1e3921471354244 Andrea Arcangeli 2017-11-02 4721 * the caller.
> 1e3921471354244 Andrea Arcangeli 2017-11-02 4722 */
> 1c9e8def43a3452 Mike Kravetz 2017-02-22 4723 ret = huge_add_to_page_cache(page, mapping, idx);
> 1c9e8def43a3452 Mike Kravetz 2017-02-22 4724 if (ret)
> 1c9e8def43a3452 Mike Kravetz 2017-02-22 4725 goto out_release_nounlock;
> 1c9e8def43a3452 Mike Kravetz 2017-02-22 4726 }
> 1c9e8def43a3452 Mike Kravetz 2017-02-22 4727
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4728 ptl = huge_pte_lockptr(h, dst_mm, dst_pte);
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4729 spin_lock(ptl);
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4730
> 1e3921471354244 Andrea Arcangeli 2017-11-02 4731 /*
> 1e3921471354244 Andrea Arcangeli 2017-11-02 4732 * Recheck the i_size after holding PT lock to make sure not
> 1e3921471354244 Andrea Arcangeli 2017-11-02 4733 * to leave any page mapped (as page_mapped()) beyond the end
> 1e3921471354244 Andrea Arcangeli 2017-11-02 4734 * of the i_size (remove_inode_hugepages() is strict about
> 1e3921471354244 Andrea Arcangeli 2017-11-02 4735 * enforcing that). If we bail out here, we'll also leave a
> 1e3921471354244 Andrea Arcangeli 2017-11-02 4736 * page in the radix tree in the vm_shared case beyond the end
> 1e3921471354244 Andrea Arcangeli 2017-11-02 4737 * of the i_size, but remove_inode_hugepages() will take care
> 1e3921471354244 Andrea Arcangeli 2017-11-02 4738 * of it as soon as we drop the hugetlb_fault_mutex_table.
> 1e3921471354244 Andrea Arcangeli 2017-11-02 4739 */
> 1e3921471354244 Andrea Arcangeli 2017-11-02 4740 size = i_size_read(mapping->host) >> huge_page_shift(h);
> 1e3921471354244 Andrea Arcangeli 2017-11-02 4741 ret = -EFAULT;
> 1e3921471354244 Andrea Arcangeli 2017-11-02 4742 if (idx >= size)
> 1e3921471354244 Andrea Arcangeli 2017-11-02 4743 goto out_release_unlock;
> 1e3921471354244 Andrea Arcangeli 2017-11-02 4744
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4745 ret = -EEXIST;
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4746 if (!huge_pte_none(huge_ptep_get(dst_pte)))
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4747 goto out_release_unlock;
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4748
> 1c9e8def43a3452 Mike Kravetz 2017-02-22 4749 if (vm_shared) {
> 1c9e8def43a3452 Mike Kravetz 2017-02-22 4750 page_dup_rmap(page, true);
> 1c9e8def43a3452 Mike Kravetz 2017-02-22 4751 } else {
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4752 ClearPagePrivate(page);
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4753 hugepage_add_new_anon_rmap(page, dst_vma, dst_addr);
> 1c9e8def43a3452 Mike Kravetz 2017-02-22 4754 }
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4755
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4756 _dst_pte = make_huge_pte(dst_vma, page, dst_vma->vm_flags & VM_WRITE);
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4757 if (dst_vma->vm_flags & VM_WRITE)
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4758 _dst_pte = huge_pte_mkdirty(_dst_pte);
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4759 _dst_pte = pte_mkyoung(_dst_pte);
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4760
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4761 set_huge_pte_at(dst_mm, dst_addr, dst_pte, _dst_pte);
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4762
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4763 (void)huge_ptep_set_access_flags(dst_vma, dst_addr, dst_pte, _dst_pte,
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4764 dst_vma->vm_flags & VM_WRITE);
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4765 hugetlb_count_add(pages_per_huge_page(h), dst_mm);
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4766
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4767 /* No need to invalidate - it was non-present before */
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4768 update_mmu_cache(dst_vma, dst_addr, dst_pte);
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4769
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4770 spin_unlock(ptl);
> b8fb53c3a341b9b Axel Rasmussen 2021-01-22 4771 if (mode != MCOPY_ATOMIC_CONTINUE)
> cb6acd01e2e43fd Mike Kravetz 2019-02-28 4772 set_page_huge_active(page);
> 1c9e8def43a3452 Mike Kravetz 2017-02-22 4773 if (vm_shared)
> 1c9e8def43a3452 Mike Kravetz 2017-02-22 4774 unlock_page(page);
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4775 ret = 0;
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4776 out:
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4777 return ret;
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4778 out_release_unlock:
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4779 spin_unlock(ptl);
> 1c9e8def43a3452 Mike Kravetz 2017-02-22 4780 if (vm_shared)
> 1c9e8def43a3452 Mike Kravetz 2017-02-22 4781 unlock_page(page);
> 5af10dfd0afc559 Andrea Arcangeli 2017-08-10 4782 out_release_nounlock:
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4783 put_page(page);
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4784 goto out;
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4785 }
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4786
>
> ---
> 0-DAY CI Kernel Test Service, Intel Corporation
> https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
WARNING: multiple messages have this Message-ID (diff)
From: Axel Rasmussen <axelrasmussen@google.com>
To: kbuild-all@lists.01.org
Subject: Re: [PATCH v2 7/9] userfaultfd: add UFFDIO_CONTINUE ioctl
Date: Mon, 25 Jan 2021 09:50:46 -0800 [thread overview]
Message-ID: <CAJHvVcjHmSNXVNxtR3gJSxUnB0yifr+CSi9GnZDXrHeQwi2EpA@mail.gmail.com> (raw)
In-Reply-To: <202101252146.VjG3nQXC-lkp@intel.com>
[-- Attachment #1: Type: text/plain, Size: 16379 bytes --]
This build error seems to be caused by a missing #ifdef
CONFIG_USERFAULTFD. I'll send a v3 with this fix, after waiting for
other feedback on the v2 version.
On Mon, Jan 25, 2021 at 5:37 AM kernel test robot <lkp@intel.com> wrote:
>
> Hi Axel,
>
> Thank you for the patch! Yet something to improve:
>
> [auto build test ERROR on arm64/for-next/core]
> [also build test ERROR on powerpc/next s390/features tip/perf/core linus/master v5.11-rc5 next-20210122]
> [cannot apply to hp-parisc/for-next hnaz-linux-mm/master ia64/next sparc-next/master sparc/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/0day-ci/linux/commits/Axel-Rasmussen/userfaultfd-add-minor-fault-handling/20210125-104035
> base: https://git.kernel.org/pub/scm/linux/kernel/git/arm64/linux.git for-next/core
> config: x86_64-randconfig-a013-20210125 (attached as .config)
> compiler: clang version 12.0.0 (https://github.com/llvm/llvm-project 12d0753aca22896fda2cf76781b0ee0524d55065)
> 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 x86_64 cross compiling tool for clang build
> # apt-get install binutils-x86-64-linux-gnu
> # https://github.com/0day-ci/linux/commit/b8fb53c3a341b9b853aa3286286c807088311dbd
> git remote add linux-review https://github.com/0day-ci/linux
> git fetch --no-tags linux-review Axel-Rasmussen/userfaultfd-add-minor-fault-handling/20210125-104035
> git checkout b8fb53c3a341b9b853aa3286286c807088311dbd
> # save the attached .config to linux build tree
> COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=x86_64
>
> 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:39:
> include/linux/hugetlb.h:142:10: warning: declaration of 'enum mcopy_atomic_mode' will not be visible outside of this function [-Wvisibility]
> enum mcopy_atomic_mode mode,
> ^
> mm/hugetlb.c:4659:13: warning: declaration of 'enum mcopy_atomic_mode' will not be visible outside of this function [-Wvisibility]
> enum mcopy_atomic_mode mode,
> ^
> >> mm/hugetlb.c:4654:5: error: conflicting types for 'hugetlb_mcopy_atomic_pte'
> int hugetlb_mcopy_atomic_pte(struct mm_struct *dst_mm,
> ^
> include/linux/hugetlb.h:138:5: note: previous declaration is here
> int hugetlb_mcopy_atomic_pte(struct mm_struct *dst_mm, pte_t *dst_pte,
> ^
> >> mm/hugetlb.c:4659:31: error: variable has incomplete type 'enum mcopy_atomic_mode'
> enum mcopy_atomic_mode mode,
> ^
> mm/hugetlb.c:4659:13: note: forward declaration of 'enum mcopy_atomic_mode'
> enum mcopy_atomic_mode mode,
> ^
> >> mm/hugetlb.c:4675:25: error: use of undeclared identifier 'MCOPY_ATOMIC_CONTINUE'
> if (!*pagep && mode != MCOPY_ATOMIC_CONTINUE) {
> ^
> mm/hugetlb.c:4692:21: error: use of undeclared identifier 'MCOPY_ATOMIC_CONTINUE'
> } else if (mode == MCOPY_ATOMIC_CONTINUE) {
> ^
> mm/hugetlb.c:4711:27: error: use of undeclared identifier 'MCOPY_ATOMIC_CONTINUE'
> if (vm_shared && mode != MCOPY_ATOMIC_CONTINUE) {
> ^
> mm/hugetlb.c:4771:14: error: use of undeclared identifier 'MCOPY_ATOMIC_CONTINUE'
> if (mode != MCOPY_ATOMIC_CONTINUE)
> ^
> 2 warnings and 6 errors generated.
>
>
> vim +/hugetlb_mcopy_atomic_pte +4654 mm/hugetlb.c
>
> 86e5216f8d8aa25 Adam Litke 2006-01-06 4649
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4650 /*
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4651 * Used by userfaultfd UFFDIO_COPY. Based on mcopy_atomic_pte with
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4652 * modifications for huge pages.
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4653 */
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 @4654 int hugetlb_mcopy_atomic_pte(struct mm_struct *dst_mm,
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4655 pte_t *dst_pte,
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4656 struct vm_area_struct *dst_vma,
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4657 unsigned long dst_addr,
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4658 unsigned long src_addr,
> b8fb53c3a341b9b Axel Rasmussen 2021-01-22 @4659 enum mcopy_atomic_mode mode,
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4660 struct page **pagep)
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4661 {
> 1e3921471354244 Andrea Arcangeli 2017-11-02 4662 struct address_space *mapping;
> 1e3921471354244 Andrea Arcangeli 2017-11-02 4663 pgoff_t idx;
> 1e3921471354244 Andrea Arcangeli 2017-11-02 4664 unsigned long size;
> 1c9e8def43a3452 Mike Kravetz 2017-02-22 4665 int vm_shared = dst_vma->vm_flags & VM_SHARED;
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4666 struct hstate *h = hstate_vma(dst_vma);
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4667 pte_t _dst_pte;
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4668 spinlock_t *ptl;
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4669 int ret;
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4670 struct page *page;
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4671
> b8fb53c3a341b9b Axel Rasmussen 2021-01-22 4672 mapping = dst_vma->vm_file->f_mapping;
> b8fb53c3a341b9b Axel Rasmussen 2021-01-22 4673 idx = vma_hugecache_offset(h, dst_vma, dst_addr);
> b8fb53c3a341b9b Axel Rasmussen 2021-01-22 4674
> b8fb53c3a341b9b Axel Rasmussen 2021-01-22 @4675 if (!*pagep && mode != MCOPY_ATOMIC_CONTINUE) {
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4676 ret = -ENOMEM;
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4677 page = alloc_huge_page(dst_vma, dst_addr, 0);
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4678 if (IS_ERR(page))
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4679 goto out;
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4680
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4681 ret = copy_huge_page_from_user(page,
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4682 (const void __user *) src_addr,
> 810a56b943e265b Mike Kravetz 2017-02-22 4683 pages_per_huge_page(h), false);
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4684
> c1e8d7c6a7a682e Michel Lespinasse 2020-06-08 4685 /* fallback to copy_from_user outside mmap_lock */
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4686 if (unlikely(ret)) {
> 9e368259ad98835 Andrea Arcangeli 2018-11-30 4687 ret = -ENOENT;
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4688 *pagep = page;
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4689 /* don't free the page */
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4690 goto out;
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4691 }
> b8fb53c3a341b9b Axel Rasmussen 2021-01-22 4692 } else if (mode == MCOPY_ATOMIC_CONTINUE) {
> b8fb53c3a341b9b Axel Rasmussen 2021-01-22 4693 ret = -EFAULT;
> b8fb53c3a341b9b Axel Rasmussen 2021-01-22 4694 page = find_lock_page(mapping, idx);
> b8fb53c3a341b9b Axel Rasmussen 2021-01-22 4695 *pagep = NULL;
> b8fb53c3a341b9b Axel Rasmussen 2021-01-22 4696 if (!page)
> b8fb53c3a341b9b Axel Rasmussen 2021-01-22 4697 goto out;
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4698 } else {
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4699 page = *pagep;
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4700 *pagep = NULL;
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4701 }
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4702
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4703 /*
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4704 * The memory barrier inside __SetPageUptodate makes sure that
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4705 * preceding stores to the page contents become visible before
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4706 * the set_pte_at() write.
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4707 */
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4708 __SetPageUptodate(page);
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4709
> b8fb53c3a341b9b Axel Rasmussen 2021-01-22 4710 /* Add shared, newly allocated pages to the page cache. */
> b8fb53c3a341b9b Axel Rasmussen 2021-01-22 4711 if (vm_shared && mode != MCOPY_ATOMIC_CONTINUE) {
> 1e3921471354244 Andrea Arcangeli 2017-11-02 4712 size = i_size_read(mapping->host) >> huge_page_shift(h);
> 1e3921471354244 Andrea Arcangeli 2017-11-02 4713 ret = -EFAULT;
> 1e3921471354244 Andrea Arcangeli 2017-11-02 4714 if (idx >= size)
> 1e3921471354244 Andrea Arcangeli 2017-11-02 4715 goto out_release_nounlock;
> 1c9e8def43a3452 Mike Kravetz 2017-02-22 4716
> 1e3921471354244 Andrea Arcangeli 2017-11-02 4717 /*
> 1e3921471354244 Andrea Arcangeli 2017-11-02 4718 * Serialization between remove_inode_hugepages() and
> 1e3921471354244 Andrea Arcangeli 2017-11-02 4719 * huge_add_to_page_cache() below happens through the
> 1e3921471354244 Andrea Arcangeli 2017-11-02 4720 * hugetlb_fault_mutex_table that here must be hold by
> 1e3921471354244 Andrea Arcangeli 2017-11-02 4721 * the caller.
> 1e3921471354244 Andrea Arcangeli 2017-11-02 4722 */
> 1c9e8def43a3452 Mike Kravetz 2017-02-22 4723 ret = huge_add_to_page_cache(page, mapping, idx);
> 1c9e8def43a3452 Mike Kravetz 2017-02-22 4724 if (ret)
> 1c9e8def43a3452 Mike Kravetz 2017-02-22 4725 goto out_release_nounlock;
> 1c9e8def43a3452 Mike Kravetz 2017-02-22 4726 }
> 1c9e8def43a3452 Mike Kravetz 2017-02-22 4727
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4728 ptl = huge_pte_lockptr(h, dst_mm, dst_pte);
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4729 spin_lock(ptl);
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4730
> 1e3921471354244 Andrea Arcangeli 2017-11-02 4731 /*
> 1e3921471354244 Andrea Arcangeli 2017-11-02 4732 * Recheck the i_size after holding PT lock to make sure not
> 1e3921471354244 Andrea Arcangeli 2017-11-02 4733 * to leave any page mapped (as page_mapped()) beyond the end
> 1e3921471354244 Andrea Arcangeli 2017-11-02 4734 * of the i_size (remove_inode_hugepages() is strict about
> 1e3921471354244 Andrea Arcangeli 2017-11-02 4735 * enforcing that). If we bail out here, we'll also leave a
> 1e3921471354244 Andrea Arcangeli 2017-11-02 4736 * page in the radix tree in the vm_shared case beyond the end
> 1e3921471354244 Andrea Arcangeli 2017-11-02 4737 * of the i_size, but remove_inode_hugepages() will take care
> 1e3921471354244 Andrea Arcangeli 2017-11-02 4738 * of it as soon as we drop the hugetlb_fault_mutex_table.
> 1e3921471354244 Andrea Arcangeli 2017-11-02 4739 */
> 1e3921471354244 Andrea Arcangeli 2017-11-02 4740 size = i_size_read(mapping->host) >> huge_page_shift(h);
> 1e3921471354244 Andrea Arcangeli 2017-11-02 4741 ret = -EFAULT;
> 1e3921471354244 Andrea Arcangeli 2017-11-02 4742 if (idx >= size)
> 1e3921471354244 Andrea Arcangeli 2017-11-02 4743 goto out_release_unlock;
> 1e3921471354244 Andrea Arcangeli 2017-11-02 4744
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4745 ret = -EEXIST;
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4746 if (!huge_pte_none(huge_ptep_get(dst_pte)))
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4747 goto out_release_unlock;
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4748
> 1c9e8def43a3452 Mike Kravetz 2017-02-22 4749 if (vm_shared) {
> 1c9e8def43a3452 Mike Kravetz 2017-02-22 4750 page_dup_rmap(page, true);
> 1c9e8def43a3452 Mike Kravetz 2017-02-22 4751 } else {
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4752 ClearPagePrivate(page);
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4753 hugepage_add_new_anon_rmap(page, dst_vma, dst_addr);
> 1c9e8def43a3452 Mike Kravetz 2017-02-22 4754 }
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4755
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4756 _dst_pte = make_huge_pte(dst_vma, page, dst_vma->vm_flags & VM_WRITE);
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4757 if (dst_vma->vm_flags & VM_WRITE)
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4758 _dst_pte = huge_pte_mkdirty(_dst_pte);
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4759 _dst_pte = pte_mkyoung(_dst_pte);
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4760
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4761 set_huge_pte_at(dst_mm, dst_addr, dst_pte, _dst_pte);
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4762
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4763 (void)huge_ptep_set_access_flags(dst_vma, dst_addr, dst_pte, _dst_pte,
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4764 dst_vma->vm_flags & VM_WRITE);
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4765 hugetlb_count_add(pages_per_huge_page(h), dst_mm);
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4766
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4767 /* No need to invalidate - it was non-present before */
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4768 update_mmu_cache(dst_vma, dst_addr, dst_pte);
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4769
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4770 spin_unlock(ptl);
> b8fb53c3a341b9b Axel Rasmussen 2021-01-22 4771 if (mode != MCOPY_ATOMIC_CONTINUE)
> cb6acd01e2e43fd Mike Kravetz 2019-02-28 4772 set_page_huge_active(page);
> 1c9e8def43a3452 Mike Kravetz 2017-02-22 4773 if (vm_shared)
> 1c9e8def43a3452 Mike Kravetz 2017-02-22 4774 unlock_page(page);
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4775 ret = 0;
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4776 out:
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4777 return ret;
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4778 out_release_unlock:
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4779 spin_unlock(ptl);
> 1c9e8def43a3452 Mike Kravetz 2017-02-22 4780 if (vm_shared)
> 1c9e8def43a3452 Mike Kravetz 2017-02-22 4781 unlock_page(page);
> 5af10dfd0afc559 Andrea Arcangeli 2017-08-10 4782 out_release_nounlock:
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4783 put_page(page);
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4784 goto out;
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4785 }
> 8fb5debc5fcd450 Mike Kravetz 2017-02-22 4786
>
> ---
> 0-DAY CI Kernel Test Service, Intel Corporation
> https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org
next prev parent reply other threads:[~2021-01-25 17:51 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-01-22 21:29 [PATCH 0/9] userfaultfd: add minor fault handling Axel Rasmussen
2021-01-22 21:29 ` Axel Rasmussen
2021-01-22 21:29 ` [PATCH v2 1/9] hugetlb: Pass vma into huge_pte_alloc() Axel Rasmussen
2021-01-22 21:29 ` Axel Rasmussen
2021-01-22 21:29 ` [PATCH v2 2/9] hugetlb/userfaultfd: Forbid huge pmd sharing when uffd enabled Axel Rasmussen
2021-01-22 21:29 ` Axel Rasmussen
2021-01-22 21:29 ` [PATCH v2 3/9] mm/hugetlb: Move flush_hugetlb_tlb_range() into hugetlb.h Axel Rasmussen
2021-01-22 21:29 ` Axel Rasmussen
2021-01-22 21:29 ` [PATCH v2 4/9] hugetlb/userfaultfd: Unshare all pmds for hugetlbfs when register wp Axel Rasmussen
2021-01-22 21:29 ` Axel Rasmussen
2021-01-22 21:29 ` [PATCH v2 5/9] userfaultfd: add minor fault registration mode Axel Rasmussen
2021-01-22 21:29 ` Axel Rasmussen
2021-01-22 21:29 ` [PATCH v2 6/9] userfaultfd: disable huge PMD sharing for MINOR registered VMAs Axel Rasmussen
2021-01-22 21:29 ` Axel Rasmussen
2021-01-22 21:29 ` [PATCH v2 7/9] userfaultfd: add UFFDIO_CONTINUE ioctl Axel Rasmussen
2021-01-22 21:29 ` Axel Rasmussen
2021-01-25 7:53 ` kernel test robot
2021-01-25 7:53 ` kernel test robot
2021-01-25 8:31 ` kernel test robot
2021-01-25 8:31 ` kernel test robot
2021-01-25 13:37 ` kernel test robot
2021-01-25 13:37 ` kernel test robot
2021-01-25 17:50 ` Axel Rasmussen [this message]
2021-01-25 17:50 ` Axel Rasmussen
2021-01-22 21:29 ` [PATCH v2 8/9] userfaultfd: update documentation to describe minor fault handling Axel Rasmussen
2021-01-22 21:29 ` Axel Rasmussen
2021-01-22 21:29 ` [PATCH v2 9/9] userfaultfd/selftests: add test exercising " Axel Rasmussen
2021-01-22 21:29 ` Axel Rasmussen
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=CAJHvVcjHmSNXVNxtR3gJSxUnB0yifr+CSi9GnZDXrHeQwi2EpA@mail.gmail.com \
--to=axelrasmussen@google.com \
--cc=aarcange@redhat.com \
--cc=adobriyan@gmail.com \
--cc=akpm@linux-foundation.org \
--cc=anshuman.khandual@arm.com \
--cc=catalin.marinas@arm.com \
--cc=chinwen.chang@mediatek.com \
--cc=clang-built-linux@googlegroups.com \
--cc=kbuild-all@lists.01.org \
--cc=linux-mm@kvack.org \
--cc=mingo@redhat.com \
--cc=viro@zeniv.linux.org.uk \
--cc=ying.huang@intel.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: link
Be 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.