From: Nick Desaulniers <ndesaulniers@google.com>
To: Johannes Weiner <hannes@cmpxchg.org>
Cc: kbuild@lists.01.org,
clang-built-linux <clang-built-linux@googlegroups.com>,
kbuild-all@lists.01.org, kbuild test robot <lkp@intel.com>,
Suren Baghdasaryan <surenb@google.com>,
Andrew Morton <akpm@linux-foundation.org>,
Linux Memory Management List <linux-mm@kvack.org>
Subject: Re: [linux-next:master 11878/12136] mm/vmscan.c:2216:39: warning: implicit conversion from enumeration type 'enum lru_list' to different enumeration type 'enum node_stat_item'
Date: Mon, 18 Nov 2019 10:19:52 -0800 [thread overview]
Message-ID: <CAKwvOdk70dd5F7JjZW5oNaSkQKh8_3P9D8VJ7aPpgx1vYw8Uog@mail.gmail.com> (raw)
In-Reply-To: <201911160531.VrqGMTij%lkp@intel.com>
Hi Johannes,
Below is a 0day report from a build with Clang, can you please take a look?
On Fri, Nov 15, 2019 at 1:44 PM kbuild test robot <lkp@intel.com> wrote:
>
> CC: kbuild-all@lists.01.org
> TO: Johannes Weiner <hannes@cmpxchg.org>
> CC: Suren Baghdasaryan <surenb@google.com>
> CC: Andrew Morton <akpm@linux-foundation.org>
> CC: Linux Memory Management List <linux-mm@kvack.org>
>
> tree: https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master
> head: 5a6fcbeabe3e20459ed8504690b2515dacc5246f
> commit: 07976d367592d6613370c93706795b4ebc0850f1 [11878/12136] mm: vmscan: enforce inactive:active ratio at the reclaim root
> config: arm64-defconfig (attached as .config)
> compiler: clang version 10.0.0 (git://gitmirror/llvm_project f7e9d81a8e222f3c9d4f57e0817f19bbb795e5b6)
> reproduce:
> wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
> chmod +x ~/bin/make.cross
> git checkout 07976d367592d6613370c93706795b4ebc0850f1
> # save the attached .config to linux build tree
> make.cross ARCH=arm64
>
> If you fix the issue, kindly add following tag
> Reported-by: kbuild test robot <lkp@intel.com>
>
> All warnings (new ones prefixed by >>):
>
> >> mm/vmscan.c:2216:39: warning: implicit conversion from enumeration type 'enum lru_list' to different enumeration type 'enum node_stat_item' [-Wenum-conversion]
> inactive = lruvec_page_state(lruvec, inactive_lru);
> ~~~~~~~~~~~~~~~~~ ^~~~~~~~~~~~
> mm/vmscan.c:2217:37: warning: implicit conversion from enumeration type 'enum lru_list' to different enumeration type 'enum node_stat_item' [-Wenum-conversion]
> active = lruvec_page_state(lruvec, active_lru);
> ~~~~~~~~~~~~~~~~~ ^~~~~~~~~~
> mm/vmscan.c:2746:42: warning: implicit conversion from enumeration type 'enum lru_list' to different enumeration type 'enum node_stat_item' [-Wenum-conversion]
> file = lruvec_page_state(target_lruvec, LRU_INACTIVE_FILE);
> ~~~~~~~~~~~~~~~~~ ^~~~~~~~~~~~~~~~~
> 3 warnings generated.
>
> vim +2216 mm/vmscan.c
>
> 2180
> 2181 /*
> 2182 * The inactive anon list should be small enough that the VM never has
> 2183 * to do too much work.
> 2184 *
> 2185 * The inactive file list should be small enough to leave most memory
> 2186 * to the established workingset on the scan-resistant active list,
> 2187 * but large enough to avoid thrashing the aggregate readahead window.
> 2188 *
> 2189 * Both inactive lists should also be large enough that each inactive
> 2190 * page has a chance to be referenced again before it is reclaimed.
> 2191 *
> 2192 * If that fails and refaulting is observed, the inactive list grows.
> 2193 *
> 2194 * The inactive_ratio is the target ratio of ACTIVE to INACTIVE pages
> 2195 * on this LRU, maintained by the pageout code. An inactive_ratio
> 2196 * of 3 means 3:1 or 25% of the pages are kept on the inactive list.
> 2197 *
> 2198 * total target max
> 2199 * memory ratio inactive
> 2200 * -------------------------------------
> 2201 * 10MB 1 5MB
> 2202 * 100MB 1 50MB
> 2203 * 1GB 3 250MB
> 2204 * 10GB 10 0.9GB
> 2205 * 100GB 31 3GB
> 2206 * 1TB 101 10GB
> 2207 * 10TB 320 32GB
> 2208 */
> 2209 static bool inactive_is_low(struct lruvec *lruvec, enum lru_list inactive_lru)
> 2210 {
> 2211 enum lru_list active_lru = inactive_lru + LRU_ACTIVE;
> 2212 unsigned long inactive, active;
> 2213 unsigned long inactive_ratio;
> 2214 unsigned long gb;
> 2215
> > 2216 inactive = lruvec_page_state(lruvec, inactive_lru);
> 2217 active = lruvec_page_state(lruvec, active_lru);
Look like lruvec_page_state() defined in include/linux/memcontrol.h
takes an `enum node_stat_item` for its second parameter, but `enum
lru_list`'s are being passed instead? I see what's going on with the
definitions, but a function should be used to safely convert between
the two different enums in case their definitions ever change,
otherwise we'll continue to see this warning.
> 2218
> 2219 gb = (inactive + active) >> (30 - PAGE_SHIFT);
> 2220 if (gb)
> 2221 inactive_ratio = int_sqrt(10 * gb);
> 2222 else
> 2223 inactive_ratio = 1;
> 2224
> 2225 return inactive * inactive_ratio < active;
> 2226 }
> 2227
>
> ---
> 0-DAY kernel test infrastructure Open Source Technology Center
> https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org Intel Corporation
--
Thanks,
~Nick Desaulniers
next parent reply other threads:[~2019-11-18 18:20 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <201911160531.VrqGMTij%lkp@intel.com>
2019-11-18 18:19 ` Nick Desaulniers [this message]
2019-11-18 18:28 ` Johannes Weiner
2019-11-18 18:33 ` Nick Desaulniers
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=CAKwvOdk70dd5F7JjZW5oNaSkQKh8_3P9D8VJ7aPpgx1vYw8Uog@mail.gmail.com \
--to=ndesaulniers@google.com \
--cc=akpm@linux-foundation.org \
--cc=clang-built-linux@googlegroups.com \
--cc=hannes@cmpxchg.org \
--cc=kbuild-all@lists.01.org \
--cc=kbuild@lists.01.org \
--cc=linux-mm@kvack.org \
--cc=lkp@intel.com \
--cc=surenb@google.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox