[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20241127-bpf-const-ops-v1-3-a698b8d58680@weissschuh.net>
Date: Wed, 27 Nov 2024 20:15:22 +0100
From: Thomas Weißschuh <linux@...ssschuh.net>
To: "David S. Miller" <davem@...emloft.net>,
David Ahern <dsahern@...nel.org>, Eric Dumazet <edumazet@...gle.com>,
Jakub Kicinski <kuba@...nel.org>, Paolo Abeni <pabeni@...hat.com>,
Simon Horman <horms@...nel.org>, Martin KaFai Lau <martin.lau@...nel.org>,
Kui-Feng Lee <thinker.li@...il.com>, Alexei Starovoitov <ast@...nel.org>,
Daniel Borkmann <daniel@...earbox.net>,
John Fastabend <john.fastabend@...il.com>,
Andrii Nakryiko <andrii@...nel.org>,
Martin KaFai Lau <martin.lau@...ux.dev>,
Eduard Zingerman <eddyz87@...il.com>, Song Liu <song@...nel.org>,
Yonghong Song <yonghong.song@...ux.dev>, KP Singh <kpsingh@...nel.org>,
Stanislav Fomichev <sdf@...ichev.me>, Hao Luo <haoluo@...gle.com>,
Jiri Olsa <jolsa@...nel.org>, Jiri Kosina <jikos@...nel.org>,
Benjamin Tissoires <bentiss@...nel.org>, Tejun Heo <tj@...nel.org>,
David Vernet <void@...ifault.com>, Ingo Molnar <mingo@...hat.com>,
Peter Zijlstra <peterz@...radead.org>, Juri Lelli <juri.lelli@...hat.com>,
Vincent Guittot <vincent.guittot@...aro.org>,
Dietmar Eggemann <dietmar.eggemann@....com>,
Steven Rostedt <rostedt@...dmis.org>, Ben Segall <bsegall@...gle.com>,
Mel Gorman <mgorman@...e.de>, Valentin Schneider <vschneid@...hat.com>
Cc: netdev@...r.kernel.org, linux-kernel@...r.kernel.org,
bpf@...r.kernel.org, linux-input@...r.kernel.org,
Thomas Weißschuh <linux@...ssschuh.net>
Subject: [PATCH bpf-next 3/9] bpf: Allow registration of const struct
bpf_struct_ops
The BPF core does not need to modify instances of struct bpf_struct_ops
anymore. Reflect this in the API so users can move their instances into
read-only memory.
Signed-off-by: Thomas Weißschuh <linux@...ssschuh.net>
---
include/linux/bpf.h | 2 +-
include/linux/btf.h | 2 +-
kernel/bpf/bpf_struct_ops.c | 2 +-
kernel/bpf/btf.c | 4 ++--
4 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/include/linux/bpf.h b/include/linux/bpf.h
index b734543b7a2b48e717d4f1be765e0198114b4f0a..a9267af9671b2bc8961cde24d2f79f473ab227d7 100644
--- a/include/linux/bpf.h
+++ b/include/linux/bpf.h
@@ -1814,7 +1814,7 @@ struct bpf_struct_ops_arg_info {
};
struct bpf_struct_ops_desc {
- struct bpf_struct_ops *st_ops;
+ const struct bpf_struct_ops *st_ops;
const struct btf_type *type;
const struct btf_type *value_type;
diff --git a/include/linux/btf.h b/include/linux/btf.h
index 4214e76c916861462e45e98690fcf461c05ca737..87a5ddef9fdc4b7f09d375ec5959abd6d07533a9 100644
--- a/include/linux/btf.h
+++ b/include/linux/btf.h
@@ -519,7 +519,7 @@ struct bpf_verifier_log;
#if defined(CONFIG_BPF_JIT) && defined(CONFIG_BPF_SYSCALL)
struct bpf_struct_ops;
-int __register_bpf_struct_ops(struct bpf_struct_ops *st_ops);
+int __register_bpf_struct_ops(const struct bpf_struct_ops *st_ops);
const struct bpf_struct_ops_desc *bpf_struct_ops_find_value(struct btf *btf, u32 value_id);
const struct bpf_struct_ops_desc *bpf_struct_ops_find(struct btf *btf, u32 type_id);
#else
diff --git a/kernel/bpf/bpf_struct_ops.c b/kernel/bpf/bpf_struct_ops.c
index 7ee7c25d21d480d46b40b23ff8aec9d12ea81f68..967f0914d473fcde4a6ce3bb6ac976345daf8e88 100644
--- a/kernel/bpf/bpf_struct_ops.c
+++ b/kernel/bpf/bpf_struct_ops.c
@@ -314,7 +314,7 @@ int bpf_struct_ops_desc_init(struct bpf_struct_ops_desc *st_ops_desc,
struct btf *btf,
struct bpf_verifier_log *log)
{
- struct bpf_struct_ops *st_ops = st_ops_desc->st_ops;
+ const struct bpf_struct_ops *st_ops = st_ops_desc->st_ops;
struct bpf_struct_ops_arg_info *arg_info;
const struct btf_member *member;
const struct btf_type *t;
diff --git a/kernel/bpf/btf.c b/kernel/bpf/btf.c
index e7a59e6462a9331d0acb17a88a4ebf641509c050..e3be8b7d6cbb268cf389bac9d3f889dbfd664a2e 100644
--- a/kernel/bpf/btf.c
+++ b/kernel/bpf/btf.c
@@ -9155,7 +9155,7 @@ bool btf_type_ids_nocast_alias(struct bpf_verifier_log *log,
#ifdef CONFIG_BPF_JIT
static int
-btf_add_struct_ops(struct btf *btf, struct bpf_struct_ops *st_ops,
+btf_add_struct_ops(struct btf *btf, const struct bpf_struct_ops *st_ops,
struct bpf_verifier_log *log)
{
struct btf_struct_ops_tab *tab, *new_tab;
@@ -9242,7 +9242,7 @@ bpf_struct_ops_find(struct btf *btf, u32 type_id)
return NULL;
}
-int __register_bpf_struct_ops(struct bpf_struct_ops *st_ops)
+int __register_bpf_struct_ops(const struct bpf_struct_ops *st_ops)
{
struct bpf_verifier_log *log;
struct btf *btf;
--
2.47.1
Powered by blists - more mailing lists