Commit 23da464d authored by Kumar Kartikeya Dwivedi's avatar Kumar Kartikeya Dwivedi Committed by Alexei Starovoitov

bpf: Allow specifying volatile type modifier for kptrs

This is useful in particular to mark the pointer as volatile, so that
compiler treats each load and store to the field as a volatile access.
The alternative is having to define and use READ_ONCE and WRITE_ONCE in
the BPF program.
Signed-off-by: default avatarKumar Kartikeya Dwivedi <memxor@gmail.com>
Acked-by: default avatarDavid Vernet <void@manifault.com>
Link: https://lore.kernel.org/r/20221103191013.1236066-3-memxor@gmail.comSigned-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
parent 9805af8d
...@@ -288,6 +288,11 @@ static inline bool btf_type_is_typedef(const struct btf_type *t) ...@@ -288,6 +288,11 @@ static inline bool btf_type_is_typedef(const struct btf_type *t)
return BTF_INFO_KIND(t->info) == BTF_KIND_TYPEDEF; return BTF_INFO_KIND(t->info) == BTF_KIND_TYPEDEF;
} }
static inline bool btf_type_is_volatile(const struct btf_type *t)
{
return BTF_INFO_KIND(t->info) == BTF_KIND_VOLATILE;
}
static inline bool btf_type_is_func(const struct btf_type *t) static inline bool btf_type_is_func(const struct btf_type *t)
{ {
return BTF_INFO_KIND(t->info) == BTF_KIND_FUNC; return BTF_INFO_KIND(t->info) == BTF_KIND_FUNC;
......
...@@ -3225,6 +3225,9 @@ static int btf_find_kptr(const struct btf *btf, const struct btf_type *t, ...@@ -3225,6 +3225,9 @@ static int btf_find_kptr(const struct btf *btf, const struct btf_type *t,
enum bpf_kptr_type type; enum bpf_kptr_type type;
u32 res_id; u32 res_id;
/* Permit modifiers on the pointer itself */
if (btf_type_is_volatile(t))
t = btf_type_by_id(btf, t->type);
/* For PTR, sz is always == 8 */ /* For PTR, sz is always == 8 */
if (!btf_type_is_ptr(t)) if (!btf_type_is_ptr(t))
return BTF_FIELD_IGNORE; return BTF_FIELD_IGNORE;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment