All of lore.kernel.org
 help / color / mirror / Atom feed
From: kernel test robot <lkp@intel.com>
To: kbuild@lists.01.org
Subject: [andrea-aa:main 44/48] mm/ksm.c:2134 cmp_and_merge_page() error: uninitialized symbol 'checksum'.
Date: Sun, 19 Dec 2021 05:20:39 +0800	[thread overview]
Message-ID: <202112190517.NPcuhEOX-lkp@intel.com> (raw)

[-- Attachment #1: Type: text/plain, Size: 15124 bytes --]

CC: kbuild-all(a)lists.01.org
CC: linux-kernel(a)vger.kernel.org
TO: Andrea Arcangeli <aarcange@redhat.com>

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/andrea/aa.git main
head:   2f1336124b54750df7ae428da9352e4d8091f31e
commit: fec43fa50ccf8365ae2a8d9f150970ab6ca42b18 [44/48] KSM: only attempt to merge with KSM pages if the payload doesn't change
:::::: branch date: 2 days ago
:::::: commit date: 2 days ago
config: i386-randconfig-m021-20211218 (https://download.01.org/0day-ci/archive/20211219/202112190517.NPcuhEOX-lkp(a)intel.com/config)
compiler: gcc-9 (Debian 9.3.0-22) 9.3.0

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>

smatch warnings:
mm/ksm.c:2134 cmp_and_merge_page() error: uninitialized symbol 'checksum'.

vim +/checksum +2134 mm/ksm.c

31dbd01f314364 Izik Eidus        2009-09-21  2049  
31dbd01f314364 Izik Eidus        2009-09-21  2050  /*
81464e30609cdb Hugh Dickins      2009-09-21  2051   * cmp_and_merge_page - first see if page can be merged into the stable tree;
81464e30609cdb Hugh Dickins      2009-09-21  2052   * if not, compare checksum to previous and if it's the same, see if page can
81464e30609cdb Hugh Dickins      2009-09-21  2053   * be inserted into the unstable tree, or merged with a page already there and
81464e30609cdb Hugh Dickins      2009-09-21  2054   * both transferred to the stable tree.
31dbd01f314364 Izik Eidus        2009-09-21  2055   *
31dbd01f314364 Izik Eidus        2009-09-21  2056   * @page: the page that we are searching identical page to.
31dbd01f314364 Izik Eidus        2009-09-21  2057   * @rmap_item: the reverse mapping into the virtual address of this page
31dbd01f314364 Izik Eidus        2009-09-21  2058   */
31dbd01f314364 Izik Eidus        2009-09-21  2059  static void cmp_and_merge_page(struct page *page, struct rmap_item *rmap_item)
31dbd01f314364 Izik Eidus        2009-09-21  2060  {
4b22927f0cbd58 Kirill Tkhai      2017-10-03  2061  	struct mm_struct *mm = rmap_item->mm;
31dbd01f314364 Izik Eidus        2009-09-21  2062  	struct rmap_item *tree_rmap_item;
8dd3557a52f0bc Hugh Dickins      2009-12-14  2063  	struct page *tree_page = NULL;
7b6ba2c7d3baf8 Hugh Dickins      2009-12-14  2064  	struct stable_node *stable_node;
8dd3557a52f0bc Hugh Dickins      2009-12-14  2065  	struct page *kpage;
31dbd01f314364 Izik Eidus        2009-09-21  2066  	unsigned int checksum;
31dbd01f314364 Izik Eidus        2009-09-21  2067  	int err;
2c653d0ee2ae78 Andrea Arcangeli  2017-07-06  2068  	bool max_page_sharing_bypass = false;
31dbd01f314364 Izik Eidus        2009-09-21  2069  
4146d2d673e8d6 Hugh Dickins      2013-02-22  2070  	stable_node = page_stable_node(page);
4146d2d673e8d6 Hugh Dickins      2013-02-22  2071  	if (stable_node) {
4146d2d673e8d6 Hugh Dickins      2013-02-22  2072  		if (stable_node->head != &migrate_nodes &&
2c653d0ee2ae78 Andrea Arcangeli  2017-07-06  2073  		    get_kpfn_nid(READ_ONCE(stable_node->kpfn)) !=
2c653d0ee2ae78 Andrea Arcangeli  2017-07-06  2074  		    NUMA(stable_node->nid)) {
2c653d0ee2ae78 Andrea Arcangeli  2017-07-06  2075  			stable_node_dup_del(stable_node);
4146d2d673e8d6 Hugh Dickins      2013-02-22  2076  			stable_node->head = &migrate_nodes;
4146d2d673e8d6 Hugh Dickins      2013-02-22  2077  			list_add(&stable_node->list, stable_node->head);
4146d2d673e8d6 Hugh Dickins      2013-02-22  2078  		}
4146d2d673e8d6 Hugh Dickins      2013-02-22  2079  		if (stable_node->head != &migrate_nodes &&
4146d2d673e8d6 Hugh Dickins      2013-02-22  2080  		    rmap_item->head == stable_node)
4146d2d673e8d6 Hugh Dickins      2013-02-22  2081  			return;
2c653d0ee2ae78 Andrea Arcangeli  2017-07-06  2082  		/*
2c653d0ee2ae78 Andrea Arcangeli  2017-07-06  2083  		 * If it's a KSM fork, allow it to go over the sharing limit
2c653d0ee2ae78 Andrea Arcangeli  2017-07-06  2084  		 * without warnings.
2c653d0ee2ae78 Andrea Arcangeli  2017-07-06  2085  		 */
2c653d0ee2ae78 Andrea Arcangeli  2017-07-06  2086  		if (!is_page_sharing_candidate(stable_node))
2c653d0ee2ae78 Andrea Arcangeli  2017-07-06  2087  			max_page_sharing_bypass = true;
fec43fa50ccf83 Andrea Arcangeli  2021-11-23  2088  	} else {
fec43fa50ccf83 Andrea Arcangeli  2021-11-23  2089  		/*
fec43fa50ccf83 Andrea Arcangeli  2021-11-23  2090  		 * If the hash value of the page has changed from the last
fec43fa50ccf83 Andrea Arcangeli  2021-11-23  2091  		 * time we calculated it, this page is changing frequently:
fec43fa50ccf83 Andrea Arcangeli  2021-11-23  2092  		 * therefore we don't want to write protect it.
fec43fa50ccf83 Andrea Arcangeli  2021-11-23  2093  		 */
fec43fa50ccf83 Andrea Arcangeli  2021-11-23  2094  		checksum = calc_checksum(page);
fec43fa50ccf83 Andrea Arcangeli  2021-11-23  2095  		if (rmap_item->oldchecksum != checksum) {
fec43fa50ccf83 Andrea Arcangeli  2021-11-23  2096  			rmap_item->oldchecksum = checksum;
fec43fa50ccf83 Andrea Arcangeli  2021-11-23  2097  			remove_rmap_item_from_tree(rmap_item);
fec43fa50ccf83 Andrea Arcangeli  2021-11-23  2098  			return;
fec43fa50ccf83 Andrea Arcangeli  2021-11-23  2099  		}
4146d2d673e8d6 Hugh Dickins      2013-02-22  2100  	}
31dbd01f314364 Izik Eidus        2009-09-21  2101  
31dbd01f314364 Izik Eidus        2009-09-21  2102  	/* We first start with searching the page inside the stable tree */
62b61f611eb5e2 Hugh Dickins      2009-12-14  2103  	kpage = stable_tree_search(page);
4146d2d673e8d6 Hugh Dickins      2013-02-22  2104  	if (kpage == page && rmap_item->head == stable_node) {
4146d2d673e8d6 Hugh Dickins      2013-02-22  2105  		put_page(kpage);
4146d2d673e8d6 Hugh Dickins      2013-02-22  2106  		return;
4146d2d673e8d6 Hugh Dickins      2013-02-22  2107  	}
4146d2d673e8d6 Hugh Dickins      2013-02-22  2108  
4146d2d673e8d6 Hugh Dickins      2013-02-22  2109  	remove_rmap_item_from_tree(rmap_item);
4146d2d673e8d6 Hugh Dickins      2013-02-22  2110  
62b61f611eb5e2 Hugh Dickins      2009-12-14  2111  	if (kpage) {
2cee57d1b08877 Yang Shi          2019-03-05  2112  		if (PTR_ERR(kpage) == -EBUSY)
2cee57d1b08877 Yang Shi          2019-03-05  2113  			return;
2cee57d1b08877 Yang Shi          2019-03-05  2114  
08beca44dfb0ab Hugh Dickins      2009-12-14  2115  		err = try_to_merge_with_ksm_page(rmap_item, page, kpage);
31dbd01f314364 Izik Eidus        2009-09-21  2116  		if (!err) {
31dbd01f314364 Izik Eidus        2009-09-21  2117  			/*
31dbd01f314364 Izik Eidus        2009-09-21  2118  			 * The page was successfully merged:
31dbd01f314364 Izik Eidus        2009-09-21  2119  			 * add its rmap_item to the stable tree.
31dbd01f314364 Izik Eidus        2009-09-21  2120  			 */
5ad6468801d28c Hugh Dickins      2009-12-14  2121  			lock_page(kpage);
2c653d0ee2ae78 Andrea Arcangeli  2017-07-06  2122  			stable_tree_append(rmap_item, page_stable_node(kpage),
2c653d0ee2ae78 Andrea Arcangeli  2017-07-06  2123  					   max_page_sharing_bypass);
5ad6468801d28c Hugh Dickins      2009-12-14  2124  			unlock_page(kpage);
31dbd01f314364 Izik Eidus        2009-09-21  2125  		}
8dd3557a52f0bc Hugh Dickins      2009-12-14  2126  		put_page(kpage);
31dbd01f314364 Izik Eidus        2009-09-21  2127  		return;
31dbd01f314364 Izik Eidus        2009-09-21  2128  	}
31dbd01f314364 Izik Eidus        2009-09-21  2129  
e86c59b1b12d0d Claudio Imbrenda  2017-02-24  2130  	/*
e86c59b1b12d0d Claudio Imbrenda  2017-02-24  2131  	 * Same checksum as an empty page. We attempt to merge it with the
e86c59b1b12d0d Claudio Imbrenda  2017-02-24  2132  	 * appropriate zero page if the user enabled this via sysfs.
e86c59b1b12d0d Claudio Imbrenda  2017-02-24  2133  	 */
e86c59b1b12d0d Claudio Imbrenda  2017-02-24 @2134  	if (ksm_use_zero_pages && (checksum == zero_checksum)) {
e86c59b1b12d0d Claudio Imbrenda  2017-02-24  2135  		struct vm_area_struct *vma;
e86c59b1b12d0d Claudio Imbrenda  2017-02-24  2136  
d8ed45c5dcd455 Michel Lespinasse 2020-06-08  2137  		mmap_read_lock(mm);
4b22927f0cbd58 Kirill Tkhai      2017-10-03  2138  		vma = find_mergeable_vma(mm, rmap_item->address);
56df70a63ed5d9 Muchun Song       2020-04-20  2139  		if (vma) {
e86c59b1b12d0d Claudio Imbrenda  2017-02-24  2140  			err = try_to_merge_one_page(vma, page,
e86c59b1b12d0d Claudio Imbrenda  2017-02-24  2141  					ZERO_PAGE(rmap_item->address));
56df70a63ed5d9 Muchun Song       2020-04-20  2142  		} else {
56df70a63ed5d9 Muchun Song       2020-04-20  2143  			/*
56df70a63ed5d9 Muchun Song       2020-04-20  2144  			 * If the vma is out of date, we do not need to
56df70a63ed5d9 Muchun Song       2020-04-20  2145  			 * continue.
56df70a63ed5d9 Muchun Song       2020-04-20  2146  			 */
56df70a63ed5d9 Muchun Song       2020-04-20  2147  			err = 0;
56df70a63ed5d9 Muchun Song       2020-04-20  2148  		}
d8ed45c5dcd455 Michel Lespinasse 2020-06-08  2149  		mmap_read_unlock(mm);
e86c59b1b12d0d Claudio Imbrenda  2017-02-24  2150  		/*
e86c59b1b12d0d Claudio Imbrenda  2017-02-24  2151  		 * In case of failure, the page was not really empty, so we
e86c59b1b12d0d Claudio Imbrenda  2017-02-24  2152  		 * need to continue. Otherwise we're done.
e86c59b1b12d0d Claudio Imbrenda  2017-02-24  2153  		 */
e86c59b1b12d0d Claudio Imbrenda  2017-02-24  2154  		if (!err)
e86c59b1b12d0d Claudio Imbrenda  2017-02-24  2155  			return;
e86c59b1b12d0d Claudio Imbrenda  2017-02-24  2156  	}
8dd3557a52f0bc Hugh Dickins      2009-12-14  2157  	tree_rmap_item =
8dd3557a52f0bc Hugh Dickins      2009-12-14  2158  		unstable_tree_search_insert(rmap_item, page, &tree_page);
31dbd01f314364 Izik Eidus        2009-09-21  2159  	if (tree_rmap_item) {
77da2ba0648a4f Claudio Imbrenda  2018-04-05  2160  		bool split;
77da2ba0648a4f Claudio Imbrenda  2018-04-05  2161  
8dd3557a52f0bc Hugh Dickins      2009-12-14  2162  		kpage = try_to_merge_two_pages(rmap_item, page,
8dd3557a52f0bc Hugh Dickins      2009-12-14  2163  						tree_rmap_item, tree_page);
77da2ba0648a4f Claudio Imbrenda  2018-04-05  2164  		/*
77da2ba0648a4f Claudio Imbrenda  2018-04-05  2165  		 * If both pages we tried to merge belong to the same compound
77da2ba0648a4f Claudio Imbrenda  2018-04-05  2166  		 * page, then we actually ended up increasing the reference
77da2ba0648a4f Claudio Imbrenda  2018-04-05  2167  		 * count of the same compound page twice, and split_huge_page
77da2ba0648a4f Claudio Imbrenda  2018-04-05  2168  		 * failed.
77da2ba0648a4f Claudio Imbrenda  2018-04-05  2169  		 * Here we set a flag if that happened, and we use it later to
77da2ba0648a4f Claudio Imbrenda  2018-04-05  2170  		 * try split_huge_page again. Since we call put_page right
77da2ba0648a4f Claudio Imbrenda  2018-04-05  2171  		 * afterwards, the reference count will be correct and
77da2ba0648a4f Claudio Imbrenda  2018-04-05  2172  		 * split_huge_page should succeed.
77da2ba0648a4f Claudio Imbrenda  2018-04-05  2173  		 */
77da2ba0648a4f Claudio Imbrenda  2018-04-05  2174  		split = PageTransCompound(page)
77da2ba0648a4f Claudio Imbrenda  2018-04-05  2175  			&& compound_head(page) == compound_head(tree_page);
8dd3557a52f0bc Hugh Dickins      2009-12-14  2176  		put_page(tree_page);
bc56620b493496 Hugh Dickins      2013-02-22  2177  		if (kpage) {
31dbd01f314364 Izik Eidus        2009-09-21  2178  			/*
bc56620b493496 Hugh Dickins      2013-02-22  2179  			 * The pages were successfully merged: insert new
bc56620b493496 Hugh Dickins      2013-02-22  2180  			 * node in the stable tree and add both rmap_items.
31dbd01f314364 Izik Eidus        2009-09-21  2181  			 */
5ad6468801d28c Hugh Dickins      2009-12-14  2182  			lock_page(kpage);
7b6ba2c7d3baf8 Hugh Dickins      2009-12-14  2183  			stable_node = stable_tree_insert(kpage);
7b6ba2c7d3baf8 Hugh Dickins      2009-12-14  2184  			if (stable_node) {
2c653d0ee2ae78 Andrea Arcangeli  2017-07-06  2185  				stable_tree_append(tree_rmap_item, stable_node,
2c653d0ee2ae78 Andrea Arcangeli  2017-07-06  2186  						   false);
2c653d0ee2ae78 Andrea Arcangeli  2017-07-06  2187  				stable_tree_append(rmap_item, stable_node,
2c653d0ee2ae78 Andrea Arcangeli  2017-07-06  2188  						   false);
7b6ba2c7d3baf8 Hugh Dickins      2009-12-14  2189  			}
5ad6468801d28c Hugh Dickins      2009-12-14  2190  			unlock_page(kpage);
7b6ba2c7d3baf8 Hugh Dickins      2009-12-14  2191  
31dbd01f314364 Izik Eidus        2009-09-21  2192  			/*
31dbd01f314364 Izik Eidus        2009-09-21  2193  			 * If we fail to insert the page into the stable tree,
31dbd01f314364 Izik Eidus        2009-09-21  2194  			 * we will have 2 virtual addresses that are pointing
31dbd01f314364 Izik Eidus        2009-09-21  2195  			 * to a ksm page left outside the stable tree,
31dbd01f314364 Izik Eidus        2009-09-21  2196  			 * in which case we need to break_cow on both.
31dbd01f314364 Izik Eidus        2009-09-21  2197  			 */
7b6ba2c7d3baf8 Hugh Dickins      2009-12-14  2198  			if (!stable_node) {
8dd3557a52f0bc Hugh Dickins      2009-12-14  2199  				break_cow(tree_rmap_item);
8dd3557a52f0bc Hugh Dickins      2009-12-14  2200  				break_cow(rmap_item);
31dbd01f314364 Izik Eidus        2009-09-21  2201  			}
77da2ba0648a4f Claudio Imbrenda  2018-04-05  2202  		} else if (split) {
77da2ba0648a4f Claudio Imbrenda  2018-04-05  2203  			/*
77da2ba0648a4f Claudio Imbrenda  2018-04-05  2204  			 * We are here if we tried to merge two pages and
77da2ba0648a4f Claudio Imbrenda  2018-04-05  2205  			 * failed because they both belonged to the same
77da2ba0648a4f Claudio Imbrenda  2018-04-05  2206  			 * compound page. We will split the page now, but no
77da2ba0648a4f Claudio Imbrenda  2018-04-05  2207  			 * merging will take place.
77da2ba0648a4f Claudio Imbrenda  2018-04-05  2208  			 * We do not want to add the cost of a full lock; if
77da2ba0648a4f Claudio Imbrenda  2018-04-05  2209  			 * the page is locked, it is better to skip it and
77da2ba0648a4f Claudio Imbrenda  2018-04-05  2210  			 * perhaps try again later.
77da2ba0648a4f Claudio Imbrenda  2018-04-05  2211  			 */
77da2ba0648a4f Claudio Imbrenda  2018-04-05  2212  			if (!trylock_page(page))
77da2ba0648a4f Claudio Imbrenda  2018-04-05  2213  				return;
77da2ba0648a4f Claudio Imbrenda  2018-04-05  2214  			split_huge_page(page);
77da2ba0648a4f Claudio Imbrenda  2018-04-05  2215  			unlock_page(page);
31dbd01f314364 Izik Eidus        2009-09-21  2216  		}
31dbd01f314364 Izik Eidus        2009-09-21  2217  	}
31dbd01f314364 Izik Eidus        2009-09-21  2218  }
31dbd01f314364 Izik Eidus        2009-09-21  2219  

:::::: The code at line 2134 was first introduced by commit
:::::: e86c59b1b12d0db1c97eb5bec7586a691685c6cc mm/ksm: improve deduplication of zero pages with colouring

:::::: TO: Claudio Imbrenda <imbrenda@linux.vnet.ibm.com>
:::::: CC: Linus Torvalds <torvalds@linux-foundation.org>

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org

WARNING: multiple messages have this Message-ID (diff)
From: Dan Carpenter <dan.carpenter@oracle.com>
To: kbuild-all@lists.01.org
Subject: [andrea-aa:main 44/48] mm/ksm.c:2134 cmp_and_merge_page() error: uninitialized symbol 'checksum'.
Date: Wed, 05 Jan 2022 13:02:49 +0300	[thread overview]
Message-ID: <202112190517.NPcuhEOX-lkp@intel.com> (raw)

[-- Attachment #1: Type: text/plain, Size: 13886 bytes --]

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/andrea/aa.git main
head:   2f1336124b54750df7ae428da9352e4d8091f31e
commit: fec43fa50ccf8365ae2a8d9f150970ab6ca42b18 [44/48] KSM: only attempt to merge with KSM pages if the payload doesn't change
config: i386-randconfig-m021-20211218 (https://download.01.org/0day-ci/archive/20211219/202112190517.NPcuhEOX-lkp(a)intel.com/config)
compiler: gcc-9 (Debian 9.3.0-22) 9.3.0

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>

smatch warnings:
mm/ksm.c:2134 cmp_and_merge_page() error: uninitialized symbol 'checksum'.

vim +/checksum +2134 mm/ksm.c

31dbd01f314364 Izik Eidus        2009-09-21  2059  static void cmp_and_merge_page(struct page *page, struct rmap_item *rmap_item)
31dbd01f314364 Izik Eidus        2009-09-21  2060  {
4b22927f0cbd58 Kirill Tkhai      2017-10-03  2061  	struct mm_struct *mm = rmap_item->mm;
31dbd01f314364 Izik Eidus        2009-09-21  2062  	struct rmap_item *tree_rmap_item;
8dd3557a52f0bc Hugh Dickins      2009-12-14  2063  	struct page *tree_page = NULL;
7b6ba2c7d3baf8 Hugh Dickins      2009-12-14  2064  	struct stable_node *stable_node;
8dd3557a52f0bc Hugh Dickins      2009-12-14  2065  	struct page *kpage;
31dbd01f314364 Izik Eidus        2009-09-21  2066  	unsigned int checksum;
31dbd01f314364 Izik Eidus        2009-09-21  2067  	int err;
2c653d0ee2ae78 Andrea Arcangeli  2017-07-06  2068  	bool max_page_sharing_bypass = false;
31dbd01f314364 Izik Eidus        2009-09-21  2069  
4146d2d673e8d6 Hugh Dickins      2013-02-22  2070  	stable_node = page_stable_node(page);
4146d2d673e8d6 Hugh Dickins      2013-02-22  2071  	if (stable_node) {
4146d2d673e8d6 Hugh Dickins      2013-02-22  2072  		if (stable_node->head != &migrate_nodes &&
2c653d0ee2ae78 Andrea Arcangeli  2017-07-06  2073  		    get_kpfn_nid(READ_ONCE(stable_node->kpfn)) !=
2c653d0ee2ae78 Andrea Arcangeli  2017-07-06  2074  		    NUMA(stable_node->nid)) {
2c653d0ee2ae78 Andrea Arcangeli  2017-07-06  2075  			stable_node_dup_del(stable_node);
4146d2d673e8d6 Hugh Dickins      2013-02-22  2076  			stable_node->head = &migrate_nodes;
4146d2d673e8d6 Hugh Dickins      2013-02-22  2077  			list_add(&stable_node->list, stable_node->head);
4146d2d673e8d6 Hugh Dickins      2013-02-22  2078  		}
4146d2d673e8d6 Hugh Dickins      2013-02-22  2079  		if (stable_node->head != &migrate_nodes &&
4146d2d673e8d6 Hugh Dickins      2013-02-22  2080  		    rmap_item->head == stable_node)
4146d2d673e8d6 Hugh Dickins      2013-02-22  2081  			return;
2c653d0ee2ae78 Andrea Arcangeli  2017-07-06  2082  		/*
2c653d0ee2ae78 Andrea Arcangeli  2017-07-06  2083  		 * If it's a KSM fork, allow it to go over the sharing limit
2c653d0ee2ae78 Andrea Arcangeli  2017-07-06  2084  		 * without warnings.
2c653d0ee2ae78 Andrea Arcangeli  2017-07-06  2085  		 */
2c653d0ee2ae78 Andrea Arcangeli  2017-07-06  2086  		if (!is_page_sharing_candidate(stable_node))
2c653d0ee2ae78 Andrea Arcangeli  2017-07-06  2087  			max_page_sharing_bypass = true;
fec43fa50ccf83 Andrea Arcangeli  2021-11-23  2088  	} else {
fec43fa50ccf83 Andrea Arcangeli  2021-11-23  2089  		/*
fec43fa50ccf83 Andrea Arcangeli  2021-11-23  2090  		 * If the hash value of the page has changed from the last
fec43fa50ccf83 Andrea Arcangeli  2021-11-23  2091  		 * time we calculated it, this page is changing frequently:
fec43fa50ccf83 Andrea Arcangeli  2021-11-23  2092  		 * therefore we don't want to write protect it.
fec43fa50ccf83 Andrea Arcangeli  2021-11-23  2093  		 */
fec43fa50ccf83 Andrea Arcangeli  2021-11-23  2094  		checksum = calc_checksum(page);

"checksum" initialized here.  Not intialized for stable_node.

fec43fa50ccf83 Andrea Arcangeli  2021-11-23  2095  		if (rmap_item->oldchecksum != checksum) {
fec43fa50ccf83 Andrea Arcangeli  2021-11-23  2096  			rmap_item->oldchecksum = checksum;
fec43fa50ccf83 Andrea Arcangeli  2021-11-23  2097  			remove_rmap_item_from_tree(rmap_item);
fec43fa50ccf83 Andrea Arcangeli  2021-11-23  2098  			return;
fec43fa50ccf83 Andrea Arcangeli  2021-11-23  2099  		}
4146d2d673e8d6 Hugh Dickins      2013-02-22  2100  	}
31dbd01f314364 Izik Eidus        2009-09-21  2101  
31dbd01f314364 Izik Eidus        2009-09-21  2102  	/* We first start with searching the page inside the stable tree */
62b61f611eb5e2 Hugh Dickins      2009-12-14  2103  	kpage = stable_tree_search(page);
4146d2d673e8d6 Hugh Dickins      2013-02-22  2104  	if (kpage == page && rmap_item->head == stable_node) {
4146d2d673e8d6 Hugh Dickins      2013-02-22  2105  		put_page(kpage);
4146d2d673e8d6 Hugh Dickins      2013-02-22  2106  		return;
4146d2d673e8d6 Hugh Dickins      2013-02-22  2107  	}
4146d2d673e8d6 Hugh Dickins      2013-02-22  2108  
4146d2d673e8d6 Hugh Dickins      2013-02-22  2109  	remove_rmap_item_from_tree(rmap_item);
4146d2d673e8d6 Hugh Dickins      2013-02-22  2110  
62b61f611eb5e2 Hugh Dickins      2009-12-14  2111  	if (kpage) {
2cee57d1b08877 Yang Shi          2019-03-05  2112  		if (PTR_ERR(kpage) == -EBUSY)
2cee57d1b08877 Yang Shi          2019-03-05  2113  			return;
2cee57d1b08877 Yang Shi          2019-03-05  2114  
08beca44dfb0ab Hugh Dickins      2009-12-14  2115  		err = try_to_merge_with_ksm_page(rmap_item, page, kpage);
31dbd01f314364 Izik Eidus        2009-09-21  2116  		if (!err) {
31dbd01f314364 Izik Eidus        2009-09-21  2117  			/*
31dbd01f314364 Izik Eidus        2009-09-21  2118  			 * The page was successfully merged:
31dbd01f314364 Izik Eidus        2009-09-21  2119  			 * add its rmap_item to the stable tree.
31dbd01f314364 Izik Eidus        2009-09-21  2120  			 */
5ad6468801d28c Hugh Dickins      2009-12-14  2121  			lock_page(kpage);
2c653d0ee2ae78 Andrea Arcangeli  2017-07-06  2122  			stable_tree_append(rmap_item, page_stable_node(kpage),
2c653d0ee2ae78 Andrea Arcangeli  2017-07-06  2123  					   max_page_sharing_bypass);
5ad6468801d28c Hugh Dickins      2009-12-14  2124  			unlock_page(kpage);
31dbd01f314364 Izik Eidus        2009-09-21  2125  		}
8dd3557a52f0bc Hugh Dickins      2009-12-14  2126  		put_page(kpage);
31dbd01f314364 Izik Eidus        2009-09-21  2127  		return;
31dbd01f314364 Izik Eidus        2009-09-21  2128  	}
31dbd01f314364 Izik Eidus        2009-09-21  2129  
e86c59b1b12d0d Claudio Imbrenda  2017-02-24  2130  	/*
e86c59b1b12d0d Claudio Imbrenda  2017-02-24  2131  	 * Same checksum as an empty page. We attempt to merge it with the
e86c59b1b12d0d Claudio Imbrenda  2017-02-24  2132  	 * appropriate zero page if the user enabled this via sysfs.
e86c59b1b12d0d Claudio Imbrenda  2017-02-24  2133  	 */
e86c59b1b12d0d Claudio Imbrenda  2017-02-24 @2134  	if (ksm_use_zero_pages && (checksum == zero_checksum)) {

uninitialized here.  Smatch cannot see how ksm_use_zero_pages and
stable_node are related.  (Neither can I but I have not looked at the
context).

e86c59b1b12d0d Claudio Imbrenda  2017-02-24  2135  		struct vm_area_struct *vma;
e86c59b1b12d0d Claudio Imbrenda  2017-02-24  2136  
d8ed45c5dcd455 Michel Lespinasse 2020-06-08  2137  		mmap_read_lock(mm);
4b22927f0cbd58 Kirill Tkhai      2017-10-03  2138  		vma = find_mergeable_vma(mm, rmap_item->address);
56df70a63ed5d9 Muchun Song       2020-04-20  2139  		if (vma) {
e86c59b1b12d0d Claudio Imbrenda  2017-02-24  2140  			err = try_to_merge_one_page(vma, page,
e86c59b1b12d0d Claudio Imbrenda  2017-02-24  2141  					ZERO_PAGE(rmap_item->address));
56df70a63ed5d9 Muchun Song       2020-04-20  2142  		} else {
56df70a63ed5d9 Muchun Song       2020-04-20  2143  			/*
56df70a63ed5d9 Muchun Song       2020-04-20  2144  			 * If the vma is out of date, we do not need to
56df70a63ed5d9 Muchun Song       2020-04-20  2145  			 * continue.
56df70a63ed5d9 Muchun Song       2020-04-20  2146  			 */
56df70a63ed5d9 Muchun Song       2020-04-20  2147  			err = 0;
56df70a63ed5d9 Muchun Song       2020-04-20  2148  		}
d8ed45c5dcd455 Michel Lespinasse 2020-06-08  2149  		mmap_read_unlock(mm);
e86c59b1b12d0d Claudio Imbrenda  2017-02-24  2150  		/*
e86c59b1b12d0d Claudio Imbrenda  2017-02-24  2151  		 * In case of failure, the page was not really empty, so we
e86c59b1b12d0d Claudio Imbrenda  2017-02-24  2152  		 * need to continue. Otherwise we're done.
e86c59b1b12d0d Claudio Imbrenda  2017-02-24  2153  		 */
e86c59b1b12d0d Claudio Imbrenda  2017-02-24  2154  		if (!err)
e86c59b1b12d0d Claudio Imbrenda  2017-02-24  2155  			return;
e86c59b1b12d0d Claudio Imbrenda  2017-02-24  2156  	}
8dd3557a52f0bc Hugh Dickins      2009-12-14  2157  	tree_rmap_item =
8dd3557a52f0bc Hugh Dickins      2009-12-14  2158  		unstable_tree_search_insert(rmap_item, page, &tree_page);
31dbd01f314364 Izik Eidus        2009-09-21  2159  	if (tree_rmap_item) {
77da2ba0648a4f Claudio Imbrenda  2018-04-05  2160  		bool split;
77da2ba0648a4f Claudio Imbrenda  2018-04-05  2161  
8dd3557a52f0bc Hugh Dickins      2009-12-14  2162  		kpage = try_to_merge_two_pages(rmap_item, page,
8dd3557a52f0bc Hugh Dickins      2009-12-14  2163  						tree_rmap_item, tree_page);
77da2ba0648a4f Claudio Imbrenda  2018-04-05  2164  		/*
77da2ba0648a4f Claudio Imbrenda  2018-04-05  2165  		 * If both pages we tried to merge belong to the same compound
77da2ba0648a4f Claudio Imbrenda  2018-04-05  2166  		 * page, then we actually ended up increasing the reference
77da2ba0648a4f Claudio Imbrenda  2018-04-05  2167  		 * count of the same compound page twice, and split_huge_page
77da2ba0648a4f Claudio Imbrenda  2018-04-05  2168  		 * failed.
77da2ba0648a4f Claudio Imbrenda  2018-04-05  2169  		 * Here we set a flag if that happened, and we use it later to
77da2ba0648a4f Claudio Imbrenda  2018-04-05  2170  		 * try split_huge_page again. Since we call put_page right
77da2ba0648a4f Claudio Imbrenda  2018-04-05  2171  		 * afterwards, the reference count will be correct and
77da2ba0648a4f Claudio Imbrenda  2018-04-05  2172  		 * split_huge_page should succeed.
77da2ba0648a4f Claudio Imbrenda  2018-04-05  2173  		 */
77da2ba0648a4f Claudio Imbrenda  2018-04-05  2174  		split = PageTransCompound(page)
77da2ba0648a4f Claudio Imbrenda  2018-04-05  2175  			&& compound_head(page) == compound_head(tree_page);
8dd3557a52f0bc Hugh Dickins      2009-12-14  2176  		put_page(tree_page);
bc56620b493496 Hugh Dickins      2013-02-22  2177  		if (kpage) {
31dbd01f314364 Izik Eidus        2009-09-21  2178  			/*
bc56620b493496 Hugh Dickins      2013-02-22  2179  			 * The pages were successfully merged: insert new
bc56620b493496 Hugh Dickins      2013-02-22  2180  			 * node in the stable tree and add both rmap_items.
31dbd01f314364 Izik Eidus        2009-09-21  2181  			 */
5ad6468801d28c Hugh Dickins      2009-12-14  2182  			lock_page(kpage);
7b6ba2c7d3baf8 Hugh Dickins      2009-12-14  2183  			stable_node = stable_tree_insert(kpage);
7b6ba2c7d3baf8 Hugh Dickins      2009-12-14  2184  			if (stable_node) {
2c653d0ee2ae78 Andrea Arcangeli  2017-07-06  2185  				stable_tree_append(tree_rmap_item, stable_node,
2c653d0ee2ae78 Andrea Arcangeli  2017-07-06  2186  						   false);
2c653d0ee2ae78 Andrea Arcangeli  2017-07-06  2187  				stable_tree_append(rmap_item, stable_node,
2c653d0ee2ae78 Andrea Arcangeli  2017-07-06  2188  						   false);
7b6ba2c7d3baf8 Hugh Dickins      2009-12-14  2189  			}
5ad6468801d28c Hugh Dickins      2009-12-14  2190  			unlock_page(kpage);
7b6ba2c7d3baf8 Hugh Dickins      2009-12-14  2191  
31dbd01f314364 Izik Eidus        2009-09-21  2192  			/*
31dbd01f314364 Izik Eidus        2009-09-21  2193  			 * If we fail to insert the page into the stable tree,
31dbd01f314364 Izik Eidus        2009-09-21  2194  			 * we will have 2 virtual addresses that are pointing
31dbd01f314364 Izik Eidus        2009-09-21  2195  			 * to a ksm page left outside the stable tree,
31dbd01f314364 Izik Eidus        2009-09-21  2196  			 * in which case we need to break_cow on both.
31dbd01f314364 Izik Eidus        2009-09-21  2197  			 */
7b6ba2c7d3baf8 Hugh Dickins      2009-12-14  2198  			if (!stable_node) {
8dd3557a52f0bc Hugh Dickins      2009-12-14  2199  				break_cow(tree_rmap_item);
8dd3557a52f0bc Hugh Dickins      2009-12-14  2200  				break_cow(rmap_item);
31dbd01f314364 Izik Eidus        2009-09-21  2201  			}
77da2ba0648a4f Claudio Imbrenda  2018-04-05  2202  		} else if (split) {
77da2ba0648a4f Claudio Imbrenda  2018-04-05  2203  			/*
77da2ba0648a4f Claudio Imbrenda  2018-04-05  2204  			 * We are here if we tried to merge two pages and
77da2ba0648a4f Claudio Imbrenda  2018-04-05  2205  			 * failed because they both belonged to the same
77da2ba0648a4f Claudio Imbrenda  2018-04-05  2206  			 * compound page. We will split the page now, but no
77da2ba0648a4f Claudio Imbrenda  2018-04-05  2207  			 * merging will take place.
77da2ba0648a4f Claudio Imbrenda  2018-04-05  2208  			 * We do not want to add the cost of a full lock; if
77da2ba0648a4f Claudio Imbrenda  2018-04-05  2209  			 * the page is locked, it is better to skip it and
77da2ba0648a4f Claudio Imbrenda  2018-04-05  2210  			 * perhaps try again later.
77da2ba0648a4f Claudio Imbrenda  2018-04-05  2211  			 */
77da2ba0648a4f Claudio Imbrenda  2018-04-05  2212  			if (!trylock_page(page))
77da2ba0648a4f Claudio Imbrenda  2018-04-05  2213  				return;
77da2ba0648a4f Claudio Imbrenda  2018-04-05  2214  			split_huge_page(page);
77da2ba0648a4f Claudio Imbrenda  2018-04-05  2215  			unlock_page(page);
31dbd01f314364 Izik Eidus        2009-09-21  2216  		}
31dbd01f314364 Izik Eidus        2009-09-21  2217  	}
31dbd01f314364 Izik Eidus        2009-09-21  2218  }

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org

WARNING: multiple messages have this Message-ID (diff)
From: Dan Carpenter <dan.carpenter@oracle.com>
To: kbuild@lists.01.org, Andrea Arcangeli <aarcange@redhat.com>
Cc: lkp@intel.com, kbuild-all@lists.01.org, linux-kernel@vger.kernel.org
Subject: [andrea-aa:main 44/48] mm/ksm.c:2134 cmp_and_merge_page() error: uninitialized symbol 'checksum'.
Date: Wed, 5 Jan 2022 13:02:49 +0300	[thread overview]
Message-ID: <202112190517.NPcuhEOX-lkp@intel.com> (raw)

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/andrea/aa.git main
head:   2f1336124b54750df7ae428da9352e4d8091f31e
commit: fec43fa50ccf8365ae2a8d9f150970ab6ca42b18 [44/48] KSM: only attempt to merge with KSM pages if the payload doesn't change
config: i386-randconfig-m021-20211218 (https://download.01.org/0day-ci/archive/20211219/202112190517.NPcuhEOX-lkp@intel.com/config)
compiler: gcc-9 (Debian 9.3.0-22) 9.3.0

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>

smatch warnings:
mm/ksm.c:2134 cmp_and_merge_page() error: uninitialized symbol 'checksum'.

vim +/checksum +2134 mm/ksm.c

31dbd01f314364 Izik Eidus        2009-09-21  2059  static void cmp_and_merge_page(struct page *page, struct rmap_item *rmap_item)
31dbd01f314364 Izik Eidus        2009-09-21  2060  {
4b22927f0cbd58 Kirill Tkhai      2017-10-03  2061  	struct mm_struct *mm = rmap_item->mm;
31dbd01f314364 Izik Eidus        2009-09-21  2062  	struct rmap_item *tree_rmap_item;
8dd3557a52f0bc Hugh Dickins      2009-12-14  2063  	struct page *tree_page = NULL;
7b6ba2c7d3baf8 Hugh Dickins      2009-12-14  2064  	struct stable_node *stable_node;
8dd3557a52f0bc Hugh Dickins      2009-12-14  2065  	struct page *kpage;
31dbd01f314364 Izik Eidus        2009-09-21  2066  	unsigned int checksum;
31dbd01f314364 Izik Eidus        2009-09-21  2067  	int err;
2c653d0ee2ae78 Andrea Arcangeli  2017-07-06  2068  	bool max_page_sharing_bypass = false;
31dbd01f314364 Izik Eidus        2009-09-21  2069  
4146d2d673e8d6 Hugh Dickins      2013-02-22  2070  	stable_node = page_stable_node(page);
4146d2d673e8d6 Hugh Dickins      2013-02-22  2071  	if (stable_node) {
4146d2d673e8d6 Hugh Dickins      2013-02-22  2072  		if (stable_node->head != &migrate_nodes &&
2c653d0ee2ae78 Andrea Arcangeli  2017-07-06  2073  		    get_kpfn_nid(READ_ONCE(stable_node->kpfn)) !=
2c653d0ee2ae78 Andrea Arcangeli  2017-07-06  2074  		    NUMA(stable_node->nid)) {
2c653d0ee2ae78 Andrea Arcangeli  2017-07-06  2075  			stable_node_dup_del(stable_node);
4146d2d673e8d6 Hugh Dickins      2013-02-22  2076  			stable_node->head = &migrate_nodes;
4146d2d673e8d6 Hugh Dickins      2013-02-22  2077  			list_add(&stable_node->list, stable_node->head);
4146d2d673e8d6 Hugh Dickins      2013-02-22  2078  		}
4146d2d673e8d6 Hugh Dickins      2013-02-22  2079  		if (stable_node->head != &migrate_nodes &&
4146d2d673e8d6 Hugh Dickins      2013-02-22  2080  		    rmap_item->head == stable_node)
4146d2d673e8d6 Hugh Dickins      2013-02-22  2081  			return;
2c653d0ee2ae78 Andrea Arcangeli  2017-07-06  2082  		/*
2c653d0ee2ae78 Andrea Arcangeli  2017-07-06  2083  		 * If it's a KSM fork, allow it to go over the sharing limit
2c653d0ee2ae78 Andrea Arcangeli  2017-07-06  2084  		 * without warnings.
2c653d0ee2ae78 Andrea Arcangeli  2017-07-06  2085  		 */
2c653d0ee2ae78 Andrea Arcangeli  2017-07-06  2086  		if (!is_page_sharing_candidate(stable_node))
2c653d0ee2ae78 Andrea Arcangeli  2017-07-06  2087  			max_page_sharing_bypass = true;
fec43fa50ccf83 Andrea Arcangeli  2021-11-23  2088  	} else {
fec43fa50ccf83 Andrea Arcangeli  2021-11-23  2089  		/*
fec43fa50ccf83 Andrea Arcangeli  2021-11-23  2090  		 * If the hash value of the page has changed from the last
fec43fa50ccf83 Andrea Arcangeli  2021-11-23  2091  		 * time we calculated it, this page is changing frequently:
fec43fa50ccf83 Andrea Arcangeli  2021-11-23  2092  		 * therefore we don't want to write protect it.
fec43fa50ccf83 Andrea Arcangeli  2021-11-23  2093  		 */
fec43fa50ccf83 Andrea Arcangeli  2021-11-23  2094  		checksum = calc_checksum(page);

"checksum" initialized here.  Not intialized for stable_node.

fec43fa50ccf83 Andrea Arcangeli  2021-11-23  2095  		if (rmap_item->oldchecksum != checksum) {
fec43fa50ccf83 Andrea Arcangeli  2021-11-23  2096  			rmap_item->oldchecksum = checksum;
fec43fa50ccf83 Andrea Arcangeli  2021-11-23  2097  			remove_rmap_item_from_tree(rmap_item);
fec43fa50ccf83 Andrea Arcangeli  2021-11-23  2098  			return;
fec43fa50ccf83 Andrea Arcangeli  2021-11-23  2099  		}
4146d2d673e8d6 Hugh Dickins      2013-02-22  2100  	}
31dbd01f314364 Izik Eidus        2009-09-21  2101  
31dbd01f314364 Izik Eidus        2009-09-21  2102  	/* We first start with searching the page inside the stable tree */
62b61f611eb5e2 Hugh Dickins      2009-12-14  2103  	kpage = stable_tree_search(page);
4146d2d673e8d6 Hugh Dickins      2013-02-22  2104  	if (kpage == page && rmap_item->head == stable_node) {
4146d2d673e8d6 Hugh Dickins      2013-02-22  2105  		put_page(kpage);
4146d2d673e8d6 Hugh Dickins      2013-02-22  2106  		return;
4146d2d673e8d6 Hugh Dickins      2013-02-22  2107  	}
4146d2d673e8d6 Hugh Dickins      2013-02-22  2108  
4146d2d673e8d6 Hugh Dickins      2013-02-22  2109  	remove_rmap_item_from_tree(rmap_item);
4146d2d673e8d6 Hugh Dickins      2013-02-22  2110  
62b61f611eb5e2 Hugh Dickins      2009-12-14  2111  	if (kpage) {
2cee57d1b08877 Yang Shi          2019-03-05  2112  		if (PTR_ERR(kpage) == -EBUSY)
2cee57d1b08877 Yang Shi          2019-03-05  2113  			return;
2cee57d1b08877 Yang Shi          2019-03-05  2114  
08beca44dfb0ab Hugh Dickins      2009-12-14  2115  		err = try_to_merge_with_ksm_page(rmap_item, page, kpage);
31dbd01f314364 Izik Eidus        2009-09-21  2116  		if (!err) {
31dbd01f314364 Izik Eidus        2009-09-21  2117  			/*
31dbd01f314364 Izik Eidus        2009-09-21  2118  			 * The page was successfully merged:
31dbd01f314364 Izik Eidus        2009-09-21  2119  			 * add its rmap_item to the stable tree.
31dbd01f314364 Izik Eidus        2009-09-21  2120  			 */
5ad6468801d28c Hugh Dickins      2009-12-14  2121  			lock_page(kpage);
2c653d0ee2ae78 Andrea Arcangeli  2017-07-06  2122  			stable_tree_append(rmap_item, page_stable_node(kpage),
2c653d0ee2ae78 Andrea Arcangeli  2017-07-06  2123  					   max_page_sharing_bypass);
5ad6468801d28c Hugh Dickins      2009-12-14  2124  			unlock_page(kpage);
31dbd01f314364 Izik Eidus        2009-09-21  2125  		}
8dd3557a52f0bc Hugh Dickins      2009-12-14  2126  		put_page(kpage);
31dbd01f314364 Izik Eidus        2009-09-21  2127  		return;
31dbd01f314364 Izik Eidus        2009-09-21  2128  	}
31dbd01f314364 Izik Eidus        2009-09-21  2129  
e86c59b1b12d0d Claudio Imbrenda  2017-02-24  2130  	/*
e86c59b1b12d0d Claudio Imbrenda  2017-02-24  2131  	 * Same checksum as an empty page. We attempt to merge it with the
e86c59b1b12d0d Claudio Imbrenda  2017-02-24  2132  	 * appropriate zero page if the user enabled this via sysfs.
e86c59b1b12d0d Claudio Imbrenda  2017-02-24  2133  	 */
e86c59b1b12d0d Claudio Imbrenda  2017-02-24 @2134  	if (ksm_use_zero_pages && (checksum == zero_checksum)) {

uninitialized here.  Smatch cannot see how ksm_use_zero_pages and
stable_node are related.  (Neither can I but I have not looked at the
context).

e86c59b1b12d0d Claudio Imbrenda  2017-02-24  2135  		struct vm_area_struct *vma;
e86c59b1b12d0d Claudio Imbrenda  2017-02-24  2136  
d8ed45c5dcd455 Michel Lespinasse 2020-06-08  2137  		mmap_read_lock(mm);
4b22927f0cbd58 Kirill Tkhai      2017-10-03  2138  		vma = find_mergeable_vma(mm, rmap_item->address);
56df70a63ed5d9 Muchun Song       2020-04-20  2139  		if (vma) {
e86c59b1b12d0d Claudio Imbrenda  2017-02-24  2140  			err = try_to_merge_one_page(vma, page,
e86c59b1b12d0d Claudio Imbrenda  2017-02-24  2141  					ZERO_PAGE(rmap_item->address));
56df70a63ed5d9 Muchun Song       2020-04-20  2142  		} else {
56df70a63ed5d9 Muchun Song       2020-04-20  2143  			/*
56df70a63ed5d9 Muchun Song       2020-04-20  2144  			 * If the vma is out of date, we do not need to
56df70a63ed5d9 Muchun Song       2020-04-20  2145  			 * continue.
56df70a63ed5d9 Muchun Song       2020-04-20  2146  			 */
56df70a63ed5d9 Muchun Song       2020-04-20  2147  			err = 0;
56df70a63ed5d9 Muchun Song       2020-04-20  2148  		}
d8ed45c5dcd455 Michel Lespinasse 2020-06-08  2149  		mmap_read_unlock(mm);
e86c59b1b12d0d Claudio Imbrenda  2017-02-24  2150  		/*
e86c59b1b12d0d Claudio Imbrenda  2017-02-24  2151  		 * In case of failure, the page was not really empty, so we
e86c59b1b12d0d Claudio Imbrenda  2017-02-24  2152  		 * need to continue. Otherwise we're done.
e86c59b1b12d0d Claudio Imbrenda  2017-02-24  2153  		 */
e86c59b1b12d0d Claudio Imbrenda  2017-02-24  2154  		if (!err)
e86c59b1b12d0d Claudio Imbrenda  2017-02-24  2155  			return;
e86c59b1b12d0d Claudio Imbrenda  2017-02-24  2156  	}
8dd3557a52f0bc Hugh Dickins      2009-12-14  2157  	tree_rmap_item =
8dd3557a52f0bc Hugh Dickins      2009-12-14  2158  		unstable_tree_search_insert(rmap_item, page, &tree_page);
31dbd01f314364 Izik Eidus        2009-09-21  2159  	if (tree_rmap_item) {
77da2ba0648a4f Claudio Imbrenda  2018-04-05  2160  		bool split;
77da2ba0648a4f Claudio Imbrenda  2018-04-05  2161  
8dd3557a52f0bc Hugh Dickins      2009-12-14  2162  		kpage = try_to_merge_two_pages(rmap_item, page,
8dd3557a52f0bc Hugh Dickins      2009-12-14  2163  						tree_rmap_item, tree_page);
77da2ba0648a4f Claudio Imbrenda  2018-04-05  2164  		/*
77da2ba0648a4f Claudio Imbrenda  2018-04-05  2165  		 * If both pages we tried to merge belong to the same compound
77da2ba0648a4f Claudio Imbrenda  2018-04-05  2166  		 * page, then we actually ended up increasing the reference
77da2ba0648a4f Claudio Imbrenda  2018-04-05  2167  		 * count of the same compound page twice, and split_huge_page
77da2ba0648a4f Claudio Imbrenda  2018-04-05  2168  		 * failed.
77da2ba0648a4f Claudio Imbrenda  2018-04-05  2169  		 * Here we set a flag if that happened, and we use it later to
77da2ba0648a4f Claudio Imbrenda  2018-04-05  2170  		 * try split_huge_page again. Since we call put_page right
77da2ba0648a4f Claudio Imbrenda  2018-04-05  2171  		 * afterwards, the reference count will be correct and
77da2ba0648a4f Claudio Imbrenda  2018-04-05  2172  		 * split_huge_page should succeed.
77da2ba0648a4f Claudio Imbrenda  2018-04-05  2173  		 */
77da2ba0648a4f Claudio Imbrenda  2018-04-05  2174  		split = PageTransCompound(page)
77da2ba0648a4f Claudio Imbrenda  2018-04-05  2175  			&& compound_head(page) == compound_head(tree_page);
8dd3557a52f0bc Hugh Dickins      2009-12-14  2176  		put_page(tree_page);
bc56620b493496 Hugh Dickins      2013-02-22  2177  		if (kpage) {
31dbd01f314364 Izik Eidus        2009-09-21  2178  			/*
bc56620b493496 Hugh Dickins      2013-02-22  2179  			 * The pages were successfully merged: insert new
bc56620b493496 Hugh Dickins      2013-02-22  2180  			 * node in the stable tree and add both rmap_items.
31dbd01f314364 Izik Eidus        2009-09-21  2181  			 */
5ad6468801d28c Hugh Dickins      2009-12-14  2182  			lock_page(kpage);
7b6ba2c7d3baf8 Hugh Dickins      2009-12-14  2183  			stable_node = stable_tree_insert(kpage);
7b6ba2c7d3baf8 Hugh Dickins      2009-12-14  2184  			if (stable_node) {
2c653d0ee2ae78 Andrea Arcangeli  2017-07-06  2185  				stable_tree_append(tree_rmap_item, stable_node,
2c653d0ee2ae78 Andrea Arcangeli  2017-07-06  2186  						   false);
2c653d0ee2ae78 Andrea Arcangeli  2017-07-06  2187  				stable_tree_append(rmap_item, stable_node,
2c653d0ee2ae78 Andrea Arcangeli  2017-07-06  2188  						   false);
7b6ba2c7d3baf8 Hugh Dickins      2009-12-14  2189  			}
5ad6468801d28c Hugh Dickins      2009-12-14  2190  			unlock_page(kpage);
7b6ba2c7d3baf8 Hugh Dickins      2009-12-14  2191  
31dbd01f314364 Izik Eidus        2009-09-21  2192  			/*
31dbd01f314364 Izik Eidus        2009-09-21  2193  			 * If we fail to insert the page into the stable tree,
31dbd01f314364 Izik Eidus        2009-09-21  2194  			 * we will have 2 virtual addresses that are pointing
31dbd01f314364 Izik Eidus        2009-09-21  2195  			 * to a ksm page left outside the stable tree,
31dbd01f314364 Izik Eidus        2009-09-21  2196  			 * in which case we need to break_cow on both.
31dbd01f314364 Izik Eidus        2009-09-21  2197  			 */
7b6ba2c7d3baf8 Hugh Dickins      2009-12-14  2198  			if (!stable_node) {
8dd3557a52f0bc Hugh Dickins      2009-12-14  2199  				break_cow(tree_rmap_item);
8dd3557a52f0bc Hugh Dickins      2009-12-14  2200  				break_cow(rmap_item);
31dbd01f314364 Izik Eidus        2009-09-21  2201  			}
77da2ba0648a4f Claudio Imbrenda  2018-04-05  2202  		} else if (split) {
77da2ba0648a4f Claudio Imbrenda  2018-04-05  2203  			/*
77da2ba0648a4f Claudio Imbrenda  2018-04-05  2204  			 * We are here if we tried to merge two pages and
77da2ba0648a4f Claudio Imbrenda  2018-04-05  2205  			 * failed because they both belonged to the same
77da2ba0648a4f Claudio Imbrenda  2018-04-05  2206  			 * compound page. We will split the page now, but no
77da2ba0648a4f Claudio Imbrenda  2018-04-05  2207  			 * merging will take place.
77da2ba0648a4f Claudio Imbrenda  2018-04-05  2208  			 * We do not want to add the cost of a full lock; if
77da2ba0648a4f Claudio Imbrenda  2018-04-05  2209  			 * the page is locked, it is better to skip it and
77da2ba0648a4f Claudio Imbrenda  2018-04-05  2210  			 * perhaps try again later.
77da2ba0648a4f Claudio Imbrenda  2018-04-05  2211  			 */
77da2ba0648a4f Claudio Imbrenda  2018-04-05  2212  			if (!trylock_page(page))
77da2ba0648a4f Claudio Imbrenda  2018-04-05  2213  				return;
77da2ba0648a4f Claudio Imbrenda  2018-04-05  2214  			split_huge_page(page);
77da2ba0648a4f Claudio Imbrenda  2018-04-05  2215  			unlock_page(page);
31dbd01f314364 Izik Eidus        2009-09-21  2216  		}
31dbd01f314364 Izik Eidus        2009-09-21  2217  	}
31dbd01f314364 Izik Eidus        2009-09-21  2218  }

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org


             reply	other threads:[~2021-12-18 21:20 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-12-18 21:20 kernel test robot [this message]
2022-01-05 10:02 ` [andrea-aa:main 44/48] mm/ksm.c:2134 cmp_and_merge_page() error: uninitialized symbol 'checksum' Dan Carpenter
2022-01-05 10:02 ` Dan Carpenter

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=202112190517.NPcuhEOX-lkp@intel.com \
    --to=lkp@intel.com \
    --cc=kbuild@lists.01.org \
    /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.