@@ -18,9 +18,10 @@
#ifdef CONFIG_BPF_JIT
static struct bpf_struct_ops bpf_mptcp_sched_ops;
-static const struct btf_type *mptcp_sock_type, *mptcp_subflow_type __read_mostly;
static u32 mptcp_sock_id, mptcp_subflow_id;
+/* MPTCP BPF packet scheduler */
+
static const struct bpf_func_proto *
bpf_mptcp_sched_get_func_proto(enum bpf_func_id func_id,
const struct bpf_prog *prog)
@@ -43,12 +44,10 @@ static int bpf_mptcp_sched_btf_struct_access(struct bpf_verifier_log *log,
const struct bpf_reg_state *reg,
int off, int size)
{
- const struct btf_type *t;
+ u32 id = reg->btf_id;
size_t end;
- t = btf_type_by_id(reg->btf, reg->btf_id);
-
- if (t == mptcp_sock_type) {
+ if (id == mptcp_sock_id) {
switch (off) {
case offsetof(struct mptcp_sock, snd_burst):
end = offsetofend(struct mptcp_sock, snd_burst);
@@ -58,7 +57,7 @@ static int bpf_mptcp_sched_btf_struct_access(struct bpf_verifier_log *log,
off);
return -EACCES;
}
- } else if (t == mptcp_subflow_type) {
+ } else if (id == mptcp_subflow_id) {
switch (off) {
case offsetof(struct mptcp_subflow_context, avg_pacing_rate):
end = offsetofend(struct mptcp_subflow_context, avg_pacing_rate);
@@ -75,7 +74,7 @@ static int bpf_mptcp_sched_btf_struct_access(struct bpf_verifier_log *log,
if (off + size > end) {
bpf_log(log, "access beyond %s at off %u size %u ended at %zu",
- t == mptcp_sock_type ? "mptcp_sock" : "mptcp_subflow_context",
+ id == mptcp_sock_id ? "mptcp_sock" : "mptcp_subflow_context",
off, size, end);
return -EACCES;
}
@@ -140,14 +139,12 @@ static int bpf_mptcp_sched_init(struct btf *btf)
if (type_id < 0)
return -EINVAL;
mptcp_sock_id = type_id;
- mptcp_sock_type = btf_type_by_id(btf, mptcp_sock_id);
type_id = btf_find_by_name_kind(btf, "mptcp_subflow_context",
BTF_KIND_STRUCT);
if (type_id < 0)
return -EINVAL;
mptcp_subflow_id = type_id;
- mptcp_subflow_type = btf_type_by_id(btf, mptcp_subflow_id);
return 0;
}