On Wed, Feb 15, 2023 at 11:09:36AM +0100, Jesper Dangaard Brouer wrote: > With our XDP-hints kfunc approach, where individual drivers overload the > default implementation, it can be hard for API users to determine > whether or not the current device driver have this kfunc available. > > Change the default implementations to use an errno (ENODEV), that > drivers shouldn't return, to make it possible for BPF runtime to > determine if bpf kfunc for xdp metadata isn't implemented by driver. I think it diverts ENODEV usage from its original purpose too much. Maybe providing information in dmesg would be a better solution? > > This is intended to ease supporting and troubleshooting setups. E.g. > when users on mailing list report -19 (ENODEV) as an error, then we can > immediately tell them their kernel is too old. Do you mean driver being too old, not kernel? > > Signed-off-by: Jesper Dangaard Brouer <brouer@xxxxxxxxxx> > --- > net/core/xdp.c | 8 ++++++-- > 1 file changed, 6 insertions(+), 2 deletions(-) > > diff --git a/net/core/xdp.c b/net/core/xdp.c > index 26483935b7a4..7bb5984ae4f7 100644 > --- a/net/core/xdp.c > +++ b/net/core/xdp.c > @@ -722,10 +722,12 @@ __diag_ignore_all("-Wmissing-prototypes", > * @timestamp: Return value pointer. > * > * Returns 0 on success or ``-errno`` on error. > + * > + * -ENODEV (19): means device driver doesn't implement kfunc > */ > __bpf_kfunc int bpf_xdp_metadata_rx_timestamp(const struct xdp_md *ctx, u64 *timestamp) > { > - return -EOPNOTSUPP; > + return -ENODEV; > } > > /** > @@ -734,10 +736,12 @@ __bpf_kfunc int bpf_xdp_metadata_rx_timestamp(const struct xdp_md *ctx, u64 *tim > * @hash: Return value pointer. > * > * Returns 0 on success or ``-errno`` on error. > + * > + * -ENODEV (19): means device driver doesn't implement kfunc > */ > __bpf_kfunc int bpf_xdp_metadata_rx_hash(const struct xdp_md *ctx, u32 *hash) > { > - return -EOPNOTSUPP; > + return -ENODEV; > } > > __diag_pop(); Documentation contains the following lines: Not all kfuncs have to be implemented by the device driver; when not implemented, the default ones that return ``-EOPNOTSUPP`` will be used. If you decide to proceed with current implementation, you'd need to update them in v2. > >