Re: [tip:timers/vdso 37/45] progs/hid_bpf_helpers.h:117:31: error: declaration of 'struct bpf_wq' will not be visible outside of this function

From: Thomas Weißschuh

Date: Thu Mar 12 2026 - 02:47:07 EST


Hi Benjamin,

thanks for the quick response.

On Wed, Mar 11, 2026 at 06:05:25PM +0100, Benjamin Tissoires wrote:
> On Mar 11 2026, Thomas Weißschuh wrote:
> > could you take a look at the report below?
> > This looks like an issue in the HID BPF subsystem, surfaced by my
> > unrelated change. Does this ring a bell for you?
> >
> > I wasn't able to reproduce it so far, but will continue looking into it.
>
> Both struct bpf_wq and struct hid_device should be generated in the
> vmlinux.h that we include in the selftests. So this is definitely not
> related to your patch AFAICT.

Ack. To be sure I sent this branch again through 0day and will see if it
breaks on the same commit.

> Looking in the config, we have `# CONFIG_HID_SUPPORT is not set` -> so
> that would explain why struct hid_device is not available. But in that
> case, why are the HID selftests even built?

CONFIG_DEBUG_INFO_BTF is also not set. So there should be no vmlinux.h
at all in the first. Which is exactly what happens in my attempts
to reproduce the issue. But even when fixing that up, the issue persists.

> The bpf_wq bits should be related to a similar-ish issue where one
> config setting is not set and so it's not included in the final BTF.

I'll look into how exactly things end up in vmlinux.h.
At least the headers for 'struct bpf_wq' are always included somewhere.
But maybe the type also needs to be used to define some structure.

> I paged out how we can ignore selftests based on the .config, so if you
> have any hints, that would be nice :)

Inspecting the kernel configuration might be hard, as there might be no file
for it available. Could you use vmlinux.h itself for feature detection?


Thomas

> > On Wed, Mar 11, 2026 at 03:29:54PM +0100, kernel test robot wrote:
> > > tree: https://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git timers/vdso
> > > head: f7178f159b2a36d070fd43b0d751e4e4415ec39e
> > > commit: 912632a7fd4cc1eac2778828d92e8fe46939d6bd [37/45] vdso/datapage: Trim down unnecessary includes
> > > config: riscv-allnoconfig-bpf (https://download.01.org/0day-ci/archive/20260311/202603111558.KLCIxsZB-lkp@xxxxxxxxx/config)
> > > compiler: riscv64-linux-gnu-gcc (Debian 14.2.0-19) 14.2.0
> > > reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260311/202603111558.KLCIxsZB-lkp@xxxxxxxxx/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@xxxxxxxxx>
> > > | Closes: https://lore.kernel.org/oe-kbuild-all/202603111558.KLCIxsZB-lkp@xxxxxxxxx/
> > >
> > > All errors (new ones prefixed by >>):
> > >
> > > In file included from progs/hid.c:3:
> > > >> progs/hid_bpf_helpers.h:117:31: error: declaration of 'struct bpf_wq' will not be visible outside of this function [-Werror,-Wvisibility]
> > > 117 | extern int bpf_wq_init(struct bpf_wq *wq, void *p__map, unsigned int flags) __weak __ksym;
> > > | ^
> > > progs/hid_bpf_helpers.h:118:32: error: declaration of 'struct bpf_wq' will not be visible outside of this function [-Werror,-Wvisibility]
> > > 118 | extern int bpf_wq_start(struct bpf_wq *wq, unsigned int flags) __weak __ksym;
> > > | ^
> > > progs/hid_bpf_helpers.h:119:39: error: declaration of 'struct bpf_wq' will not be visible outside of this function [-Werror,-Wvisibility]
> > > 119 | extern int bpf_wq_set_callback(struct bpf_wq *wq,
> > > | ^
> > > >> progs/hid.c:448:16: error: field has incomplete type 'struct bpf_wq'
> > > 448 | struct bpf_wq work;
> > > | ^
> > > progs/hid.c:448:9: note: forward declaration of 'struct bpf_wq'
> > > 448 | struct bpf_wq work;
> > > | ^
> > > >> progs/hid.c:487:18: error: incompatible pointer types passing 'struct bpf_wq *' to parameter of type 'struct bpf_wq *' [-Wincompatible-pointer-types]
> > > 487 | if (bpf_wq_init(wq, &hmap, 0) != 0)
> > > | ^~
> > > progs/hid_bpf_helpers.h:117:39: note: passing argument to parameter 'wq' here
> > > 117 | extern int bpf_wq_init(struct bpf_wq *wq, void *p__map, unsigned int flags) __weak __ksym;
> > > | ^
> > > progs/hid.c:490:26: error: incompatible pointer types passing 'struct bpf_wq *' to parameter of type 'struct bpf_wq *' [-Wincompatible-pointer-types]
> > > 490 | if (bpf_wq_set_callback(wq, wq_cb_sleepable, 0))
> > > | ^~
> > > progs/hid_bpf_helpers.h:119:47: note: passing argument to parameter 'wq' here
> > > 119 | extern int bpf_wq_set_callback(struct bpf_wq *wq,
> > > | ^
> > > progs/hid.c:493:19: error: incompatible pointer types passing 'struct bpf_wq *' to parameter of type 'struct bpf_wq *' [-Wincompatible-pointer-types]
> > > 493 | if (bpf_wq_start(wq, 0))
> > > | ^~
> > > progs/hid_bpf_helpers.h:118:40: note: passing argument to parameter 'wq' here
> > > 118 | extern int bpf_wq_start(struct bpf_wq *wq, unsigned int flags) __weak __ksym;
> > > | ^
> > > progs/hid.c:503:24: error: incomplete definition of type 'struct hid_device'
> > > 503 | int hid = hid_ctx->hid->id;
> > > | ~~~~~~~~~~~~^
> > > progs/hid_bpf_helpers.h:59:9: note: forward declaration of 'struct hid_device'
> > > 59 | struct hid_device *hid;
> > > | ^
> > > 8 errors generated.
> > >
> > > --
> > > 0-DAY CI Kernel Test Service
> > > https://github.com/intel/lkp-tests/wiki
> >