1
From: Geliang Tang <tanggeliang@kylinos.cn>
1
From: Geliang Tang <tanggeliang@kylinos.cn>
2
3
v2:
4
- use get_send for retransmit scheduling if get_retrans is NULL as Mat
5
suggested (thanks)
2
6
3
I got the following error when running bpf burst sched selftests in auto-btf-debug mode:
7
I got the following error when running bpf burst sched selftests in auto-btf-debug mode:
4
8
5
[ 167.258293][ T49] BUG: sleeping function called from invalid context at net/core/sock.c:3652
9
[ 167.258293][ T49] BUG: sleeping function called from invalid context at net/core/sock.c:3652
6
[ 167.258981][ T49] in_atomic(): 0, irqs_disabled(): 0, non_block: 0, pid: 49, name: kworker/0:2
10
[ 167.258981][ T49] in_atomic(): 0, irqs_disabled(): 0, non_block: 0, pid: 49, name: kworker/0:2
...
...
86
90
87
So this patch has to split get_subflow() interface of packet scheduer into
91
So this patch has to split get_subflow() interface of packet scheduer into
88
two interfaces: get_send() and get_retrans(). Then we can set get_retrans()
92
two interfaces: get_send() and get_retrans(). Then we can set get_retrans()
89
interface alone with BPF_F_SLEEPABLE flag.
93
interface alone with BPF_F_SLEEPABLE flag.
90
94
91
Thanks to Barry for helping me solve this issue.
92
Cc: Barry Song <baohua@kernel.org>
93
94
Closes: https://github.com/multipath-tcp/mptcp_net-next/issues/529
95
Closes: https://github.com/multipath-tcp/mptcp_net-next/issues/529
95
96
96
Geliang Tang (8):
97
Geliang Tang (9):
97
mptcp: split get_subflow interface into two
98
mptcp: split get_subflow interface into two
99
Squash to "bpf: Add bpf_mptcp_sched_ops"
98
Squash to "selftests/bpf: Add bpf_first scheduler & test"
100
Squash to "selftests/bpf: Add bpf_first scheduler & test"
99
Squash to "selftests/bpf: Add bpf_bkup scheduler & test"
101
Squash to "selftests/bpf: Add bpf_bkup scheduler & test"
100
Squash to "selftests/bpf: Add bpf_rr scheduler & test"
102
Squash to "selftests/bpf: Add bpf_rr scheduler & test"
101
Squash to "selftests/bpf: Add bpf_red scheduler & test"
103
Squash to "selftests/bpf: Add bpf_red scheduler & test"
102
Squash to "selftests/bpf: Add bpf_burst scheduler & test"
104
Squash to "selftests/bpf: Add bpf_burst scheduler & test"
103
Squash to "bpf: Export mptcp packet scheduler helpers"
105
Squash to "bpf: Export mptcp packet scheduler helpers"
104
Squash to "selftests/bpf: Add bpf_burst scheduler & test"
106
Squash to "selftests/bpf: Add bpf_burst scheduler & test"
105
107
106
include/net/mptcp.h | 5 +--
108
include/net/mptcp.h | 5 +--
107
net/mptcp/bpf.c | 13 ++++++--
109
net/mptcp/bpf.c | 13 +++++--
108
net/mptcp/sched.c | 33 ++++++++++++-------
110
net/mptcp/sched.c | 35 +++++++++++++------
109
.../testing/selftests/bpf/prog_tests/mptcp.c | 14 ++++++--
111
.../testing/selftests/bpf/prog_tests/mptcp.c | 14 ++++++--
110
.../selftests/bpf/progs/mptcp_bpf_bkup.c | 24 +++++++++++---
112
.../selftests/bpf/progs/mptcp_bpf_bkup.c | 4 +--
111
.../selftests/bpf/progs/mptcp_bpf_burst.c | 32 ++++++++----------
113
.../selftests/bpf/progs/mptcp_bpf_burst.c | 22 +++++-------
112
.../selftests/bpf/progs/mptcp_bpf_first.c | 24 +++++++++++---
114
.../selftests/bpf/progs/mptcp_bpf_first.c | 4 +--
113
.../selftests/bpf/progs/mptcp_bpf_red.c | 24 +++++++++++---
115
.../selftests/bpf/progs/mptcp_bpf_red.c | 4 +--
114
.../selftests/bpf/progs/mptcp_bpf_rr.c | 24 +++++++++++---
116
.../selftests/bpf/progs/mptcp_bpf_rr.c | 4 +--
115
9 files changed, 136 insertions(+), 57 deletions(-)
117
9 files changed, 65 insertions(+), 40 deletions(-)
116
118
117
--
119
--
118
2.43.0
120
2.45.2
diff view generated by jsdifflib
...
...
12
interface alone with BPF_F_SLEEPABLE flag.
12
interface alone with BPF_F_SLEEPABLE flag.
13
13
14
Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
14
Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
15
---
15
---
16
include/net/mptcp.h | 5 +++--
16
include/net/mptcp.h | 5 +++--
17
net/mptcp/bpf.c | 11 +++++++++--
17
net/mptcp/sched.c | 35 ++++++++++++++++++++++++-----------
18
net/mptcp/sched.c | 33 ++++++++++++++++++++++-----------
18
2 files changed, 27 insertions(+), 13 deletions(-)
19
3 files changed, 34 insertions(+), 15 deletions(-)
20
19
21
diff --git a/include/net/mptcp.h b/include/net/mptcp.h
20
diff --git a/include/net/mptcp.h b/include/net/mptcp.h
22
index XXXXXXX..XXXXXXX 100644
21
index XXXXXXX..XXXXXXX 100644
23
--- a/include/net/mptcp.h
22
--- a/include/net/mptcp.h
24
+++ b/include/net/mptcp.h
23
+++ b/include/net/mptcp.h
...
...
37
+            struct mptcp_sched_data *data);
36
+            struct mptcp_sched_data *data);
38
+    int (*get_retrans)(struct mptcp_sock *msk,
37
+    int (*get_retrans)(struct mptcp_sock *msk,
39
             struct mptcp_sched_data *data);
38
             struct mptcp_sched_data *data);
