All of lore.kernel.org
 help / color / mirror / Atom feed
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

             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.