From: kernel test robot <lkp@intel.com>
To: David Hildenbrand <david@redhat.com>
Cc: llvm@lists.linux.dev, kbuild-all@lists.01.org,
linux-kernel@vger.kernel.org
Subject: [davidhildenbrand:reuse_swap_page 6/10] mm/khugepaged.c:686:8: error: implicit declaration of function 'PageKSM'
Date: Tue, 25 Jan 2022 23:03:45 +0800 [thread overview]
Message-ID: <202201252354.dFsFKZi4-lkp@intel.com> (raw)
tree: git://github.com/davidhildenbrand/linux reuse_swap_page
head: 09189ec334fe531619f81fa068bea808d80ad2cc
commit: a872bc92d703c5048a66505acae4480615a0d634 [6/10] mm/khugepaged: remove reuse_swap_page() usage
config: s390-buildonly-randconfig-r004-20220124 (https://download.01.org/0day-ci/archive/20220125/202201252354.dFsFKZi4-lkp@intel.com/config)
compiler: clang version 14.0.0 (https://github.com/llvm/llvm-project 997e128e2a78f5a5434fc75997441ae1ee76f8a4)
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/davidhildenbrand/linux/commit/a872bc92d703c5048a66505acae4480615a0d634
git remote add davidhildenbrand git://github.com/davidhildenbrand/linux
git fetch --no-tags davidhildenbrand reuse_swap_page
git checkout a872bc92d703c5048a66505acae4480615a0d634
# save the config file to linux build tree
mkdir build_dir
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=s390 SHELL=/bin/bash
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 >>):
>> mm/khugepaged.c:686:8: error: implicit declaration of function 'PageKSM' [-Werror,-Wimplicit-function-declaration]
(PageKSM(page) || !try_to_free_swap(page))) {
^
mm/khugepaged.c:686:8: note: did you mean 'PageKsm'?
include/linux/page-flags.h:609:29: note: 'PageKsm' declared here
static __always_inline bool PageKsm(struct page *page)
^
1 error generated.
vim +/PageKSM +686 mm/khugepaged.c
600
601 static int __collapse_huge_page_isolate(struct vm_area_struct *vma,
602 unsigned long address,
603 pte_t *pte,
604 struct list_head *compound_pagelist)
605 {
606 struct page *page = NULL;
607 pte_t *_pte;
608 int none_or_zero = 0, shared = 0, result = 0, referenced = 0;
609 bool writable = false;
610
611 for (_pte = pte; _pte < pte+HPAGE_PMD_NR;
612 _pte++, address += PAGE_SIZE) {
613 pte_t pteval = *_pte;
614 if (pte_none(pteval) || (pte_present(pteval) &&
615 is_zero_pfn(pte_pfn(pteval)))) {
616 if (!userfaultfd_armed(vma) &&
617 ++none_or_zero <= khugepaged_max_ptes_none) {
618 continue;
619 } else {
620 result = SCAN_EXCEED_NONE_PTE;
621 count_vm_event(THP_SCAN_EXCEED_NONE_PTE);
622 goto out;
623 }
624 }
625 if (!pte_present(pteval)) {
626 result = SCAN_PTE_NON_PRESENT;
627 goto out;
628 }
629 page = vm_normal_page(vma, address, pteval);
630 if (unlikely(!page)) {
631 result = SCAN_PAGE_NULL;
632 goto out;
633 }
634
635 VM_BUG_ON_PAGE(!PageAnon(page), page);
636
637 if (page_mapcount(page) > 1 &&
638 ++shared > khugepaged_max_ptes_shared) {
639 result = SCAN_EXCEED_SHARED_PTE;
640 count_vm_event(THP_SCAN_EXCEED_SHARED_PTE);
641 goto out;
642 }
643
644 if (PageCompound(page)) {
645 struct page *p;
646 page = compound_head(page);
647
648 /*
649 * Check if we have dealt with the compound page
650 * already
651 */
652 list_for_each_entry(p, compound_pagelist, lru) {
653 if (page == p)
654 goto next;
655 }
656 }
657
658 /*
659 * We can do it before isolate_lru_page because the
660 * page can't be freed from under us. NOTE: PG_lock
661 * is needed to serialize against split_huge_page
662 * when invoked from the VM.
663 */
664 if (!trylock_page(page)) {
665 result = SCAN_PAGE_LOCK;
666 goto out;
667 }
668
669 /*
670 * Check if the page has any GUP (or other external) pins.
671 *
672 * The page table that maps the page has been already unlinked
673 * from the page table tree and this process cannot get
674 * an additional pin on the page.
675 *
676 * New pins can come later if the page is shared across fork,
677 * but not from this process. The other process cannot write to
678 * the page, only trigger CoW.
679 */
680 if (!is_refcount_suitable(page)) {
681 unlock_page(page);
682 result = SCAN_PAGE_COUNT;
683 goto out;
684 }
685 if (!pte_write(pteval) && PageSwapCache(page) &&
> 686 (PageKSM(page) || !try_to_free_swap(page))) {
687 /*
688 * Page cannot be removed from the swapache.
689 * It cannot be collapsed into a THP.
690 */
691 unlock_page(page);
692 result = SCAN_SWAP_CACHE_PAGE;
693 goto out;
694 }
695
696 /*
697 * Isolate the page to avoid collapsing an hugepage
698 * currently in use by the VM.
699 */
700 if (isolate_lru_page(page)) {
701 unlock_page(page);
702 result = SCAN_DEL_PAGE_LRU;
703 goto out;
704 }
705
706 /*
707 * We're holding the page lock and removed the page from the
708 * LRU. Once done copying, we'll unlock and readd to the
709 * LRU via release_pte_page(). The page cannot get added
710 * to the swapcache in the meantime.
711 */
712 mod_node_page_state(page_pgdat(page),
713 NR_ISOLATED_ANON + page_is_file_lru(page),
714 compound_nr(page));
715 VM_BUG_ON_PAGE(!PageLocked(page), page);
716 VM_BUG_ON_PAGE(PageLRU(page), page);
717
718 if (PageCompound(page))
719 list_add_tail(&page->lru, compound_pagelist);
720 next:
721 /* There should be enough young pte to collapse the page */
722 if (pte_young(pteval) ||
723 page_is_young(page) || PageReferenced(page) ||
724 mmu_notifier_test_young(vma->vm_mm, address))
725 referenced++;
726
727 if (pte_write(pteval))
728 writable = true;
729 }
730
731 if (unlikely(!writable)) {
732 result = SCAN_PAGE_RO;
733 } else if (unlikely(!referenced)) {
734 result = SCAN_LACK_REFERENCED_PAGE;
735 } else {
736 result = SCAN_SUCCEED;
737 trace_mm_collapse_huge_page_isolate(page, none_or_zero,
738 referenced, writable, result);
739 return 1;
740 }
741 out:
742 release_pte_pages(pte, _pte, compound_pagelist);
743 trace_mm_collapse_huge_page_isolate(page, none_or_zero,
744 referenced, writable, result);
745 return 0;
746 }
747
---
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: kernel test robot <lkp@intel.com>
To: kbuild-all@lists.01.org
Subject: [davidhildenbrand:reuse_swap_page 6/10] mm/khugepaged.c:686:8: error: implicit declaration of function 'PageKSM'
Date: Tue, 25 Jan 2022 23:03:45 +0800 [thread overview]
Message-ID: <202201252354.dFsFKZi4-lkp@intel.com> (raw)
[-- Attachment #1: Type: text/plain, Size: 7063 bytes --]
tree: git://github.com/davidhildenbrand/linux reuse_swap_page
head: 09189ec334fe531619f81fa068bea808d80ad2cc
commit: a872bc92d703c5048a66505acae4480615a0d634 [6/10] mm/khugepaged: remove reuse_swap_page() usage
config: s390-buildonly-randconfig-r004-20220124 (https://download.01.org/0day-ci/archive/20220125/202201252354.dFsFKZi4-lkp(a)intel.com/config)
compiler: clang version 14.0.0 (https://github.com/llvm/llvm-project 997e128e2a78f5a5434fc75997441ae1ee76f8a4)
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/davidhildenbrand/linux/commit/a872bc92d703c5048a66505acae4480615a0d634
git remote add davidhildenbrand git://github.com/davidhildenbrand/linux
git fetch --no-tags davidhildenbrand reuse_swap_page
git checkout a872bc92d703c5048a66505acae4480615a0d634
# save the config file to linux build tree
mkdir build_dir
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=s390 SHELL=/bin/bash
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 >>):
>> mm/khugepaged.c:686:8: error: implicit declaration of function 'PageKSM' [-Werror,-Wimplicit-function-declaration]
(PageKSM(page) || !try_to_free_swap(page))) {
^
mm/khugepaged.c:686:8: note: did you mean 'PageKsm'?
include/linux/page-flags.h:609:29: note: 'PageKsm' declared here
static __always_inline bool PageKsm(struct page *page)
^
1 error generated.
vim +/PageKSM +686 mm/khugepaged.c
600
601 static int __collapse_huge_page_isolate(struct vm_area_struct *vma,
602 unsigned long address,
603 pte_t *pte,
604 struct list_head *compound_pagelist)
605 {
606 struct page *page = NULL;
607 pte_t *_pte;
608 int none_or_zero = 0, shared = 0, result = 0, referenced = 0;
609 bool writable = false;
610
611 for (_pte = pte; _pte < pte+HPAGE_PMD_NR;
612 _pte++, address += PAGE_SIZE) {
613 pte_t pteval = *_pte;
614 if (pte_none(pteval) || (pte_present(pteval) &&
615 is_zero_pfn(pte_pfn(pteval)))) {
616 if (!userfaultfd_armed(vma) &&
617 ++none_or_zero <= khugepaged_max_ptes_none) {
618 continue;
619 } else {
620 result = SCAN_EXCEED_NONE_PTE;
621 count_vm_event(THP_SCAN_EXCEED_NONE_PTE);
622 goto out;
623 }
624 }
625 if (!pte_present(pteval)) {
626 result = SCAN_PTE_NON_PRESENT;
627 goto out;
628 }
629 page = vm_normal_page(vma, address, pteval);
630 if (unlikely(!page)) {
631 result = SCAN_PAGE_NULL;
632 goto out;
633 }
634
635 VM_BUG_ON_PAGE(!PageAnon(page), page);
636
637 if (page_mapcount(page) > 1 &&
638 ++shared > khugepaged_max_ptes_shared) {
639 result = SCAN_EXCEED_SHARED_PTE;
640 count_vm_event(THP_SCAN_EXCEED_SHARED_PTE);
641 goto out;
642 }
643
644 if (PageCompound(page)) {
645 struct page *p;
646 page = compound_head(page);
647
648 /*
649 * Check if we have dealt with the compound page
650 * already
651 */
652 list_for_each_entry(p, compound_pagelist, lru) {
653 if (page == p)
654 goto next;
655 }
656 }
657
658 /*
659 * We can do it before isolate_lru_page because the
660 * page can't be freed from under us. NOTE: PG_lock
661 * is needed to serialize against split_huge_page
662 * when invoked from the VM.
663 */
664 if (!trylock_page(page)) {
665 result = SCAN_PAGE_LOCK;
666 goto out;
667 }
668
669 /*
670 * Check if the page has any GUP (or other external) pins.
671 *
672 * The page table that maps the page has been already unlinked
673 * from the page table tree and this process cannot get
674 * an additional pin on the page.
675 *
676 * New pins can come later if the page is shared across fork,
677 * but not from this process. The other process cannot write to
678 * the page, only trigger CoW.
679 */
680 if (!is_refcount_suitable(page)) {
681 unlock_page(page);
682 result = SCAN_PAGE_COUNT;
683 goto out;
684 }
685 if (!pte_write(pteval) && PageSwapCache(page) &&
> 686 (PageKSM(page) || !try_to_free_swap(page))) {
687 /*
688 * Page cannot be removed from the swapache.
689 * It cannot be collapsed into a THP.
690 */
691 unlock_page(page);
692 result = SCAN_SWAP_CACHE_PAGE;
693 goto out;
694 }
695
696 /*
697 * Isolate the page to avoid collapsing an hugepage
698 * currently in use by the VM.
699 */
700 if (isolate_lru_page(page)) {
701 unlock_page(page);
702 result = SCAN_DEL_PAGE_LRU;
703 goto out;
704 }
705
706 /*
707 * We're holding the page lock and removed the page from the
708 * LRU. Once done copying, we'll unlock and readd to the
709 * LRU via release_pte_page(). The page cannot get added
710 * to the swapcache in the meantime.
711 */
712 mod_node_page_state(page_pgdat(page),
713 NR_ISOLATED_ANON + page_is_file_lru(page),
714 compound_nr(page));
715 VM_BUG_ON_PAGE(!PageLocked(page), page);
716 VM_BUG_ON_PAGE(PageLRU(page), page);
717
718 if (PageCompound(page))
719 list_add_tail(&page->lru, compound_pagelist);
720 next:
721 /* There should be enough young pte to collapse the page */
722 if (pte_young(pteval) ||
723 page_is_young(page) || PageReferenced(page) ||
724 mmu_notifier_test_young(vma->vm_mm, address))
725 referenced++;
726
727 if (pte_write(pteval))
728 writable = true;
729 }
730
731 if (unlikely(!writable)) {
732 result = SCAN_PAGE_RO;
733 } else if (unlikely(!referenced)) {
734 result = SCAN_LACK_REFERENCED_PAGE;
735 } else {
736 result = SCAN_SUCCEED;
737 trace_mm_collapse_huge_page_isolate(page, none_or_zero,
738 referenced, writable, result);
739 return 1;
740 }
741 out:
742 release_pte_pages(pte, _pte, compound_pagelist);
743 trace_mm_collapse_huge_page_isolate(page, none_or_zero,
744 referenced, writable, result);
745 return 0;
746 }
747
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org
next reply other threads:[~2022-01-25 15:04 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-01-25 15:03 kernel test robot [this message]
2022-01-25 15:03 ` [davidhildenbrand:reuse_swap_page 6/10] mm/khugepaged.c:686:8: error: implicit declaration of function 'PageKSM' kernel test robot
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=202201252354.dFsFKZi4-lkp@intel.com \
--to=lkp@intel.com \
--cc=david@redhat.com \
--cc=kbuild-all@lists.01.org \
--cc=linux-kernel@vger.kernel.org \
--cc=llvm@lists.linux.dev \
/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.