40
39
41
    char            name[MPTCP_SCHED_NAME_MAX];
40
    char            name[MPTCP_SCHED_NAME_MAX];
42
diff --git a/net/mptcp/bpf.c b/net/mptcp/bpf.c
43
index XXXXXXX..XXXXXXX 100644
44
--- a/net/mptcp/bpf.c
45
+++ b/net/mptcp/bpf.c
46
@@ -XXX,XX +XXX,XX @@ static int bpf_mptcp_sched_init(struct btf *btf)
47
    return 0;
48
}
49
50
-static int __bpf_mptcp_sched_get_subflow(struct mptcp_sock *msk,
51
+static int __bpf_mptcp_sched_get_send(struct mptcp_sock *msk,
52
+                 struct mptcp_sched_data *data)
53
+{
54
+    return 0;
55
+}
56
+
57
+static int __bpf_mptcp_sched_get_retrans(struct mptcp_sock *msk,
58
                     struct mptcp_sched_data *data)
59
{
60
    return 0;
61
@@ -XXX,XX +XXX,XX @@ static void __bpf_mptcp_sched_release(struct mptcp_sock *msk)
62
}
63
64
static struct mptcp_sched_ops __bpf_mptcp_sched_ops = {
65
-    .get_subflow    = __bpf_mptcp_sched_get_subflow,
66
+    .get_send    = __bpf_mptcp_sched_get_send,
67
+    .get_retrans    = __bpf_mptcp_sched_get_retrans,
68
    .init        = __bpf_mptcp_sched_init,
69
    .release    = __bpf_mptcp_sched_release,
70
};
71
diff --git a/net/mptcp/sched.c b/net/mptcp/sched.c
41
diff --git a/net/mptcp/sched.c b/net/mptcp/sched.c
72
index XXXXXXX..XXXXXXX 100644
42
index XXXXXXX..XXXXXXX 100644
73
--- a/net/mptcp/sched.c
43
--- a/net/mptcp/sched.c
74
+++ b/net/mptcp/sched.c
44
+++ b/net/mptcp/sched.c
75
@@ -XXX,XX +XXX,XX @@
45
@@ -XXX,XX +XXX,XX @@
...
...
114
@@ -XXX,XX +XXX,XX @@ void mptcp_get_available_schedulers(char *buf, size_t maxlen)
84
@@ -XXX,XX +XXX,XX @@ void mptcp_get_available_schedulers(char *buf, size_t maxlen)
115
85
116
int mptcp_register_scheduler(struct mptcp_sched_ops *sched)
86
int mptcp_register_scheduler(struct mptcp_sched_ops *sched)
117
{
87
{
118
-    if (!sched->get_subflow)
88
-    if (!sched->get_subflow)
119
+    if (!sched->get_send || !sched->get_retrans)
89
+    if (!sched->get_send)
120
        return -EINVAL;
90
        return -EINVAL;
121
91
122
    spin_lock(&mptcp_sched_list_lock);
92
    spin_lock(&mptcp_sched_list_lock);
123
@@ -XXX,XX +XXX,XX @@ int mptcp_sched_get_send(struct mptcp_sock *msk)
93
@@ -XXX,XX +XXX,XX @@ int mptcp_sched_get_send(struct mptcp_sock *msk)
124
            return 0;
94
            return 0;
...
...
142
    if (msk->sched == &mptcp_sched_default || !msk->sched)
112
    if (msk->sched == &mptcp_sched_default || !msk->sched)
143
-        return mptcp_sched_default_get_subflow(msk, &data);
113
-        return mptcp_sched_default_get_subflow(msk, &data);
144
+        return mptcp_sched_default_get_retrans(msk, &data);
114
+        return mptcp_sched_default_get_retrans(msk, &data);
145
    mptcp_sched_data_set_contexts(msk, &data);
115
    mptcp_sched_data_set_contexts(msk, &data);
146
-    return msk->sched->get_subflow(msk, &data);
116
-    return msk->sched->get_subflow(msk, &data);
117
+    if (!msk->sched->get_retrans)
118
+        return msk->sched->get_send(msk, &data);
147
+    return msk->sched->get_retrans(msk, &data);
119
+    return msk->sched->get_retrans(msk, &data);
148
}
120
}
149
--
121
--
150
2.43.0
122
2.45.2
diff view generated by jsdifflib
New patch
1
From: Geliang Tang <tanggeliang@kylinos.cn>
1
2
3
Please update the subject to
4
5
bpf: Add mptcp packet scheduler struct_ops
6
7
Split get_subflow interface into two.
8
9
Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
10
---
11
net/mptcp/bpf.c | 11 +++++++++--
12
1 file changed, 9 insertions(+), 2 deletions(-)
13
14
diff --git a/net/mptcp/bpf.c b/net/mptcp/bpf.c
15
index XXXXXXX..XXXXXXX 100644
16
--- a/net/mptcp/bpf.c
17
+++ b/net/mptcp/bpf.c
18
@@ -XXX,XX +XXX,XX @@ static int bpf_mptcp_sched_init(struct btf *btf)
19
    return 0;
20
}
21
22
-static int __bpf_mptcp_sched_get_subflow(struct mptcp_sock *msk,
23
+static int __bpf_mptcp_sched_get_send(struct mptcp_sock *msk,
24
+                 struct mptcp_sched_data *data)
25
+{
26
+    return 0;
27
+}
28
+
29
+static int __bpf_mptcp_sched_get_retrans(struct mptcp_sock *msk,
30
                     struct mptcp_sched_data *data)
31
{
32
    return 0;
33
@@ -XXX,XX +XXX,XX @@ static void __bpf_mptcp_sched_release(struct mptcp_sock *msk)
34
}
35
36
static struct mptcp_sched_ops __bpf_mptcp_sched_ops = {
37
-    .get_subflow    = __bpf_mptcp_sched_get_subflow,
38
+    .get_send    = __bpf_mptcp_sched_get_send,
39
+    .get_retrans    = __bpf_mptcp_sched_get_retrans,
40
    .init        = __bpf_mptcp_sched_init,
41
    .release    = __bpf_mptcp_sched_release,
42
};
43
--
44
2.45.2
diff view generated by jsdifflib
1
From: Geliang Tang <tanggeliang@kylinos.cn>
1
From: Geliang Tang <tanggeliang@kylinos.cn>
2
2
3
Split get_subflow() interface into two: get_send() and get_retrans().
3
Use new interface get_send() instead of get_subflow().
4
4
5
Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
5
Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
6
---
6
---
7
.../selftests/bpf/progs/mptcp_bpf_first.c | 24 +++++++++++++++----
7
tools/testing/selftests/bpf/progs/mptcp_bpf_first.c | 4 ++--
8
1 file changed, 19 insertions(+), 5 deletions(-)
8
1 file changed, 2 insertions(+), 2 deletions(-)
9
9
10
diff --git a/tools/testing/selftests/bpf/progs/mptcp_bpf_first.c b/tools/testing/selftests/bpf/progs/mptcp_bpf_first.c
10
diff --git a/tools/testing/selftests/bpf/progs/mptcp_bpf_first.c b/tools/testing/selftests/bpf/progs/mptcp_bpf_first.c
11
index XXXXXXX..XXXXXXX 100644
11
index XXXXXXX..XXXXXXX 100644
12
--- a/tools/testing/selftests/bpf/progs/mptcp_bpf_first.c
12
--- a/tools/testing/selftests/bpf/progs/mptcp_bpf_first.c
13
+++ b/tools/testing/selftests/bpf/progs/mptcp_bpf_first.c
13
+++ b/tools/testing/selftests/bpf/progs/mptcp_bpf_first.c
14
@@ -XXX,XX +XXX,XX @@ void BPF_PROG(mptcp_sched_first_release, struct mptcp_sock *msk)
14
@@ -XXX,XX +XXX,XX @@ void BPF_PROG(mptcp_sched_first_release, struct mptcp_sock *msk)
15
{
16
}
15
}
17
16
18
-SEC("struct_ops")
17
SEC("struct_ops")
19
-int BPF_PROG(bpf_first_get_subflow, struct mptcp_sock *msk,
18
-int BPF_PROG(bpf_first_get_subflow, struct mptcp_sock *msk,
20
-     struct mptcp_sched_data *data)
19
+int BPF_PROG(bpf_first_get_send, struct mptcp_sock *msk,
21
+static int bpf_first_get_subflow(struct mptcp_sock *msk,
20
     struct mptcp_sched_data *data)
22
+                 struct mptcp_sched_data *data)
23
{
21
{
24
    mptcp_subflow_set_scheduled(bpf_mptcp_subflow_ctx_by_pos(data, 0), true);
22
    mptcp_subflow_set_scheduled(bpf_mptcp_subflow_ctx_by_pos(data, 0), true);
25
    return 0;
23
@@ -XXX,XX +XXX,XX @@ SEC(".struct_ops")
26
}
27
28
-SEC(".struct_ops")
29
+SEC("struct_ops")
30
+int BPF_PROG(bpf_first_get_send, struct mptcp_sock *msk,
31
+     struct mptcp_sched_data *data)
32
+{
33
+    return bpf_first_get_subflow(msk, data);
34
+}
35
+
36
+SEC("struct_ops")
37
+int BPF_PROG(bpf_first_get_retrans, struct mptcp_sock *msk,
38
+     struct mptcp_sched_data *data)
39
+{
40
+    return bpf_first_get_subflow(msk, data);
41
+}
42
+
43
+SEC(".struct_ops.link")
44
struct mptcp_sched_ops first = {
24
struct mptcp_sched_ops first = {
45
    .init        = (void *)mptcp_sched_first_init,
25
    .init        = (void *)mptcp_sched_first_init,
46
    .release    = (void *)mptcp_sched_first_release,
26
    .release    = (void *)mptcp_sched_first_release,
47
-    .get_subflow    = (void *)bpf_first_get_subflow,
27
-    .get_subflow    = (void *)bpf_first_get_subflow,
48
+    .get_send    = (void *)bpf_first_get_send,
28
+    .get_send    = (void *)bpf_first_get_send,
49
+    .get_retrans    = (void *)bpf_first_get_retrans,
50
    .name        = "bpf_first",
29
    .name        = "bpf_first",
51
};
30
};
52
--
31
--
53
2.43.0
32
2.45.2
diff view generated by jsdifflib
1
From: Geliang Tang <tanggeliang@kylinos.cn>
1
From: Geliang Tang <tanggeliang@kylinos.cn>
2
2
3
Split get_subflow() interface into two: get_send() and get_retrans().
3
Use new interface get_send() instead of get_subflow().
4
4
5
Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
5
Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
6
---
6
---
7
.../selftests/bpf/progs/mptcp_bpf_bkup.c | 24 +++++++++++++++----
7
tools/testing/selftests/bpf/progs/mptcp_bpf_bkup.c | 4 ++--
8
1 file changed, 19 insertions(+), 5 deletions(-)
8
1 file changed, 2 insertions(+), 2 deletions(-)
9
9
10
diff --git a/tools/testing/selftests/bpf/progs/mptcp_bpf_bkup.c b/tools/testing/selftests/bpf/progs/mptcp_bpf_bkup.c
10
diff --git a/tools/testing/selftests/bpf/progs/mptcp_bpf_bkup.c b/tools/testing/selftests/bpf/progs/mptcp_bpf_bkup.c
11
index XXXXXXX..XXXXXXX 100644
11
index XXXXXXX..XXXXXXX 100644
12
--- a/tools/testing/selftests/bpf/progs/mptcp_bpf_bkup.c
12
--- a/tools/testing/selftests/bpf/progs/mptcp_bpf_bkup.c
13
+++ b/tools/testing/selftests/bpf/progs/mptcp_bpf_bkup.c
13
+++ b/tools/testing/selftests/bpf/progs/mptcp_bpf_bkup.c
14
@@ -XXX,XX +XXX,XX @@ void BPF_PROG(mptcp_sched_bkup_release, struct mptcp_sock *msk)
14
@@ -XXX,XX +XXX,XX @@ void BPF_PROG(mptcp_sched_bkup_release, struct mptcp_sock *msk)
15
{
16
}
15
}
17
16
18
-SEC("struct_ops")
17
SEC("struct_ops")
19
-int BPF_PROG(bpf_bkup_get_subflow, struct mptcp_sock *msk,
18
-int BPF_PROG(bpf_bkup_get_subflow, struct mptcp_sock *msk,
20
-     struct mptcp_sched_data *data)
19
+int BPF_PROG(bpf_bkup_get_send, struct mptcp_sock *msk,
21
+static int bpf_bkup_get_subflow(struct mptcp_sock *msk,
20
     struct mptcp_sched_data *data)
22
+                struct mptcp_sched_data *data)
23
{
21
{
24
    int nr = -1;
22
    int nr = -1;
25
23
@@ -XXX,XX +XXX,XX @@ SEC(".struct_ops")
26
@@ -XXX,XX +XXX,XX @@ int BPF_PROG(bpf_bkup_get_subflow, struct mptcp_sock *msk,
27
    return 0;
28
}
29
30
-SEC(".struct_ops")
31
+SEC("struct_ops")
32
+int BPF_PROG(bpf_bkup_get_send, struct mptcp_sock *msk,
33
+     struct mptcp_sched_data *data)
34
+{
35
+    return bpf_bkup_get_subflow(msk, data);
36
+}
37
+
38
+SEC("struct_ops")
39
+int BPF_PROG(bpf_bkup_get_retrans, struct mptcp_sock *msk,
40
+     struct mptcp_sched_data *data)
41
+{
42
+    return bpf_bkup_get_subflow(msk, data);
43
+}
44
+
45
+SEC(".struct_ops.link")
46
struct mptcp_sched_ops bkup = {
24
struct mptcp_sched_ops bkup = {
47
    .init        = (void *)mptcp_sched_bkup_init,
25
    .init        = (void *)mptcp_sched_bkup_init,
48
    .release    = (void *)mptcp_sched_bkup_release,
26
    .release    = (void *)mptcp_sched_bkup_release,
49
-    .get_subflow    = (void *)bpf_bkup_get_subflow,
27
-    .get_subflow    = (void *)bpf_bkup_get_subflow,
50
+    .get_send    = (void *)bpf_bkup_get_send,
28
+    .get_send    = (void *)bpf_bkup_get_send,
51
+    .get_retrans    = (void *)bpf_bkup_get_retrans,
52
    .name        = "bpf_bkup",
29
    .name        = "bpf_bkup",
53
};
30
};
54
--
31
--
55
2.43.0
32
2.45.2
diff view generated by jsdifflib
1
From: Geliang Tang <tanggeliang@kylinos.cn>
1
From: Geliang Tang <tanggeliang@kylinos.cn>
2
2
3
Split get_subflow() interface into two: get_send() and get_retrans().
3
Use new interface get_send() instead of get_subflow().
4
4
5
Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
5
Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
6
---
6
---
7
.../selftests/bpf/progs/mptcp_bpf_rr.c | 24 +++++++++++++++----
7
tools/testing/selftests/bpf/progs/mptcp_bpf_rr.c | 4 ++--
8
1 file changed, 19 insertions(+), 5 deletions(-)
8
1 file changed, 2 insertions(+), 2 deletions(-)
9
9
10
diff --git a/tools/testing/selftests/bpf/progs/mptcp_bpf_rr.c b/tools/testing/selftests/bpf/progs/mptcp_bpf_rr.c
10
diff --git a/tools/testing/selftests/bpf/progs/mptcp_bpf_rr.c b/tools/testing/selftests/bpf/progs/mptcp_bpf_rr.c
11
index XXXXXXX..XXXXXXX 100644
11
index XXXXXXX..XXXXXXX 100644
12
--- a/tools/testing/selftests/bpf/progs/mptcp_bpf_rr.c
12
--- a/tools/testing/selftests/bpf/progs/mptcp_bpf_rr.c
13
+++ b/tools/testing/selftests/bpf/progs/mptcp_bpf_rr.c
13
+++ b/tools/testing/selftests/bpf/progs/mptcp_bpf_rr.c
14
@@ -XXX,XX +XXX,XX @@ void BPF_PROG(mptcp_sched_rr_release, struct mptcp_sock *msk)
14
@@ -XXX,XX +XXX,XX @@ void BPF_PROG(mptcp_sched_rr_release, struct mptcp_sock *msk)
15
    bpf_sk_storage_delete(&mptcp_rr_map, msk);
16
}
15
}
17
16
18
-SEC("struct_ops")
17
SEC("struct_ops")
19
-int BPF_PROG(bpf_rr_get_subflow, struct mptcp_sock *msk,
18
-int BPF_PROG(bpf_rr_get_subflow, struct mptcp_sock *msk,
20
-     struct mptcp_sched_data *data)
19
+int BPF_PROG(bpf_rr_get_send, struct mptcp_sock *msk,
21
+static int bpf_rr_get_subflow(struct mptcp_sock *msk,
20
     struct mptcp_sched_data *data)
22
+             struct mptcp_sched_data *data)
23
{
21
{
24
    struct mptcp_subflow_context *subflow;
22
    struct mptcp_subflow_context *subflow;
25
    struct mptcp_rr_storage *ptr;
23
@@ -XXX,XX +XXX,XX @@ SEC(".struct_ops")
26
@@ -XXX,XX +XXX,XX @@ int BPF_PROG(bpf_rr_get_subflow, struct mptcp_sock *msk,
27
    return 0;
28
}
29
30
-SEC(".struct_ops")
31
+SEC("struct_ops")
32
+int BPF_PROG(bpf_rr_get_send, struct mptcp_sock *msk,
33
+     struct mptcp_sched_data *data)
34
+{
35
+    return bpf_rr_get_subflow(msk, data);
36
+}
37
+
38
+SEC("struct_ops")
39
+int BPF_PROG(bpf_rr_get_retrans, struct mptcp_sock *msk,
40
+     struct mptcp_sched_data *data)
41
+{
42
+    return bpf_rr_get_subflow(msk, data);
43
+}
44
+
45
+SEC(".struct_ops.link")
46
struct mptcp_sched_ops rr = {
24
struct mptcp_sched_ops rr = {
47
    .init        = (void *)mptcp_sched_rr_init,
25
    .init        = (void *)mptcp_sched_rr_init,
48
    .release    = (void *)mptcp_sched_rr_release,
26
    .release    = (void *)mptcp_sched_rr_release,
49
-    .get_subflow    = (void *)bpf_rr_get_subflow,
27
-    .get_subflow    = (void *)bpf_rr_get_subflow,
50
+    .get_send    = (void *)bpf_rr_get_send,
28
+    .get_send    = (void *)bpf_rr_get_send,
51
+    .get_retrans    = (void *)bpf_rr_get_retrans,
52
    .name        = "bpf_rr",
29
    .name        = "bpf_rr",
53
};
30
};
54
--
31
--
55
2.43.0
32
2.45.2
diff view generated by jsdifflib
1
From: Geliang Tang <tanggeliang@kylinos.cn>
1
From: Geliang Tang <tanggeliang@kylinos.cn>
2
2
3
Split get_subflow() interface into two: get_send() and get_retrans().
3
Use new interface get_send() instead of get_subflow().
4
4
5
Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
5
Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
6
---
6
---
7
.../selftests/bpf/progs/mptcp_bpf_red.c | 24 +++++++++++++++----
7
tools/testing/selftests/bpf/progs/mptcp_bpf_red.c | 4 ++--
8
1 file changed, 19 insertions(+), 5 deletions(-)
8
1 file changed, 2 insertions(+), 2 deletions(-)
9
9
10
diff --git a/tools/testing/selftests/bpf/progs/mptcp_bpf_red.c b/tools/testing/selftests/bpf/progs/mptcp_bpf_red.c
10
diff --git a/tools/testing/selftests/bpf/progs/mptcp_bpf_red.c b/tools/testing/selftests/bpf/progs/mptcp_bpf_red.c
11
index XXXXXXX..XXXXXXX 100644
11
index XXXXXXX..XXXXXXX 100644
12
--- a/tools/testing/selftests/bpf/progs/mptcp_bpf_red.c
12
--- a/tools/testing/selftests/bpf/progs/mptcp_bpf_red.c
13
+++ b/tools/testing/selftests/bpf/progs/mptcp_bpf_red.c
13
+++ b/tools/testing/selftests/bpf/progs/mptcp_bpf_red.c
14
@@ -XXX,XX +XXX,XX @@ void BPF_PROG(mptcp_sched_red_release, struct mptcp_sock *msk)
14
@@ -XXX,XX +XXX,XX @@ void BPF_PROG(mptcp_sched_red_release, struct mptcp_sock *msk)
15
{
16
}
15
}
17
16
18
-SEC("struct_ops")
17
SEC("struct_ops")
19
-int BPF_PROG(bpf_red_get_subflow, struct mptcp_sock *msk,
18
-int BPF_PROG(bpf_red_get_subflow, struct mptcp_sock *msk,
20
-     struct mptcp_sched_data *data)
19
+int BPF_PROG(bpf_red_get_send, struct mptcp_sock *msk,
21
+static int bpf_red_get_subflow(struct mptcp_sock *msk,
20
     struct mptcp_sched_data *data)
22
+             struct mptcp_sched_data *data)
23
{
21
{
24
    for (int i = 0; i < data->subflows && i < MPTCP_SUBFLOWS_MAX; i++) {
22
    for (int i = 0; i < data->subflows && i < MPTCP_SUBFLOWS_MAX; i++) {
25
        if (!bpf_mptcp_subflow_ctx_by_pos(data, i))
23
@@ -XXX,XX +XXX,XX @@ SEC(".struct_ops")
26
@@ -XXX,XX +XXX,XX @@ int BPF_PROG(bpf_red_get_subflow, struct mptcp_sock *msk,
27
    return 0;
28
}
29
30
-SEC(".struct_ops")
31
+SEC("struct_ops")
32
+int BPF_PROG(bpf_red_get_send, struct mptcp_sock *msk,
33
+     struct mptcp_sched_data *data)
34
+{
35
+    return bpf_red_get_subflow(msk, data);
36
+}
37
+
38
+SEC("struct_ops")
39
+int BPF_PROG(bpf_red_get_retrans, struct mptcp_sock *msk,
40
+     struct mptcp_sched_data *data)
41
+{
42
+    return bpf_red_get_subflow(msk, data);
43
+}
44
+
45
+SEC(".struct_ops.link")
46
struct mptcp_sched_ops red = {
24
struct mptcp_sched_ops red = {
47
    .init        = (void *)mptcp_sched_red_init,
25
    .init        = (void *)mptcp_sched_red_init,
48
    .release    = (void *)mptcp_sched_red_release,
26
    .release    = (void *)mptcp_sched_red_release,
49
-    .get_subflow    = (void *)bpf_red_get_subflow,
27
-    .get_subflow    = (void *)bpf_red_get_subflow,
50
+    .get_send    = (void *)bpf_red_get_send,
28
+    .get_send    = (void *)bpf_red_get_send,
51
+    .get_retrans    = (void *)bpf_red_get_retrans,
52
    .name        = "bpf_red",
29
    .name        = "bpf_red",
53
};
30
};
54
--
31
--
55
2.43.0
32
2.45.2
diff view generated by jsdifflib
1
From: Geliang Tang <tanggeliang@kylinos.cn>
1
From: Geliang Tang <tanggeliang@kylinos.cn>
2
2
3
Split get_subflow() interface into two: get_send() and get_retrans().
3
Split get_subflow() interface into two: get_send() and get_retrans().
4
4
5
Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
5
Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
6
---
6
---
7
.../selftests/bpf/progs/mptcp_bpf_burst.c | 32 ++++++++-----------
7
.../selftests/bpf/progs/mptcp_bpf_burst.c | 22 +++++++------------
8
1 file changed, 13 insertions(+), 19 deletions(-)
8
1 file changed, 8 insertions(+), 14 deletions(-)
9
9
10
diff --git a/tools/testing/selftests/bpf/progs/mptcp_bpf_burst.c b/tools/testing/selftests/bpf/progs/mptcp_bpf_burst.c
10
diff --git a/tools/testing/selftests/bpf/progs/mptcp_bpf_burst.c b/tools/testing/selftests/bpf/progs/mptcp_bpf_burst.c
11
index XXXXXXX..XXXXXXX 100644
11
index XXXXXXX..XXXXXXX 100644
12
--- a/tools/testing/selftests/bpf/progs/mptcp_bpf_burst.c
12
--- a/tools/testing/selftests/bpf/progs/mptcp_bpf_burst.c
13
+++ b/tools/testing/selftests/bpf/progs/mptcp_bpf_burst.c
13
+++ b/tools/testing/selftests/bpf/progs/mptcp_bpf_burst.c
14
@@ -XXX,XX +XXX,XX @@ char _license[] SEC("license") = "GPL";
15
16
#define MPTCP_SEND_BURST_SIZE    65428
17
18
+#define SSK_MODE_ACTIVE    0
19
+#define SSK_MODE_BACKUP    1
20
+#define SSK_MODE_MAX    2
21
+
22
#define min(a, b) ((a) < (b) ? (a) : (b))
23
24
struct bpf_subflow_send_info {
25
@@ -XXX,XX +XXX,XX @@ extern bool tcp_stream_memory_free(const struct sock *sk, int wake) __ksym;
26
extern bool bpf_mptcp_subflow_queues_empty(struct sock *sk) __ksym;
27
extern void mptcp_pm_subflow_chk_stale(const struct mptcp_sock *msk, struct sock *ssk) __ksym;
28
29
-#define SSK_MODE_ACTIVE    0
30
-#define SSK_MODE_BACKUP    1
31
-#define SSK_MODE_MAX    2
32
-
33
static __always_inline __u64 div_u64(__u64 dividend, __u32 divisor)
34
{
35
    return dividend / divisor;
36
@@ -XXX,XX +XXX,XX @@ void BPF_PROG(mptcp_sched_burst_release, struct mptcp_sock *msk)
14
@@ -XXX,XX +XXX,XX @@ void BPF_PROG(mptcp_sched_burst_release, struct mptcp_sock *msk)
37
{
15
{
38
}
16
}
39
17
40
-static int bpf_burst_get_send(struct mptcp_sock *msk,
18
-static int bpf_burst_get_send(struct mptcp_sock *msk,
...
...
68
-    if (data->reinject)
46
-    if (data->reinject)
69
-        return bpf_burst_get_retrans(msk, data);
47
-        return bpf_burst_get_retrans(msk, data);
70
-    return bpf_burst_get_send(msk, data);
48
-    return bpf_burst_get_send(msk, data);
71
-}
49
-}
72
-
50
-
73
-SEC(".struct_ops")
51
SEC(".struct_ops")
74
+SEC(".struct_ops.link")
75
struct mptcp_sched_ops burst = {
52
struct mptcp_sched_ops burst = {
76
    .init        = (void *)mptcp_sched_burst_init,
53
    .init        = (void *)mptcp_sched_burst_init,
77
    .release    = (void *)mptcp_sched_burst_release,
54
    .release    = (void *)mptcp_sched_burst_release,
78
-    .get_subflow    = (void *)bpf_burst_get_subflow,
55
-    .get_subflow    = (void *)bpf_burst_get_subflow,
79
+    .get_send    = (void *)bpf_burst_get_send,
56
+    .get_send    = (void *)bpf_burst_get_send,
80
+    .get_retrans    = (void *)bpf_burst_get_retrans,
57
+    .get_retrans    = (void *)bpf_burst_get_retrans,
81
    .name        = "bpf_burst",
58
    .name        = "bpf_burst",
82
};
59
};
83
--
60
--
84
2.43.0
61
2.45.2
diff view generated by jsdifflib
...
...
19
+BTF_ID_FLAGS(func, mptcp_pm_subflow_chk_stale, KF_SLEEPABLE)
19
+BTF_ID_FLAGS(func, mptcp_pm_subflow_chk_stale, KF_SLEEPABLE)
20
BTF_KFUNCS_END(bpf_mptcp_sched_kfunc_ids)
20
BTF_KFUNCS_END(bpf_mptcp_sched_kfunc_ids)
21
21
22
static const struct btf_kfunc_id_set bpf_mptcp_sched_kfunc_set = {
22
static const struct btf_kfunc_id_set bpf_mptcp_sched_kfunc_set = {
23
--
23
--
24
2.43.0
24
2.45.2
diff view generated by jsdifflib
...
...
35
+skel_destroy:
35
+skel_destroy:
36
    mptcp_bpf_burst__destroy(skel);
36
    mptcp_bpf_burst__destroy(skel);
37
}
37
}
38
38
39
--
39
--
40
2.43.0
40
2.45.2
diff view generated by jsdifflib