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
next 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.