
hulk inclusion category: feature bugzilla: https://gitee.com/openeuler/kernel/issues/ICA1GK -------------------------------- Add a kfunc (for arm64 in this patch) to get arch-related flags and their string representation. Signed-off-by: GONG Ruiqi <gongruiqi1@huawei.com> --- arch/arm64/kernel/bpf-rvi.c | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/arch/arm64/kernel/bpf-rvi.c b/arch/arm64/kernel/bpf-rvi.c index 4e7e14cb7182..1ff460b46c85 100644 --- a/arch/arm64/kernel/bpf-rvi.c +++ b/arch/arm64/kernel/bpf-rvi.c @@ -16,8 +16,38 @@ bool bpf_arm64_cpu_have_feature(unsigned int num) return cpu_have_feature(num); } +enum arch_flags_type { + ARM64_HWCAP, + ARM64_HWCAP_SIZE, + ARM64_COMPAT_HWCAP, + ARM64_COMPAT_HWCAP_SIZE, + ARM64_COMPAT_HWCAP2, + ARM64_COMPAT_HWCAP2_SIZE, +}; + +__bpf_kfunc const char *bpf_arch_flags(enum arch_flags_type t, int i) +{ + switch (t) { + case ARM64_HWCAP: + return hwcap_str[i]; + case ARM64_HWCAP_SIZE: + return (void *)ARRAY_SIZE(hwcap_str); + case ARM64_COMPAT_HWCAP: + return compat_hwcap_str[i]; + case ARM64_COMPAT_HWCAP_SIZE: + return (void *)ARRAY_SIZE(compat_hwcap_str); + case ARM64_COMPAT_HWCAP2: + return compat_hwcap2_str[i]; + case ARM64_COMPAT_HWCAP2_SIZE: + return (void *)ARRAY_SIZE(compat_hwcap2_str); + default: + return NULL; + } +} + BTF_SET8_START(bpf_arm64_kfunc_ids) BTF_ID_FLAGS(func, bpf_arm64_cpu_have_feature, KF_RCU) +BTF_ID_FLAGS(func, bpf_arch_flags) BTF_SET8_END(bpf_arm64_kfunc_ids) static const struct btf_kfunc_id_set bpf_arm64_kfunc_set = { -- 2.25.1