On Fri, Jan 12, 2024 at 12:13 AM Dan Carpenter <dan.carpenter@xxxxxxxxxx> wrote: > > Hello Yu Zhao, > > The patch 081488051d28: "mm/mglru: fix underprotected page cache" > from Dec 7, 2023 (linux-next), leads to the following Smatch static > checker warning: > > mm/workingset.c:318 lru_gen_refault() > warn: always true condition '(refs >= ((((1))) << (__builtin_choose_expr((4 == 4), (((2) < (64 - 26 - 3 - 3 - 0 - 10 - 0 - (8 + 14))) ?(2):(64 - 26 - 3 - 3 - 0 - 10 - 0 - (8 + 14))), ))) - 1) => (s32min-s32max >= 0)' > > mm/workingset.c > 308 atomic_long_add(delta, &lrugen->refaulted[hist][type][tier]); > 309 mod_lruvec_state(lruvec, WORKINGSET_ACTIVATE_BASE + type, delta); > 310 > 311 /* > 312 * Count the following two cases as stalls: > 313 * 1. For pages accessed through page tables, hotter pages pushed out > 314 * hot pages which refaulted immediately. > 315 * 2. For pages accessed multiple times through file descriptors, > 316 * they would have been protected by sort_folio(). > 317 */ > --> 318 if (lru_gen_in_fault() || refs >= BIT(LRU_REFS_WIDTH) - 1) { > ^^^^^^^^^^^^^^^^^^^^^^^ > In my x86 allmodconfig this is zero and refs is always >= 0. This could > be intentional, but I thought it was worth checking. Appreciate the manual work! This indeed is intentional if LRU_REFS_WIDTH is 0. What would be the best way to suppress this warning?