diff options
Diffstat (limited to 'include/linux/skmsg.h')
| -rw-r--r-- | include/linux/skmsg.h | 13 | 
1 files changed, 13 insertions, 0 deletions
| diff --git a/include/linux/skmsg.h b/include/linux/skmsg.h index 08674cd14d5a..1e9ed840b9fc 100644 --- a/include/linux/skmsg.h +++ b/include/linux/skmsg.h @@ -430,6 +430,19 @@ static inline void psock_set_prog(struct bpf_prog **pprog,  		bpf_prog_put(prog);  } +static inline int psock_replace_prog(struct bpf_prog **pprog, +				     struct bpf_prog *prog, +				     struct bpf_prog *old) +{ +	if (cmpxchg(pprog, old, prog) != old) +		return -ENOENT; + +	if (old) +		bpf_prog_put(old); + +	return 0; +} +  static inline void psock_progs_drop(struct sk_psock_progs *progs)  {  	psock_set_prog(&progs->msg_parser, NULL); | 
