bpf: Refactor bpf_iter_reg to have separate seq_info member
There is no functionality change for this patch. Struct bpf_iter_reg is used to register a bpf_iter target, which includes information for both prog_load, link_create and seq_file creation. This patch puts fields related seq_file creation into a different structure. This will be useful for map elements iterator where one iterator covers different map types and different map types may have different seq_ops, init/fini private_data function and private_data size. Signed-off-by: Yonghong Song <yhs@fb.com> Signed-off-by: Alexei Starovoitov <ast@kernel.org> Link: https://lore.kernel.org/bpf/20200723184109.590030-1-yhs@fb.com
This commit is contained in:

committed by
Alexei Starovoitov

parent
a228a64fc1
commit
14fc6bd6b7
@@ -37,6 +37,15 @@ struct seq_operations;
|
||||
extern struct idr btf_idr;
|
||||
extern spinlock_t btf_idr_lock;
|
||||
|
||||
typedef int (*bpf_iter_init_seq_priv_t)(void *private_data);
|
||||
typedef void (*bpf_iter_fini_seq_priv_t)(void *private_data);
|
||||
struct bpf_iter_seq_info {
|
||||
const struct seq_operations *seq_ops;
|
||||
bpf_iter_init_seq_priv_t init_seq_private;
|
||||
bpf_iter_fini_seq_priv_t fini_seq_private;
|
||||
u32 seq_priv_size;
|
||||
};
|
||||
|
||||
/* map is generic key/value storage optionally accesible by eBPF programs */
|
||||
struct bpf_map_ops {
|
||||
/* funcs callable from userspace (via syscall) */
|
||||
@@ -1189,18 +1198,12 @@ int bpf_obj_get_user(const char __user *pathname, int flags);
|
||||
extern int bpf_iter_ ## target(args); \
|
||||
int __init bpf_iter_ ## target(args) { return 0; }
|
||||
|
||||
typedef int (*bpf_iter_init_seq_priv_t)(void *private_data);
|
||||
typedef void (*bpf_iter_fini_seq_priv_t)(void *private_data);
|
||||
|
||||
#define BPF_ITER_CTX_ARG_MAX 2
|
||||
struct bpf_iter_reg {
|
||||
const char *target;
|
||||
const struct seq_operations *seq_ops;
|
||||
bpf_iter_init_seq_priv_t init_seq_private;
|
||||
bpf_iter_fini_seq_priv_t fini_seq_private;
|
||||
u32 seq_priv_size;
|
||||
u32 ctx_arg_info_size;
|
||||
struct bpf_ctx_arg_aux ctx_arg_info[BPF_ITER_CTX_ARG_MAX];
|
||||
const struct bpf_iter_seq_info *seq_info;
|
||||
};
|
||||
|
||||
struct bpf_iter_meta {
|
||||
|
Reference in New Issue
Block a user