No functional changes. Instead of having hand-crafted code in bpf_dev_bound_resolve_kfunc, move kfunc <> xmo handler relationship into XDP_METADATA_KFUNC_xxx. This way, any time new kfunc is added, we don't have to touch bpf_dev_bound_resolve_kfunc. Signed-off-by: Stanislav Fomichev <sdf@xxxxxxxxxx> --- include/net/offload.h | 8 +++++--- kernel/bpf/offload.c | 13 +++++++------ net/core/xdp.c | 2 +- 3 files changed, 13 insertions(+), 10 deletions(-) diff --git a/include/net/offload.h b/include/net/offload.h index 264a35881473..de0fac38a95b 100644 --- a/include/net/offload.h +++ b/include/net/offload.h @@ -6,12 +6,14 @@ #define XDP_METADATA_KFUNC_xxx \ NETDEV_METADATA_KFUNC(XDP_METADATA_KFUNC_RX_TIMESTAMP, \ - bpf_xdp_metadata_rx_timestamp) \ + bpf_xdp_metadata_rx_timestamp, \ + xmo_rx_timestamp) \ NETDEV_METADATA_KFUNC(XDP_METADATA_KFUNC_RX_HASH, \ - bpf_xdp_metadata_rx_hash) + bpf_xdp_metadata_rx_hash, \ + xmo_rx_hash) enum { -#define NETDEV_METADATA_KFUNC(name, _) name, +#define NETDEV_METADATA_KFUNC(name, _, __) name, XDP_METADATA_KFUNC_xxx #undef NETDEV_METADATA_KFUNC MAX_NETDEV_METADATA_KFUNC, diff --git a/kernel/bpf/offload.c b/kernel/bpf/offload.c index 235d81f7e0ed..cec63c76dce5 100644 --- a/kernel/bpf/offload.c +++ b/kernel/bpf/offload.c @@ -844,10 +844,11 @@ void *bpf_dev_bound_resolve_kfunc(struct bpf_prog *prog, u32 func_id) if (!ops) goto out; - if (func_id == bpf_dev_bound_kfunc_id(XDP_METADATA_KFUNC_RX_TIMESTAMP)) - p = ops->xmo_rx_timestamp; - else if (func_id == bpf_dev_bound_kfunc_id(XDP_METADATA_KFUNC_RX_HASH)) - p = ops->xmo_rx_hash; +#define NETDEV_METADATA_KFUNC(name, _, xmo) \ + if (func_id == bpf_dev_bound_kfunc_id(name)) p = ops->xmo; + XDP_METADATA_KFUNC_xxx +#undef NETDEV_METADATA_KFUNC + out: up_read(&bpf_devs_lock); @@ -855,13 +856,13 @@ void *bpf_dev_bound_resolve_kfunc(struct bpf_prog *prog, u32 func_id) } BTF_SET_START(dev_bound_kfunc_ids) -#define NETDEV_METADATA_KFUNC(name, str) BTF_ID(func, str) +#define NETDEV_METADATA_KFUNC(name, str, _) BTF_ID(func, str) XDP_METADATA_KFUNC_xxx #undef NETDEV_METADATA_KFUNC BTF_SET_END(dev_bound_kfunc_ids) BTF_ID_LIST(dev_bound_kfunc_ids_unsorted) -#define NETDEV_METADATA_KFUNC(name, str) BTF_ID(func, str) +#define NETDEV_METADATA_KFUNC(name, str, _) BTF_ID(func, str) XDP_METADATA_KFUNC_xxx #undef NETDEV_METADATA_KFUNC diff --git a/net/core/xdp.c b/net/core/xdp.c index 819767697370..c4be4367f2dd 100644 --- a/net/core/xdp.c +++ b/net/core/xdp.c @@ -741,7 +741,7 @@ __bpf_kfunc int bpf_xdp_metadata_rx_hash(const struct xdp_md *ctx, u32 *hash, __diag_pop(); BTF_SET8_START(xdp_metadata_kfunc_ids) -#define NETDEV_METADATA_KFUNC(_, name) BTF_ID_FLAGS(func, name, 0) +#define NETDEV_METADATA_KFUNC(_, name, __) BTF_ID_FLAGS(func, name, 0) XDP_METADATA_KFUNC_xxx #undef NETDEV_METADATA_KFUNC BTF_SET8_END(xdp_metadata_kfunc_ids) -- 2.41.0.255.g8b1d071c50-goog