From: Hou Tao <houtao1@xxxxxxxxxx> Add helper btf_type_is_bpf_dynptr() to check whether or not the passed btf type is bpf_dynptr. It will be used by bpf map (e.g. qp-trie) which uses bpf_dynptr as map key. Signed-off-by: Hou Tao <houtao1@xxxxxxxxxx> --- include/linux/btf.h | 1 + kernel/bpf/btf.c | 7 +++++++ 2 files changed, 8 insertions(+) diff --git a/include/linux/btf.h b/include/linux/btf.h index 1fcc833a8690..d52f9979ea49 100644 --- a/include/linux/btf.h +++ b/include/linux/btf.h @@ -156,6 +156,7 @@ int btf_find_spin_lock(const struct btf *btf, const struct btf_type *t); int btf_find_timer(const struct btf *btf, const struct btf_type *t); struct bpf_map_value_off *btf_parse_kptrs(const struct btf *btf, const struct btf_type *t); +bool btf_type_is_bpf_dynptr(const struct btf *btf, const struct btf_type *t); bool btf_type_is_void(const struct btf_type *t); s32 btf_find_by_name_kind(const struct btf *btf, const char *name, u8 kind); const struct btf_type *btf_type_skip_modifiers(const struct btf *btf, diff --git a/kernel/bpf/btf.c b/kernel/bpf/btf.c index b3940c605aac..f94b6112a649 100644 --- a/kernel/bpf/btf.c +++ b/kernel/bpf/btf.c @@ -3522,6 +3522,13 @@ struct bpf_map_value_off *btf_parse_kptrs(const struct btf *btf, return ERR_PTR(ret); } +bool btf_type_is_bpf_dynptr(const struct btf *btf, const struct btf_type *t) +{ + return __btf_type_is_struct(t) && + t->size == sizeof(struct bpf_dynptr) && + !strcmp("bpf_dynptr", __btf_name_by_offset(btf, t->name_off)); +} + static void __btf_struct_show(const struct btf *btf, const struct btf_type *t, u32 type_id, void *data, u8 bits_offset, struct btf_show *show) -- 2.29.2