Alex Shi <alex.shi@xxxxxxxxxxxxxxxxx> wrote: > 在 2020/11/11 上午3:50, Andrew Morton 写道: >> On Tue, 10 Nov 2020 08:39:24 +0530 Souptick Joarder <jrdr.linux@xxxxxxxxx> wrote: >> >>> On Fri, Nov 6, 2020 at 4:55 PM Alex Shi <alex.shi@xxxxxxxxxxxxxxxxx> wrote: >>>> >>>> Otherwise it cause gcc warning: >>>> ^~~~~~~~~~~~~~~ >>>> ../mm/filemap.c:830:14: warning: no previous prototype for >>>> ‘__add_to_page_cache_locked’ [-Wmissing-prototypes] >>>> noinline int __add_to_page_cache_locked(struct page *page, >>>> ^~~~~~~~~~~~~~~~~~~~~~~~~~ >>> >>> Is CONFIG_DEBUG_INFO_BTF enabled in your .config ? >> >> hm, yes. > > When the config enabled, compiling looks good untill pahole tool > used to get BTF info, but I still failed on a right version pahole >> 1.16. Sorry. I'm seeing an issue with this patch. My build system has pahole v1.17, but I don't think the pahole version is key. $ git checkout 3351b16af494 # recently added to linus/master $ make defconfig $ make menuconfig # set CONFIG_BPF_SYSCALL and CONFIG_DEBUG_INFO_BTF $ make V=1 + ./tools/bpf/resolve_btfids/resolve_btfids vmlinux FAILED unresolved symbol __add_to_page_cache_locked Reverting 3351b16af494 ("mm/filemap: add static for function __add_to_page_cache_locked") fixes the issue. I don't see the warning which motivated this patch, but maybe it requires particular a .config or gcc version. Perhaps adding a __add_to_page_cache_locked() prototype would meet avoid it. But I haven't studied enough on BTF to know if there's a better answer. >>>> Signed-off-by: Alex Shi <alex.shi@xxxxxxxxxxxxxxxxx> >>>> Cc: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> >>>> Cc: linux-mm@xxxxxxxxx >>>> Cc: linux-kernel@xxxxxxxxxxxxxxx >>>> --- >>>> mm/filemap.c | 2 +- >>>> 1 file changed, 1 insertion(+), 1 deletion(-) >>>> >>>> diff --git a/mm/filemap.c b/mm/filemap.c >>>> index d90614f501da..249cf489f5df 100644 >>>> --- a/mm/filemap.c >>>> +++ b/mm/filemap.c >>>> @@ -827,7 +827,7 @@ int replace_page_cache_page(struct page *old, struct page *new, gfp_t gfp_mask) >>>> } >>>> EXPORT_SYMBOL_GPL(replace_page_cache_page); >>>> >>>> -noinline int __add_to_page_cache_locked(struct page *page, >>>> +static noinline int __add_to_page_cache_locked(struct page *page, >>>> struct address_space *mapping, >>>> pgoff_t offset, gfp_t gfp, >>>> void **shadowp) >> >> It's unclear to me whether BTF_ID() requires that the target symbol be >> non-static. It doesn't actually reference the symbol: >> >> #define BTF_ID(prefix, name) \ >> __BTF_ID(__ID(__BTF_ID__##prefix##__##name##__)) >> > > The above usage make me thought BTF don't require the symbol, though > the symbol still exist in vmlinux with 'static'. > > So any comments of this, Alexei? > >> Alexei, can you please comment? >>