On Mar 13 2026, Thomas Weißschuh wrote:
> On Fri, Mar 13, 2026 at 08:40:24AM +0100, Benjamin Tissoires wrote:
> > This can happen in situations when CONFIG_HID_SUPPORT is set to no, or
> > some complex situations where struct bpf_wq is not exported.
> >
> > So do the usual dance of hiding them before including vmlinux.h, and
> > then redefining them and make use of CO-RE to have the correct offsets.
> >
> > Reported-by: kernel test robot <[email protected]>
> > Closes:
> > https://lore.kernel.org/oe-kbuild-all/[email protected]/
> > Cc: [email protected]
>
> 'Fixes' missing? Also for patch 2 in the series.
>
> > Signed-off-by: Benjamin Tissoires <[email protected]>
>
> Reviewed-by: Thomas Wei�schuh <[email protected]>
Thanks!
>
> (Some nits below, feel free to ignore them)
>
> > ---
> > tools/testing/selftests/hid/progs/hid_bpf_helpers.h | 12 ++++++++++++
> > 1 file changed, 12 insertions(+)
> >
> > diff --git a/tools/testing/selftests/hid/progs/hid_bpf_helpers.h
> > b/tools/testing/selftests/hid/progs/hid_bpf_helpers.h
> > index 80ab60905865..2c6ec907dd05 100644
> > --- a/tools/testing/selftests/hid/progs/hid_bpf_helpers.h
> > +++ b/tools/testing/selftests/hid/progs/hid_bpf_helpers.h
> > @@ -8,9 +8,11 @@
> > /* "undefine" structs and enums in vmlinux.h, because we "override" them
> > below */
> > #define hid_bpf_ctx hid_bpf_ctx___not_used
> > #define hid_bpf_ops hid_bpf_ops___not_used
> > +#define hid_device hid_device___not_used
> > #define hid_report_type hid_report_type___not_used
> > #define hid_class_request hid_class_request___not_used
> > #define hid_bpf_attach_flags hid_bpf_attach_flags___not_used
> > +#define bpf_wq bpf_wq___not_used
>
> 'bpf' would sort before 'hid' alphabetically.
ack (note that the last 3 are not sorted, oops).
>
> > #define HID_INPUT_REPORT HID_INPUT_REPORT___not_used
> > #define HID_OUTPUT_REPORT HID_OUTPUT_REPORT___not_used
> > #define HID_FEATURE_REPORT HID_FEATURE_REPORT___not_used
> > @@ -29,9 +31,11 @@
> >
> > #undef hid_bpf_ctx
> > #undef hid_bpf_ops
> > +#undef hid_device
> > #undef hid_report_type
> > #undef hid_class_request
> > #undef hid_bpf_attach_flags
> > +#undef bpf_wq
> > #undef HID_INPUT_REPORT
> > #undef HID_OUTPUT_REPORT
> > #undef HID_FEATURE_REPORT
> > @@ -55,6 +59,14 @@ enum hid_report_type {
> > HID_REPORT_TYPES,
> > };
> >
> > +struct hid_device {
> > + unsigned int id;
> > +} __attribute__((preserve_access_index));
> > +
> > +struct bpf_wq {
> > + __u64 __opaque[2];
> > +};
>
> The fields are never used, would a forward-declaration be sufficient?
>
> struct bpf_wq;
>
> Then you could also avoid the #define dance for that struct.
Unfortunately no. The fields are not used, but the struct is stored in
struct elem, and we use that struct size to compute the size of the map
elements. So we need to tell the compiler how much memory it needs to
be.
Cheers,
Benjamin
>
> > +
> > struct hid_bpf_ctx {
> > struct hid_device *hid;
> > __u32 allocated_size;
> >
> > --
> > 2.52.0
> >
>