[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <202411251534.ETkkSgz6-lkp@intel.com>
Date: Mon, 25 Nov 2024 16:00:49 +0800
From: kernel test robot <lkp@...el.com>
To: Kanchana P Sridhar <kanchana.p.sridhar@...el.com>,
linux-kernel@...r.kernel.org, linux-mm@...ck.org,
hannes@...xchg.org, yosryahmed@...gle.com, nphamcs@...il.com,
chengming.zhou@...ux.dev, usamaarif642@...il.com,
ryan.roberts@....com, ying.huang@...el.com, 21cnbao@...il.com,
akpm@...ux-foundation.org, linux-crypto@...r.kernel.org,
herbert@...dor.apana.org.au, davem@...emloft.net,
clabbe@...libre.com, ardb@...nel.org, ebiggers@...gle.com,
surenb@...gle.com, kristen.c.accardi@...el.com
Cc: llvm@...ts.linux.dev, oe-kbuild-all@...ts.linux.dev,
wajdi.k.feghali@...el.com, vinodh.gopal@...el.com,
kanchana.p.sridhar@...el.com
Subject: Re: [PATCH v4 10/10] mm: zswap: Compress batching with Intel IAA in
zswap_batch_store() of large folios.
Hi Kanchana,
kernel test robot noticed the following build warnings:
[auto build test WARNING on 5a7056135bb69da2ce0a42eb8c07968c1331777b]
url: https://github.com/intel-lab-lkp/linux/commits/Kanchana-P-Sridhar/crypto-acomp-Define-two-new-interfaces-for-compress-decompress-batching/20241125-110412
base: 5a7056135bb69da2ce0a42eb8c07968c1331777b
patch link: https://lore.kernel.org/r/20241123070127.332773-11-kanchana.p.sridhar%40intel.com
patch subject: [PATCH v4 10/10] mm: zswap: Compress batching with Intel IAA in zswap_batch_store() of large folios.
config: x86_64-buildonly-randconfig-003-20241125 (https://download.01.org/0day-ci/archive/20241125/202411251534.ETkkSgz6-lkp@intel.com/config)
compiler: clang version 19.1.3 (https://github.com/llvm/llvm-project ab51eccf88f5321e7c60591c5546b254b6afab99)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20241125/202411251534.ETkkSgz6-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@...el.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202411251534.ETkkSgz6-lkp@intel.com/
All warnings (new ones prefixed by >>):
In file included from mm/zswap.c:18:
In file included from include/linux/highmem.h:8:
In file included from include/linux/cacheflush.h:5:
In file included from arch/x86/include/asm/cacheflush.h:5:
In file included from include/linux/mm.h:2211:
include/linux/vmstat.h:518:36: warning: arithmetic between different enumeration types ('enum node_stat_item' and 'enum lru_list') [-Wenum-enum-conversion]
518 | return node_stat_name(NR_LRU_BASE + lru) + 3; // skip "nr_"
| ~~~~~~~~~~~ ^ ~~~
In file included from mm/zswap.c:40:
In file included from mm/internal.h:13:
include/linux/mm_inline.h:47:41: warning: arithmetic between different enumeration types ('enum node_stat_item' and 'enum lru_list') [-Wenum-enum-conversion]
47 | __mod_lruvec_state(lruvec, NR_LRU_BASE + lru, nr_pages);
| ~~~~~~~~~~~ ^ ~~~
include/linux/mm_inline.h:49:22: warning: arithmetic between different enumeration types ('enum zone_stat_item' and 'enum lru_list') [-Wenum-enum-conversion]
49 | NR_ZONE_LRU_BASE + lru, nr_pages);
| ~~~~~~~~~~~~~~~~ ^ ~~~
>> mm/zswap.c:2315:8: warning: variable 'ret' is used uninitialized whenever 'if' condition is true [-Wsometimes-uninitialized]
2315 | if (memcg_list_lru_alloc(memcg, &zswap_list_lru, GFP_KERNEL)) {
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
mm/zswap.c:2335:8: note: uninitialized use occurs here
2335 | if (!ret && zswap_pool_reached_full)
| ^~~
mm/zswap.c:2315:4: note: remove the 'if' if its condition is always false
2315 | if (memcg_list_lru_alloc(memcg, &zswap_list_lru, GFP_KERNEL)) {
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2316 | mem_cgroup_put(memcg);
| ~~~~~~~~~~~~~~~~~~~~~~
2317 | goto put_objcg;
| ~~~~~~~~~~~~~~~
2318 | }
| ~
mm/zswap.c:2310:7: warning: variable 'ret' is used uninitialized whenever 'if' condition is true [-Wsometimes-uninitialized]
2310 | if (zswap_check_limits())
| ^~~~~~~~~~~~~~~~~~~~
mm/zswap.c:2335:8: note: uninitialized use occurs here
2335 | if (!ret && zswap_pool_reached_full)
| ^~~
mm/zswap.c:2310:3: note: remove the 'if' if its condition is always false
2310 | if (zswap_check_limits())
| ^~~~~~~~~~~~~~~~~~~~~~~~~
2311 | goto put_objcg;
| ~~~~~~~~~~~~~~
mm/zswap.c:2303:8: warning: variable 'ret' is used uninitialized whenever 'if' condition is true [-Wsometimes-uninitialized]
2303 | if (shrink_memcg(memcg)) {
| ^~~~~~~~~~~~~~~~~~~
mm/zswap.c:2335:8: note: uninitialized use occurs here
2335 | if (!ret && zswap_pool_reached_full)
| ^~~
mm/zswap.c:2303:4: note: remove the 'if' if its condition is always false
2303 | if (shrink_memcg(memcg)) {
| ^~~~~~~~~~~~~~~~~~~~~~~~~~
2304 | mem_cgroup_put(memcg);
| ~~~~~~~~~~~~~~~~~~~~~~
2305 | goto put_objcg;
| ~~~~~~~~~~~~~~~
2306 | }
| ~
mm/zswap.c:2295:11: note: initialize the variable 'ret' to silence this warning
2295 | bool ret;
| ^
| = 0
6 warnings generated.
vim +2315 mm/zswap.c
2216
2217 /*
2218 * Store a large folio and/or a batch of any-order folio(s) in zswap
2219 * using IAA compress batching API.
2220 *
2221 * This the main procedure for batching within large folios and for batching
2222 * of folios. Each large folio will be broken into sub-batches of
2223 * SWAP_CRYPTO_BATCH_SIZE pages, the sub-batch pages will be compressed by
2224 * IAA hardware compress engines in parallel, then stored in zpool/xarray.
2225 *
2226 * This procedure should only be called if zswap supports batching of stores.
2227 * Otherwise, the sequential implementation for storing folios as in the
2228 * current zswap_store() should be used. The code handles the unlikely event
2229 * that the zswap pool changes from batching to non-batching between
2230 * swap_writepage() and the start of zswap_batch_store().
2231 *
2232 * The signature of this procedure is meant to allow the calling function,
2233 * (for instance, swap_writepage()) to pass a batch of folios @batch
2234 * (the "reclaim batch") to be stored in zswap.
2235 *
2236 * @batch and @errors have folio_batch_count(@batch) number of entries,
2237 * with one-one correspondence (@errors[i] represents the error status of
2238 * @batch->folios[i], for i in folio_batch_count(@batch)). Please also
2239 * see comments preceding "struct zswap_batch_store_sub_batch" definition
2240 * above.
2241 *
2242 * The calling function (for instance, swap_writepage()) should initialize
2243 * @errors[i] to a non-0 value.
2244 * If zswap successfully stores @batch->folios[i], it will set @errors[i] to 0.
2245 * If there is an error in zswap, it will set @errors[i] to -EINVAL.
2246 *
2247 * @batch: folio_batch of folios to be batch compressed.
2248 * @errors: zswap_batch_store() error status for the folios in @batch.
2249 */
2250 void zswap_batch_store(struct folio_batch *batch, int *errors)
2251 {
2252 struct zswap_batch_store_sub_batch sub_batch;
2253 struct zswap_pool *pool;
2254 u8 i;
2255
2256 /*
2257 * If zswap is disabled, we must invalidate the possibly stale entry
2258 * which was previously stored at this offset. Otherwise, writeback
2259 * could overwrite the new data in the swapfile.
2260 */
2261 if (!zswap_enabled)
2262 goto check_old;
2263
2264 pool = zswap_pool_current_get();
2265
2266 if (!pool) {
2267 if (zswap_check_limits())
2268 queue_work(shrink_wq, &zswap_shrink_work);
2269 goto check_old;
2270 }
2271
2272 if (!pool->can_batch) {
2273 for (i = 0; i < folio_batch_count(batch); ++i)
2274 if (zswap_store(batch->folios[i]))
2275 errors[i] = 0;
2276 else
2277 errors[i] = -EINVAL;
2278 /*
2279 * Seems preferable to release the pool ref after the calls to
2280 * zswap_store(), so that the non-batching pool cannot be
2281 * deleted, can be used for sequential stores, and the zswap pool
2282 * cannot morph into a batching pool.
2283 */
2284 zswap_pool_put(pool);
2285 return;
2286 }
2287
2288 zswap_batch_reset(&sub_batch);
2289 sub_batch.pool = pool;
2290
2291 for (i = 0; i < folio_batch_count(batch); ++i) {
2292 struct folio *folio = batch->folios[i];
2293 struct obj_cgroup *objcg = NULL;
2294 struct mem_cgroup *memcg = NULL;
2295 bool ret;
2296
2297 VM_WARN_ON_ONCE(!folio_test_locked(folio));
2298 VM_WARN_ON_ONCE(!folio_test_swapcache(folio));
2299
2300 objcg = get_obj_cgroup_from_folio(folio);
2301 if (objcg && !obj_cgroup_may_zswap(objcg)) {
2302 memcg = get_mem_cgroup_from_objcg(objcg);
2303 if (shrink_memcg(memcg)) {
2304 mem_cgroup_put(memcg);
2305 goto put_objcg;
2306 }
2307 mem_cgroup_put(memcg);
2308 }
2309
2310 if (zswap_check_limits())
2311 goto put_objcg;
2312
2313 if (objcg) {
2314 memcg = get_mem_cgroup_from_objcg(objcg);
> 2315 if (memcg_list_lru_alloc(memcg, &zswap_list_lru, GFP_KERNEL)) {
2316 mem_cgroup_put(memcg);
2317 goto put_objcg;
2318 }
2319 mem_cgroup_put(memcg);
2320 }
2321
2322 /*
2323 * By default, set zswap error status in "errors" to "success"
2324 * for use in swap_writepage() when this returns. In case of
2325 * errors encountered in any sub-batch in which this folio's
2326 * pages are batch-compressed, a negative error number will
2327 * over-write this when zswap_batch_cleanup() is called.
2328 */
2329 errors[i] = 0;
2330 ret = zswap_batch_comp_folio(folio, errors, i, objcg, &sub_batch,
2331 (i == folio_batch_count(batch) - 1));
2332
2333 put_objcg:
2334 obj_cgroup_put(objcg);
2335 if (!ret && zswap_pool_reached_full)
2336 queue_work(shrink_wq, &zswap_shrink_work);
2337 } /* for batch folios */
2338
2339 zswap_pool_put(pool);
2340
2341 check_old:
2342 for (i = 0; i < folio_batch_count(batch); ++i)
2343 if (errors[i])
2344 zswap_delete_stored_entries(batch->folios[i]);
2345 }
2346
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
Powered by blists - more mailing lists