From: kernel test robot <lkp@intel.com>
To: "Barry Song (Xiaomi)" <baohua@kernel.org>
Cc: oe-kbuild-all@lists.linux.dev,
linux-arm-kernel@lists.infradead.org, barry.song@csr.com
Subject: [baohua:dev/kairui_scanbalance 9/9] mm/vmscan.c:1957:46: error: dereferencing pointer to incomplete type 'struct lru_gen_folio'
Date: Fri, 11 Sep 2026 05:18:33 +0800 [thread overview]
Message-ID: <202609110429.UIZ3Tr8e-lkp@intel.com> (raw)
tree: https://git.kernel.org/pub/scm/linux/kernel/git/baohua/linux.git dev/kairui_scanbalance
head: c96aacd4045a7a4c8d292e6c9ba6d169cdc0b570
commit: c96aacd4045a7a4c8d292e6c9ba6d169cdc0b570 [9/9] mm/mglru: avoid placing rejected folios below populated gen
config: powerpc-randconfig-r123-20260910 (https://download.01.org/0day-ci/archive/20260911/202609110429.UIZ3Tr8e-lkp@intel.com/config)
compiler: powerpc-linux-gcc (GCC) 8.5.0
sparse: v0.6.5-rc1
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260911/202609110429.UIZ3Tr8e-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@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202609110429.UIZ3Tr8e-lkp@intel.com/
All errors (new ones prefixed by >>):
^~~~~~~~~~~~~
include/asm-generic/rwonce.h:49:2: note: in expansion of macro 'compiletime_assert_rwonce_type'
compiletime_assert_rwonce_type(x); \
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
mm/vmscan.c:1955:26: note: in expansion of macro 'READ_ONCE'
unsigned long max_seq = READ_ONCE((lruvec)->lrugen.max_seq);
^~~~~~~~~
mm/vmscan.c:1955:44: error: 'struct lruvec' has no member named 'lrugen'
unsigned long max_seq = READ_ONCE((lruvec)->lrugen.max_seq);
^~
include/linux/compiler.h:68:3: note: in definition of macro '__trace_if_value'
(cond) ? \
^~~~
include/linux/compiler.h:55:28: note: in expansion of macro '__trace_if_var'
#define if(cond, ...) if ( __trace_if_var( !!(cond , ## __VA_ARGS__) ) )
^~~~~~~~~~~~~~
include/linux/compiler_types.h:682:3: note: in expansion of macro 'if'
if (!(condition)) \
^~
include/linux/compiler_types.h:690:2: note: in expansion of macro '__compiletime_assert'
__compiletime_assert(condition, msg, prefix, suffix)
^~~~~~~~~~~~~~~~~~~~
include/linux/compiler_types.h:702:2: note: in expansion of macro '_compiletime_assert'
_compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
^~~~~~~~~~~~~~~~~~~
include/asm-generic/rwonce.h:36:2: note: in expansion of macro 'compiletime_assert'
compiletime_assert(__native_word(t) || sizeof(t) == sizeof(long long), \
^~~~~~~~~~~~~~~~~~
include/asm-generic/rwonce.h:36:21: note: in expansion of macro '__native_word'
compiletime_assert(__native_word(t) || sizeof(t) == sizeof(long long), \
^~~~~~~~~~~~~
include/asm-generic/rwonce.h:49:2: note: in expansion of macro 'compiletime_assert_rwonce_type'
compiletime_assert_rwonce_type(x); \
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
mm/vmscan.c:1955:26: note: in expansion of macro 'READ_ONCE'
unsigned long max_seq = READ_ONCE((lruvec)->lrugen.max_seq);
^~~~~~~~~
mm/vmscan.c:1955:44: error: 'struct lruvec' has no member named 'lrugen'
unsigned long max_seq = READ_ONCE((lruvec)->lrugen.max_seq);
^~
include/linux/compiler.h:68:3: note: in definition of macro '__trace_if_value'
(cond) ? \
^~~~
include/linux/compiler.h:55:28: note: in expansion of macro '__trace_if_var'
#define if(cond, ...) if ( __trace_if_var( !!(cond , ## __VA_ARGS__) ) )
^~~~~~~~~~~~~~
include/linux/compiler_types.h:682:3: note: in expansion of macro 'if'
if (!(condition)) \
^~
include/linux/compiler_types.h:690:2: note: in expansion of macro '__compiletime_assert'
__compiletime_assert(condition, msg, prefix, suffix)
^~~~~~~~~~~~~~~~~~~~
include/linux/compiler_types.h:702:2: note: in expansion of macro '_compiletime_assert'
_compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
^~~~~~~~~~~~~~~~~~~
include/asm-generic/rwonce.h:36:2: note: in expansion of macro 'compiletime_assert'
compiletime_assert(__native_word(t) || sizeof(t) == sizeof(long long), \
^~~~~~~~~~~~~~~~~~
include/asm-generic/rwonce.h:49:2: note: in expansion of macro 'compiletime_assert_rwonce_type'
compiletime_assert_rwonce_type(x); \
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
mm/vmscan.c:1955:26: note: in expansion of macro 'READ_ONCE'
unsigned long max_seq = READ_ONCE((lruvec)->lrugen.max_seq);
^~~~~~~~~
In file included from <command-line>:
mm/vmscan.c:1955:44: error: 'struct lruvec' has no member named 'lrugen'
unsigned long max_seq = READ_ONCE((lruvec)->lrugen.max_seq);
^~
include/linux/compiler_types.h:626:13: note: in definition of macro '__unqual_scalar_typeof'
_Generic((x), \
^
include/asm-generic/rwonce.h:50:2: note: in expansion of macro '__READ_ONCE'
__READ_ONCE(x); \
^~~~~~~~~~~
mm/vmscan.c:1955:26: note: in expansion of macro 'READ_ONCE'
unsigned long max_seq = READ_ONCE((lruvec)->lrugen.max_seq);
^~~~~~~~~
In file included from ./arch/powerpc/include/generated/asm/rwonce.h:1,
from include/linux/compiler.h:369,
from include/asm-generic/bug.h:5,
from arch/powerpc/include/asm/bug.h:116,
from include/linux/bug.h:5,
from include/linux/mmdebug.h:5,
from include/linux/mm.h:7,
from mm/vmscan.c:15:
mm/vmscan.c:1955:44: error: 'struct lruvec' has no member named 'lrugen'
unsigned long max_seq = READ_ONCE((lruvec)->lrugen.max_seq);
^~
include/asm-generic/rwonce.h:44:72: note: in definition of macro '__READ_ONCE'
#define __READ_ONCE(x) (*(const volatile __unqual_scalar_typeof(x) *)&(x))
^
mm/vmscan.c:1955:26: note: in expansion of macro 'READ_ONCE'
unsigned long max_seq = READ_ONCE((lruvec)->lrugen.max_seq);
^~~~~~~~~
In file included from include/asm-generic/bug.h:5,
from arch/powerpc/include/asm/bug.h:116,
from include/linux/bug.h:5,
from include/linux/mmdebug.h:5,
from include/linux/mm.h:7,
from mm/vmscan.c:15:
>> mm/vmscan.c:1957:46: error: dereferencing pointer to incomplete type 'struct lru_gen_folio'
if (folio_test_unevictable(folio) || !lrugen->enabled)
^~
include/linux/compiler.h:57:52: note: in definition of macro '__trace_if_var'
#define __trace_if_var(cond) (__builtin_constant_p(cond) ? (cond) : __trace_if_value(cond))
^~~~
mm/vmscan.c:1957:2: note: in expansion of macro 'if'
if (folio_test_unevictable(folio) || !lrugen->enabled)
^~
mm/vmscan.c:1960:8: error: implicit declaration of function 'lru_gen_folio_seq'; did you mean 'lru_to_folio'? [-Werror=implicit-function-declaration]
seq = lru_gen_folio_seq(lruvec, folio, false);
^~~~~~~~~~~~~~~~~
lru_to_folio
mm/vmscan.c:1962:8: error: implicit declaration of function 'lru_gen_from_seq'; did you mean 'lru_gen_set_refs'? [-Werror=implicit-function-declaration]
gen = lru_gen_from_seq(seq);
^~~~~~~~~~~~~~~~
lru_gen_set_refs
mm/vmscan.c:1967:2: error: implicit declaration of function 'lru_gen_update_size'; did you mean 'huge_page_size'? [-Werror=implicit-function-declaration]
lru_gen_update_size(lruvec, folio, -1, gen);
^~~~~~~~~~~~~~~~~~~
huge_page_size
mm/vmscan.c:1953:6: warning: variable 'zone' set but not used [-Wunused-but-set-variable]
int zone = folio_zonenum(folio);
^~~~
mm/vmscan.c:1952:6: warning: variable 'type' set but not used [-Wunused-but-set-variable]
int type = folio_is_file_lru(folio);
^~~~
cc1: some warnings being treated as errors
vim +1957 mm/vmscan.c
1938
1939 /*
1940 * Even though we have called folio_set_active() for rejected folios
1941 * in evict_folios(), they may still be demoted or placed in the last
1942 * populated generation since we can now scan all generations.
1943 * Make sure these folios are neither demoted nor placed in the last
1944 * populated generation, unless it is also the youngest generation
1945 */
1946 static inline bool lru_gen_add_rejected_folio(struct lruvec *lruvec, struct folio *folio,
1947 unsigned long scanned_seq)
1948 {
1949 unsigned long seq;
1950 unsigned long flags;
1951 int gen;
1952 int type = folio_is_file_lru(folio);
1953 int zone = folio_zonenum(folio);
1954 struct lru_gen_folio *lrugen = &lruvec->lrugen;
> 1955 unsigned long max_seq = READ_ONCE((lruvec)->lrugen.max_seq);
1956
> 1957 if (folio_test_unevictable(folio) || !lrugen->enabled)
1958 return false;
1959
1960 seq = lru_gen_folio_seq(lruvec, folio, false);
1961 seq = max(seq, min(scanned_seq + 1, max_seq));
1962 gen = lru_gen_from_seq(seq);
1963 flags = (gen + 1UL) << LRU_GEN_PGOFF;
1964 /* see the comment on MIN_NR_GENS about PG_active */
1965 set_mask_bits(folio_flags(folio, 0), LRU_GEN_MASK | BIT(PG_active), flags);
1966
1967 lru_gen_update_size(lruvec, folio, -1, gen);
1968 list_add(&folio->lru, &lrugen->folios[gen][type][zone]);
1969
1970 return true;
1971 }
1972
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
reply other threads:[~2026-09-10 21:19 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
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=202609110429.UIZ3Tr8e-lkp@intel.com \
--to=lkp@intel.com \
--cc=baohua@kernel.org \
--cc=barry.song@csr.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=oe-kbuild-all@lists.linux.dev \
/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.