From: Geliang Tang <geliang.tang@suse.com>
To: Paolo Abeni <pabeni@redhat.com>
Cc: mptcp@lists.linux.dev
Subject: Re: [PATCH mptcp-next v8 13/17] selftests/bpf: Add bpf_burst scheduler
Date: Sat, 10 Jun 2023 09:45:14 +0800 [thread overview]
Message-ID: <20230610014514.GA2843@localhost> (raw)
In-Reply-To: <4d34b373094d8415d8d6cc29af013dc508a5bf81.camel@redhat.com>
On Fri, Jun 09, 2023 at 04:40:01PM +0200, Paolo Abeni wrote:
> On Fri, 2023-06-09 at 21:32 +0800, Geliang Tang wrote:
> > On Fri, Jun 09, 2023 at 11:57:53AM +0200, Paolo Abeni wrote:
> >
> > > May I guess you get a similar error if you do:
> > >
> > > subflow = mptcp_subflow_ctx(ssk)
> > >
> > > ? (just out of sheer ignorance and curiosity)
> >
> > Yes. It seems that accessing 'send_info[SSK_MODE_ACTIVE].ssk' is
> > considered unsafe in BPF context. So here we pass 'send_info[SSK_MODE_ACTIVE].ssk'
> > into bpf_mptcp_subflow_ctx() to find the related subflow. Then we access this
> > subflow instead of 'send_info[SSK_MODE_ACTIVE].ssk' below. This can make BPF happy.
> >
> > >
> > > > + * then use mptcp_subflow_tcp_sock() to get the ssk.
> > > > + */
> > > > + subflow = mptcp_subflow_tcp_sock(send_info[SSK_MODE_ACTIVE].ssk, data);
> > > > + ssk = mptcp_subflow_tcp_sock(subflow);
> > >
> > > What if you store the 'subflow' pointer in 'send_info'? Will the
> > > verifier splat with that? and what if we store the corresponding
> > > context index 'i' instead?
> >
> > Storing the 'subflow' or index 'i' don't work too.
>
> Uhmm... I'm very surprised about 'i'. Specifically what I mean is:
>
> struct subflow_send_info {
> unsigned int subflow_id;
> __u64 linger_time;
> };
>
> // ...
> for (i = 0; i < SSK_MODE_MAX; ++i) {
> send_info[i].ssk = MPTCP_SUBFLOWS_MAX;
> send_info[i].linger_time = -1;
> }
> // ...
>
> if (linger_time < send_info[subflow->backup].linger_time) {
> send_info[subflow->backup].subflow_id = i;
> send_info[subflow->backup].linger_time = linger_time;
> }
>
> // ...
> if (send_info[SSK_MODE_ACTIVE].subflow_id == MPTCP_SUBFLOWS_MAX)
> send_info[SSK_MODE_ACTIVE].subflow_id = send_info[SSK_MODE_BACKUP].subflow_id;
>
> if (send_info[SSK_MODE_ACTIVE].subflow_id < MPTCP_SUBFLOWS_MAX)
> subflow = data->context[send_info[SSK_MODE_ACTIVE].subflow_id];
>
> The last assignment should be equivalent to the already used 'subflow =
> data->contexts[i];'. What kind of errors do you see here?!? Could you
> please report them verbatim?
This line "subflow = data->context[send_info[SSK_MODE_ACTIVE].subflow_id];" will get a error:
R2 is ptr_mptcp_sched_data invalid variable offset: off=16, var_off=(0x0; 0x38)
Here's the patch:
'''
diff --git a/tools/testing/selftests/bpf/progs/mptcp_bpf_burst.c b/tools/testing/selftests/bpf/progs/mptcp_bpf_burst.c
index 2f97ffb707ac..cadf7320f233 100644
--- a/tools/testing/selftests/bpf/progs/mptcp_bpf_burst.c
+++ b/tools/testing/selftests/bpf/progs/mptcp_bpf_burst.c
@@ -10,7 +10,7 @@ char _license[] SEC("license") = "GPL";
#define MPTCP_SEND_BURST_SIZE 65428
struct subflow_send_info {
- struct sock *ssk;
+ unsigned int subflow_id;
__u64 linger_time;
};
@@ -79,13 +79,13 @@ static int bpf_burst_get_send(const struct mptcp_sock *msk,
struct mptcp_subflow_context *subflow;
struct sock *sk = (struct sock *)msk;
__u32 pace, burst, wmem;
- int i, nr_active = 0;
__u64 linger_time;
struct sock *ssk;
+ int i;
/* pick the subflow with the lower wmem/wspace ratio */
for (i = 0; i < SSK_MODE_MAX; ++i) {
- send_info[i].ssk = NULL;
+ send_info[i].subflow_id = MPTCP_SUBFLOWS_MAX;
send_info[i].linger_time = -1;
}
@@ -98,7 +98,6 @@ static int bpf_burst_get_send(const struct mptcp_sock *msk,
if (!mptcp_subflow_active(subflow))
continue;
- nr_active += !subflow->backup;
pace = subflow->avg_pacing_rate;
if (!pace) {
/* init pacing rate from socket */
@@ -110,15 +109,17 @@ static int bpf_burst_get_send(const struct mptcp_sock *msk,
linger_time = div_u64((__u64)ssk->sk_wmem_queued << 32, pace);
if (linger_time < send_info[subflow->backup].linger_time) {
- send_info[subflow->backup].ssk = ssk;
+ send_info[subflow->backup].subflow_id = i;
send_info[subflow->backup].linger_time = linger_time;
}
}
mptcp_set_timeout(sk);
- /* pick the best backup if no other subflow is active */
- if (!nr_active)
- send_info[SSK_MODE_ACTIVE].ssk = send_info[SSK_MODE_BACKUP].ssk;
+ if (send_info[SSK_MODE_ACTIVE].subflow_id == MPTCP_SUBFLOWS_MAX)
+ send_info[SSK_MODE_ACTIVE].subflow_id = send_info[SSK_MODE_BACKUP].subflow_id;
+
+ if (send_info[SSK_MODE_ACTIVE].subflow_id < MPTCP_SUBFLOWS_MAX)
+ subflow = data->contexts[send_info[SSK_MODE_ACTIVE].subflow_id];
/* Pass "send_info[SSK_MODE_ACTIVE].ssk" directly to bpf_sk_stream_memory_free()
* will get an error:
@@ -127,7 +128,6 @@ static int bpf_burst_get_send(const struct mptcp_sock *msk,
* then use mptcp_subflow_tcp_sock() to get the ssk,
* and pass the ssk to bpf_sk_stream_memory_free().
*/
- subflow = bpf_mptcp_subflow_ctx(send_info[SSK_MODE_ACTIVE].ssk, data);
ssk = mptcp_subflow_tcp_sock(subflow);
if (!ssk || !bpf_sk_stream_memory_free(ssk))
return -1;
'''
The full log is here:
'''
sudo ./test_progs -t mptcp
#141/1 mptcp/base:OK
#141/2 mptcp/first:OK
#141/3 mptcp/bkup:OK
#141/4 mptcp/rr:OK
#141/5 mptcp/red:OK
libbpf: prog 'bpf_burst_get_subflow': BPF program load failed: Permission denied
libbpf: prog 'bpf_burst_get_subflow': -- BEGIN PROG LOAD LOG --
reg type unsupported for arg#0 function bpf_burst_get_subflow#38
0: R1=ctx(off=0,imm=0) R10=fp0
; int BPF_STRUCT_OPS(bpf_burst_get_subflow, const struct mptcp_sock *msk,
0: (79) r5 = *(u64 *)(r1 +8)
func 'get_subflow' arg1 has btf_id 33984 type STRUCT 'mptcp_sched_data'
1: R1=ctx(off=0,imm=0) R5_w=trusted_ptr_mptcp_sched_data(off=0,imm=0)
1: (79) r9 = *(u64 *)(r1 +0)
func 'get_subflow' arg0 has btf_id 152912 type STRUCT 'mptcp_sock'
2: R1=ctx(off=0,imm=0) R9_w=trusted_ptr_mptcp_sock(off=0,imm=0)
; if (data->reinject)
2: (71) r1 = *(u8 *)(r5 +12) ; R1_w=scalar(umax=255,var_off=(0x0; 0xff)) R5_w=trusted_ptr_mptcp_sched_data(off=0,imm=0)
3: (7b) *(u64 *)(r10 -40) = r5 ; R5_w=trusted_ptr_mptcp_sched_data(off=0,imm=0) R10=fp0 fp-40_w=trusted_ptr_
; if (data->reinject)
4: (16) if w1 == 0x0 goto pc+51 56: R1_w=0 R5_w=trusted_ptr_mptcp_sched_data(off=0,imm=0) R9_w=trusted_ptr_mptcp_sock(off=0,imm=0) R10=fp0 fp-40_w=trusted_ptr_
; if (pick)
56: (b7) r1 = -1 ; R1_w=-1
; send_info[i].linger_time = -1;
57: (7b) *(u64 *)(r10 -8) = r1 ; R1_w=-1 R10=fp0 fp-8_w=-1
58: (7b) *(u64 *)(r10 -24) = r1 ; R1_w=-1 R10=fp0 fp-24_w=-1
59: (b4) w6 = 8 ; R6_w=8
; send_info[i].subflow_id = MPTCP_SUBFLOWS_MAX;
60: (63) *(u32 *)(r10 -16) = r6 ; R6_w=8 R10=fp0 fp-16=8
61: (63) *(u32 *)(r10 -32) = r6 ; R6_w=8 R10=fp0 fp-32=8
; if (!data->contexts[i])
62: (79) r1 = *(u64 *)(r5 +16) ; R1_w=ptr_mptcp_subflow_context(off=0,imm=0) R5_w=trusted_ptr_mptcp_sched_data(off=0,imm=0)
; if (!data->contexts[i])
63: (15) if r1 == 0x0 goto pc+22 ; R1_w=ptr_mptcp_subflow_context(off=0,imm=0)
64: (7b) *(u64 *)(r10 -56) = r9 ; R9_w=trusted_ptr_mptcp_sock(off=0,imm=0) R10=fp0 fp-56_w=trusted_ptr_
65: (b7) r2 = 16 ; R2_w=16
66: (bf) r1 = r5 ; R1_w=trusted_ptr_mptcp_sched_data(off=0,imm=0) R5_w=trusted_ptr_mptcp_sched_data(off=0,imm=0)
67: (0f) r1 += r2 ; R1_w=trusted_ptr_mptcp_sched_data(off=16,imm=0) R2_w=16
68: (b7) r9 = 0 ; R9_w=0
; for (i = 0; i < MPTCP_SUBFLOWS_MAX; i++) {
69: (07) r5 += 8 ; R5_w=trusted_ptr_mptcp_sched_data(off=8,imm=0)
70: (7b) *(u64 *)(r10 -48) = r5 ; R5_w=trusted_ptr_mptcp_sched_data(off=8,imm=0) R10=fp0 fp-48_w=trusted_ptr_
71: (b7) r6 = 0 ; R6_w=0
72: (05) goto pc+27
; subflow = data->contexts[i];
100: (0f) r1 += r9 ; R1_w=trusted_ptr_mptcp_sched_data(off=16,imm=0) R9=0
101: (79) r7 = *(u64 *)(r1 +0) ; R1_w=trusted_ptr_mptcp_sched_data(off=16,imm=0) R7_w=ptr_mptcp_subflow_context(off=0,imm=0)
; return subflow->tcp_sock;
102: (79) r8 = *(u64 *)(r7 +192) ; R7_w=ptr_mptcp_subflow_context(off=0,imm=0) R8_w=ptr_sock(off=0,imm=0)
; if (!mptcp_subflow_active(subflow))
103: (bf) r1 = r7 ; R1_w=ptr_mptcp_subflow_context(off=0,imm=0) R7_w=ptr_mptcp_subflow_context(off=0,imm=0)
104: (85) call mptcp_subflow_active#153119 ; R0_w=scalar()
; if (!mptcp_subflow_active(subflow))
105: (16) if w0 == 0x0 goto pc+36 ; R0_w=scalar()
; pace = subflow->avg_pacing_rate;
106: (79) r1 = *(u64 *)(r7 +16) ; R1_w=scalar() R7_w=ptr_mptcp_subflow_context(off=0,imm=0)
; pace = subflow->avg_pacing_rate;
107: (bf) r2 = r1 ; R1_w=scalar(id=127) R2_w=scalar(id=127)
108: (67) r2 <<= 32 ; R2_w=scalar(smax=9223372032559808512,umax=18446744069414584320,var_off=(0x0; 0xffffffff00000000),s32_min=0,s32_max=0,u32_max=0)
109: (77) r2 >>= 32 ; R2=scalar(umax=4294967295,var_off=(0x0; 0xffffffff))
; if (!pace) {
110: (56) if w1 != 0x0 goto pc+7 ; R1=scalar(id=127,smax=9223372032559808512,umax=18446744069414584320,var_off=(0x0; 0xffffffff00000000),s32_min=0,s32_max=0,u32_max=0)
; subflow->avg_pacing_rate = ssk->sk_pacing_rate;
111: (79) r1 = *(u64 *)(r8 +456) ; R1_w=scalar() R8=ptr_sock(off=0,imm=0)
; subflow->avg_pacing_rate = ssk->sk_pacing_rate;
112: (7b) *(u64 *)(r7 +16) = r1 ; R1_w=scalar() R7=ptr_mptcp_subflow_context(off=0,imm=0)
; pace = subflow->avg_pacing_rate;
113: (79) r1 = *(u64 *)(r7 +16) ; R1_w=scalar() R7=ptr_mptcp_subflow_context(off=0,imm=0)
; pace = subflow->avg_pacing_rate;
114: (bf) r2 = r1 ; R1_w=scalar(id=128) R2_w=scalar(id=128)
115: (67) r2 <<= 32 ; R2_w=scalar(smax=9223372032559808512,umax=18446744069414584320,var_off=(0x0; 0xffffffff00000000),s32_min=0,s32_max=0,u32_max=0)
116: (77) r2 >>= 32 ; R2_w=scalar(umax=4294967295,var_off=(0x0; 0xffffffff))
; if (!pace)
117: (16) if w1 == 0x0 goto pc+24 ; R1_w=scalar(id=128)
; linger_time = div_u64((__u64)ssk->sk_wmem_queued << 32, pace);
118: (61) r1 = *(u32 *)(r8 +336) ; R1_w=scalar(umax=4294967295,var_off=(0x0; 0xffffffff)) R8=ptr_sock(off=0,imm=0)
; linger_time = div_u64((__u64)ssk->sk_wmem_queued << 32, pace);
119: (67) r1 <<= 32 ; R1_w=scalar(smax=9223372032559808512,umax=18446744069414584320,var_off=(0x0; 0xffffffff00000000),s32_min=0,s32_max=0,u32_max=0)
; return dividend / divisor;
120: (3f) r1 /= r2 ; R1_w=scalar() R2=scalar(umax=4294967295,var_off=(0x0; 0xffffffff))
; if (linger_time < send_info[subflow->backup].linger_time) {
121: (71) r2 = *(u8 *)(r7 +88) ; R2_w=scalar(umax=255,var_off=(0x0; 0xff)) R7=ptr_mptcp_subflow_context(off=0,imm=0)
; if (linger_time < send_info[subflow->backup].linger_time) {
122: (57) r2 &= 1 ; R2_w=scalar(umax=1,var_off=(0x0; 0x1))
; if (linger_time < send_info[subflow->backup].linger_time) {
123: (67) r2 <<= 4 ; R2_w=scalar(umax=16,var_off=(0x0; 0x10))
124: (bf) r3 = r10 ; R3_w=fp0 R10=fp0
;
125: (07) r3 += -32 ; R3_w=fp-32
; if (linger_time < send_info[subflow->backup].linger_time) {
126: (0f) r3 += r2 ; R2_w=scalar(umax=16,var_off=(0x0; 0x10)) R3_w=fp(off=-32,umax=16,var_off=(0x0; 0x10))
127: (79) r2 = *(u64 *)(r3 +8) ; R2_w=scalar() R3_w=fp(off=-32,umax=16,var_off=(0x0; 0x10)) fp-24=-1
; if (linger_time < send_info[subflow->backup].linger_time) {
128: (3d) if r1 >= r2 goto pc+13 ; R1_w=scalar() R2_w=scalar()
; send_info[subflow->backup].subflow_id = i;
129: (71) r2 = *(u8 *)(r7 +88) ; R2_w=scalar(umax=255,var_off=(0x0; 0xff)) R7=ptr_mptcp_subflow_context(off=0,imm=0)
; send_info[subflow->backup].subflow_id = i;
130: (57) r2 &= 1 ; R2_w=scalar(umax=1,var_off=(0x0; 0x1))
; send_info[subflow->backup].subflow_id = i;
131: (67) r2 <<= 4 ; R2_w=scalar(umax=16,var_off=(0x0; 0x10))
132: (bf) r3 = r10 ; R3_w=fp0 R10=fp0
; send_info[subflow->backup].subflow_id = i;
133: (07) r3 += -32 ; R3_w=fp-32
; send_info[subflow->backup].subflow_id = i;
134: (bf) r4 = r3 ; R3_w=fp-32 R4_w=fp-32
135: (0f) r4 += r2 ; R2_w=scalar(umax=16,var_off=(0x0; 0x10)) R4_w=fp(off=-32,umax=16,var_off=(0x0; 0x10))
; send_info[subflow->backup].subflow_id = i;
136: (63) *(u32 *)(r4 +0) = r6 ; R4_w=fp(off=-32,umax=16,var_off=(0x0; 0x10)) R6=0 fp-16=????mmmm fp-24=mmmmmmmm fp-32=mmmmmmmm
; send_info[subflow->backup].linger_time = linger_time;
137: (71) r2 = *(u8 *)(r7 +88) ; R2_w=scalar(umax=255,var_off=(0x0; 0xff)) R7=ptr_mptcp_subflow_context(off=0,imm=0)
; send_info[subflow->backup].linger_time = linger_time;
138: (57) r2 &= 1 ; R2_w=scalar(umax=1,var_off=(0x0; 0x1))
; send_info[subflow->backup].linger_time = linger_time;
139: (67) r2 <<= 4 ; R2_w=scalar(umax=16,var_off=(0x0; 0x10))
140: (0f) r3 += r2 ; R2_w=scalar(umax=16,var_off=(0x0; 0x10)) R3_w=fp(off=-32,umax=16,var_off=(0x0; 0x10))
; send_info[subflow->backup].linger_time = linger_time;
141: (7b) *(u64 *)(r3 +8) = r1 ; R1_w=scalar() R3_w=fp(off=-32,umax=16,var_off=(0x0; 0x10)) fp-8=mmmmmmmm fp-16=mmmmmmmm fp-24=mmmmmmmm
; for (i = 0; i < MPTCP_SUBFLOWS_MAX; i++) {
142: (55) if r6 != 0x7 goto pc-54 ; R6=0
; mptcp_set_timeout(sk);
89: (79) r1 = *(u64 *)(r10 -40) ; R1_w=trusted_ptr_mptcp_sched_data(off=0,imm=0) R10=fp0 fp-40=trusted_ptr_
90: (b7) r3 = 16 ; R3_w=16
91: (0f) r1 += r3 ; R1_w=trusted_ptr_mptcp_sched_data(off=16,imm=0) R3_w=16
; if (!data->contexts[i])
92: (bf) r2 = r9 ; R2_w=0 R9=0
93: (0f) r2 += r3 ; R2_w=16 R3_w=16
94: (79) r3 = *(u64 *)(r10 -48) ; R3_w=trusted_ptr_mptcp_sched_data(off=8,imm=0) R10=fp0 fp-48=trusted_ptr_
95: (0f) r3 += r2 ; R2_w=16 R3_w=trusted_ptr_mptcp_sched_data(off=24,imm=0)
; for (i = 0; i < MPTCP_SUBFLOWS_MAX; i++) {
96: (07) r6 += 1 ; R6_w=1
; if (!data->contexts[i])
97: (07) r9 += 8 ; R9_w=8
; if (!data->contexts[i])
98: (79) r2 = *(u64 *)(r3 +0) ; R2_w=ptr_mptcp_subflow_context(off=0,imm=0) R3_w=trusted_ptr_mptcp_sched_data(off=24,imm=0)
; if (!data->contexts[i])
99: (15) if r2 == 0x0 goto pc+43 ; R2_w=ptr_mptcp_subflow_context(off=0,imm=0)
; subflow = data->contexts[i];
100: (0f) r1 += r9 ; R1_w=trusted_ptr_mptcp_sched_data(off=24,imm=0) R9_w=8
101: (79) r7 = *(u64 *)(r1 +0) ; R1_w=trusted_ptr_mptcp_sched_data(off=24,imm=0) R7_w=ptr_mptcp_subflow_context(off=0,imm=0)
; return subflow->tcp_sock;
102: (79) r8 = *(u64 *)(r7 +192) ; R7_w=ptr_mptcp_subflow_context(off=0,imm=0) R8_w=ptr_sock(off=0,imm=0)
; if (!mptcp_subflow_active(subflow))
103: (bf) r1 = r7 ; R1_w=ptr_mptcp_subflow_context(off=0,imm=0) R7_w=ptr_mptcp_subflow_context(off=0,imm=0)
104: (85) call mptcp_subflow_active#153119 ; R0=scalar()
; if (!mptcp_subflow_active(subflow))
105: (16) if w0 == 0x0 goto pc+36 ; R0=scalar()
; pace = subflow->avg_pacing_rate;
106: (79) r1 = *(u64 *)(r7 +16) ; R1_w=scalar() R7=ptr_mptcp_subflow_context(off=0,imm=0)
; pace = subflow->avg_pacing_rate;
107: (bf) r2 = r1 ; R1_w=scalar(id=130) R2_w=scalar(id=130)
108: (67) r2 <<= 32 ; R2_w=scalar(smax=9223372032559808512,umax=18446744069414584320,var_off=(0x0; 0xffffffff00000000),s32_min=0,s32_max=0,u32_max=0)
109: (77) r2 >>= 32 ; R2_w=scalar(umax=4294967295,var_off=(0x0; 0xffffffff))
; if (!pace) {
110: (56) if w1 != 0x0 goto pc+7 ; R1_w=scalar(id=130,smax=9223372032559808512,umax=18446744069414584320,var_off=(0x0; 0xffffffff00000000),s32_min=0,s32_max=0,u32_max=0)
; subflow->avg_pacing_rate = ssk->sk_pacing_rate;
111: (79) r1 = *(u64 *)(r8 +456) ; R1_w=scalar() R8=ptr_sock(off=0,imm=0)
; subflow->avg_pacing_rate = ssk->sk_pacing_rate;
112: (7b) *(u64 *)(r7 +16) = r1 ; R1_w=scalar() R7=ptr_mptcp_subflow_context(off=0,imm=0)
; pace = subflow->avg_pacing_rate;
113: (79) r1 = *(u64 *)(r7 +16) ; R1_w=scalar() R7=ptr_mptcp_subflow_context(off=0,imm=0)
; pace = subflow->avg_pacing_rate;
114: (bf) r2 = r1 ; R1_w=scalar(id=131) R2_w=scalar(id=131)
115: (67) r2 <<= 32 ; R2_w=scalar(smax=9223372032559808512,umax=18446744069414584320,var_off=(0x0; 0xffffffff00000000),s32_min=0,s32_max=0,u32_max=0)
116: (77) r2 >>= 32 ; R2=scalar(umax=4294967295,var_off=(0x0; 0xffffffff))
; if (!pace)
117: (16) if w1 == 0x0 goto pc+24 ; R1=scalar(id=131)
; linger_time = div_u64((__u64)ssk->sk_wmem_queued << 32, pace);
118: (61) r1 = *(u32 *)(r8 +336) ; R1_w=scalar(umax=4294967295,var_off=(0x0; 0xffffffff)) R8=ptr_sock(off=0,imm=0)
; linger_time = div_u64((__u64)ssk->sk_wmem_queued << 32, pace);
119: (67) r1 <<= 32 ; R1_w=scalar(smax=9223372032559808512,umax=18446744069414584320,var_off=(0x0; 0xffffffff00000000),s32_min=0,s32_max=0,u32_max=0)
; return dividend / divisor;
120: (3f) r1 /= r2 ; R1_w=scalar() R2=scalar(umax=4294967295,var_off=(0x0; 0xffffffff))
; if (linger_time < send_info[subflow->backup].linger_time) {
121: (71) r2 = *(u8 *)(r7 +88) ; R2_w=scalar(umax=255,var_off=(0x0; 0xff)) R7=ptr_mptcp_subflow_context(off=0,imm=0)
; if (linger_time < send_info[subflow->backup].linger_time) {
122: (57) r2 &= 1 ; R2_w=scalar(umax=1,var_off=(0x0; 0x1))
; if (linger_time < send_info[subflow->backup].linger_time) {
123: (67) r2 <<= 4 ; R2_w=scalar(umax=16,var_off=(0x0; 0x10))
124: (bf) r3 = r10 ; R3_w=fp0 R10=fp0
;
125: (07) r3 += -32 ; R3_w=fp-32
; if (linger_time < send_info[subflow->backup].linger_time) {
126: (0f) r3 += r2 ; R2_w=scalar(umax=16,var_off=(0x0; 0x10)) R3_w=fp(off=-32,umax=16,var_off=(0x0; 0x10))
127: (79) r2 = *(u64 *)(r3 +8) ; R2_w=scalar() R3_w=fp(off=-32,umax=16,var_off=(0x0; 0x10)) fp-24=mmmmmmmm
; if (linger_time < send_info[subflow->backup].linger_time) {
128: (3d) if r1 >= r2 goto pc+13 ; R1_w=scalar() R2_w=scalar()
; send_info[subflow->backup].subflow_id = i;
129: (71) r2 = *(u8 *)(r7 +88) ; R2_w=scalar(umax=255,var_off=(0x0; 0xff)) R7=ptr_mptcp_subflow_context(off=0,imm=0)
; send_info[subflow->backup].subflow_id = i;
130: (57) r2 &= 1 ; R2_w=scalar(umax=1,var_off=(0x0; 0x1))
; send_info[subflow->backup].subflow_id = i;
131: (67) r2 <<= 4 ; R2_w=scalar(umax=16,var_off=(0x0; 0x10))
132: (bf) r3 = r10 ; R3_w=fp0 R10=fp0
; send_info[subflow->backup].subflow_id = i;
133: (07) r3 += -32 ; R3_w=fp-32
; send_info[subflow->backup].subflow_id = i;
134: (bf) r4 = r3 ; R3_w=fp-32 R4_w=fp-32
135: (0f) r4 += r2 ; R2_w=scalar(umax=16,var_off=(0x0; 0x10)) R4_w=fp(off=-32,umax=16,var_off=(0x0; 0x10))
; send_info[subflow->backup].subflow_id = i;
136: (63) *(u32 *)(r4 +0) = r6 ; R4_w=fp(off=-32,umax=16,var_off=(0x0; 0x10)) R6=1 fp-16=mmmmmmmm fp-24=mmmmmmmm fp-32=mmmmmmmm
; send_info[subflow->backup].linger_time = linger_time;
137: (71) r2 = *(u8 *)(r7 +88) ; R2_w=scalar(umax=255,var_off=(0x0; 0xff)) R7=ptr_mptcp_subflow_context(off=0,imm=0)
; send_info[subflow->backup].linger_time = linger_time;
138: (57) r2 &= 1 ; R2_w=scalar(umax=1,var_off=(0x0; 0x1))
; send_info[subflow->backup].linger_time = linger_time;
139: (67) r2 <<= 4 ; R2_w=scalar(umax=16,var_off=(0x0; 0x10))
140: (0f) r3 += r2 ; R2_w=scalar(umax=16,var_off=(0x0; 0x10)) R3_w=fp(off=-32,umax=16,var_off=(0x0; 0x10))
; send_info[subflow->backup].linger_time = linger_time;
141: (7b) *(u64 *)(r3 +8) = r1 ; R1=scalar() R3=fp(off=-32,umax=16,var_off=(0x0; 0x10)) fp-8=mmmmmmmm fp-16=mmmmmmmm fp-24=mmmmmmmm
; for (i = 0; i < MPTCP_SUBFLOWS_MAX; i++) {
142: (55) if r6 != 0x7 goto pc-54 ; R6=1
; mptcp_set_timeout(sk);
89: (79) r1 = *(u64 *)(r10 -40) ; R1_w=trusted_ptr_mptcp_sched_data(off=0,imm=0) R10=fp0 fp-40=trusted_ptr_
90: (b7) r3 = 16 ; R3_w=16
91: (0f) r1 += r3 ; R1_w=trusted_ptr_mptcp_sched_data(off=16,imm=0) R3_w=16
; if (!data->contexts[i])
92: (bf) r2 = r9 ; R2_w=8 R9=8
93: (0f) r2 += r3 ; R2_w=24 R3_w=16
94: (79) r3 = *(u64 *)(r10 -48) ; R3_w=trusted_ptr_mptcp_sched_data(off=8,imm=0) R10=fp0 fp-48=trusted_ptr_
95: (0f) r3 += r2 ; R2_w=24 R3_w=trusted_ptr_mptcp_sched_data(off=32,imm=0)
; for (i = 0; i < MPTCP_SUBFLOWS_MAX; i++) {
96: (07) r6 += 1 ; R6_w=2
; if (!data->contexts[i])
97: (07) r9 += 8 ; R9_w=16
; if (!data->contexts[i])
98: (79) r2 = *(u64 *)(r3 +0) ; R2_w=ptr_mptcp_subflow_context(off=0,imm=0) R3_w=trusted_ptr_mptcp_sched_data(off=32,imm=0)
; if (!data->contexts[i])
99: (15) if r2 == 0x0 goto pc+43 ; R2_w=ptr_mptcp_subflow_context(off=0,imm=0)
; subflow = data->contexts[i];
100: (0f) r1 += r9 ; R1_w=trusted_ptr_mptcp_sched_data(off=32,imm=0) R9_w=16
101: (79) r7 = *(u64 *)(r1 +0) ; R1_w=trusted_ptr_mptcp_sched_data(off=32,imm=0) R7_w=ptr_mptcp_subflow_context(off=0,imm=0)
; return subflow->tcp_sock;
102: (79) r8 = *(u64 *)(r7 +192) ; R7_w=ptr_mptcp_subflow_context(off=0,imm=0) R8_w=ptr_sock(off=0,imm=0)
; if (!mptcp_subflow_active(subflow))
103: (bf) r1 = r7 ; R1_w=ptr_mptcp_subflow_context(off=0,imm=0) R7_w=ptr_mptcp_subflow_context(off=0,imm=0)
104: (85) call mptcp_subflow_active#153119 ; R0_w=scalar()
; if (!mptcp_subflow_active(subflow))
105: (16) if w0 == 0x0 goto pc+36 ; R0_w=scalar()
; pace = subflow->avg_pacing_rate;
106: (79) r1 = *(u64 *)(r7 +16) ; R1_w=scalar() R7_w=ptr_mptcp_subflow_context(off=0,imm=0)
; pace = subflow->avg_pacing_rate;
107: (bf) r2 = r1 ; R1_w=scalar(id=133) R2_w=scalar(id=133)
108: (67) r2 <<= 32 ; R2_w=scalar(smax=9223372032559808512,umax=18446744069414584320,var_off=(0x0; 0xffffffff00000000),s32_min=0,s32_max=0,u32_max=0)
109: (77) r2 >>= 32 ; R2_w=scalar(umax=4294967295,var_off=(0x0; 0xffffffff))
; if (!pace) {
110: (56) if w1 != 0x0 goto pc+7 ; R1_w=scalar(id=133,smax=9223372032559808512,umax=18446744069414584320,var_off=(0x0; 0xffffffff00000000),s32_min=0,s32_max=0,u32_max=0)
; subflow->avg_pacing_rate = ssk->sk_pacing_rate;
111: (79) r1 = *(u64 *)(r8 +456) ; R1_w=scalar() R8_w=ptr_sock(off=0,imm=0)
; subflow->avg_pacing_rate = ssk->sk_pacing_rate;
112: (7b) *(u64 *)(r7 +16) = r1 ; R1_w=scalar() R7_w=ptr_mptcp_subflow_context(off=0,imm=0)
; pace = subflow->avg_pacing_rate;
113: (79) r1 = *(u64 *)(r7 +16) ; R1_w=scalar() R7_w=ptr_mptcp_subflow_context(off=0,imm=0)
; pace = subflow->avg_pacing_rate;
114: (bf) r2 = r1 ; R1_w=scalar(id=134) R2_w=scalar(id=134)
115: (67) r2 <<= 32 ; R2_w=scalar(smax=9223372032559808512,umax=18446744069414584320,var_off=(0x0; 0xffffffff00000000),s32_min=0,s32_max=0,u32_max=0)
116: (77) r2 >>= 32 ; R2_w=scalar(umax=4294967295,var_off=(0x0; 0xffffffff))
; if (!pace)
117: (16) if w1 == 0x0 goto pc+24 ; R1_w=scalar(id=134)
; linger_time = div_u64((__u64)ssk->sk_wmem_queued << 32, pace);
118: (61) r1 = *(u32 *)(r8 +336) ; R1_w=scalar(umax=4294967295,var_off=(0x0; 0xffffffff)) R8_w=ptr_sock(off=0,imm=0)
; linger_time = div_u64((__u64)ssk->sk_wmem_queued << 32, pace);
119: (67) r1 <<= 32 ; R1_w=scalar(smax=9223372032559808512,umax=18446744069414584320,var_off=(0x0; 0xffffffff00000000),s32_min=0,s32_max=0,u32_max=0)
; return dividend / divisor;
120: (3f) r1 /= r2 ; R1_w=scalar() R2_w=scalar(umax=4294967295,var_off=(0x0; 0xffffffff))
; if (linger_time < send_info[subflow->backup].linger_time) {
121: (71) r2 = *(u8 *)(r7 +88) ; R2_w=scalar(umax=255,var_off=(0x0; 0xff)) R7_w=ptr_mptcp_subflow_context(off=0,imm=0)
; if (linger_time < send_info[subflow->backup].linger_time) {
122: (57) r2 &= 1 ; R2_w=scalar(umax=1,var_off=(0x0; 0x1))
; if (linger_time < send_info[subflow->backup].linger_time) {
123: (67) r2 <<= 4 ; R2_w=scalar(umax=16,var_off=(0x0; 0x10))
124: (bf) r3 = r10 ; R3_w=fp0 R10=fp0
;
125: (07) r3 += -32 ; R3_w=fp-32
; if (linger_time < send_info[subflow->backup].linger_time) {
126: (0f) r3 += r2 ; R2_w=scalar(umax=16,var_off=(0x0; 0x10)) R3_w=fp(off=-32,umax=16,var_off=(0x0; 0x10))
127: (79) r2 = *(u64 *)(r3 +8) ; R2=scalar() R3=fp(off=-32,umax=16,var_off=(0x0; 0x10)) fp-24=mmmmmmmm
; if (linger_time < send_info[subflow->backup].linger_time) {
128: (3d) if r1 >= r2 goto pc+13 ; R1=scalar() R2=scalar()
; send_info[subflow->backup].subflow_id = i;
129: (71) r2 = *(u8 *)(r7 +88) ; R2_w=scalar(umax=255,var_off=(0x0; 0xff)) R7=ptr_mptcp_subflow_context(off=0,imm=0)
; send_info[subflow->backup].subflow_id = i;
130: (57) r2 &= 1 ; R2_w=scalar(umax=1,var_off=(0x0; 0x1))
; send_info[subflow->backup].subflow_id = i;
131: (67) r2 <<= 4 ; R2_w=scalar(umax=16,var_off=(0x0; 0x10))
132: (bf) r3 = r10 ; R3_w=fp0 R10=fp0
; send_info[subflow->backup].subflow_id = i;
133: (07) r3 += -32 ; R3_w=fp-32
; send_info[subflow->backup].subflow_id = i;
134: (bf) r4 = r3 ; R3_w=fp-32 R4_w=fp-32
135: (0f) r4 += r2 ; R2_w=scalar(umax=16,var_off=(0x0; 0x10)) R4_w=fp(off=-32,umax=16,var_off=(0x0; 0x10))
; send_info[subflow->backup].subflow_id = i;
136: (63) *(u32 *)(r4 +0) = r6 ; R4_w=fp(off=-32,umax=16,var_off=(0x0; 0x10)) R6=2 fp-16=mmmmmmmm fp-24=mmmmmmmm fp-32=mmmmmmmm
; send_info[subflow->backup].linger_time = linger_time;
137: (71) r2 = *(u8 *)(r7 +88) ; R2_w=scalar(umax=255,var_off=(0x0; 0xff)) R7=ptr_mptcp_subflow_context(off=0,imm=0)
; send_info[subflow->backup].linger_time = linger_time;
138: (57) r2 &= 1 ; R2_w=scalar(umax=1,var_off=(0x0; 0x1))
; send_info[subflow->backup].linger_time = linger_time;
139: (67) r2 <<= 4 ; R2_w=scalar(umax=16,var_off=(0x0; 0x10))
140: (0f) r3 += r2 ; R2_w=scalar(umax=16,var_off=(0x0; 0x10)) R3_w=fp(off=-32,umax=16,var_off=(0x0; 0x10))
; send_info[subflow->backup].linger_time = linger_time;
141: (7b) *(u64 *)(r3 +8) = r1 ; R1=scalar() R3_w=fp(off=-32,umax=16,var_off=(0x0; 0x10)) fp-8=mmmmmmmm fp-16=mmmmmmmm fp-24=mmmmmmmm
; for (i = 0; i < MPTCP_SUBFLOWS_MAX; i++) {
142: (55) if r6 != 0x7 goto pc-54 ; R6=2
; mptcp_set_timeout(sk);
89: (79) r1 = *(u64 *)(r10 -40) ; R1_w=trusted_ptr_mptcp_sched_data(off=0,imm=0) R10=fp0 fp-40=trusted_ptr_
90: (b7) r3 = 16 ; R3_w=16
91: (0f) r1 += r3 ; R1_w=trusted_ptr_mptcp_sched_data(off=16,imm=0) R3_w=16
; if (!data->contexts[i])
92: (bf) r2 = r9 ; R2_w=16 R9=16
93: (0f) r2 += r3 ; R2_w=32 R3_w=16
94: (79) r3 = *(u64 *)(r10 -48) ; R3_w=trusted_ptr_mptcp_sched_data(off=8,imm=0) R10=fp0 fp-48=trusted_ptr_
95: (0f) r3 += r2 ; R2_w=32 R3_w=trusted_ptr_mptcp_sched_data(off=40,imm=0)
; for (i = 0; i < MPTCP_SUBFLOWS_MAX; i++) {
96: (07) r6 += 1 ; R6_w=3
; if (!data->contexts[i])
97: (07) r9 += 8 ; R9_w=24
; if (!data->contexts[i])
98: (79) r2 = *(u64 *)(r3 +0) ; R2=ptr_mptcp_subflow_context(off=0,imm=0) R3=trusted_ptr_mptcp_sched_data(off=40,imm=0)
; if (!data->contexts[i])
99: (15) if r2 == 0x0 goto pc+43 ; R2=ptr_mptcp_subflow_context(off=0,imm=0)
; subflow = data->contexts[i];
100: (0f) r1 += r9 ; R1_w=trusted_ptr_mptcp_sched_data(off=40,imm=0) R9=24
101: (79) r7 = *(u64 *)(r1 +0) ; R1_w=trusted_ptr_mptcp_sched_data(off=40,imm=0) R7_w=ptr_mptcp_subflow_context(off=0,imm=0)
; return subflow->tcp_sock;
102: (79) r8 = *(u64 *)(r7 +192) ; R7_w=ptr_mptcp_subflow_context(off=0,imm=0) R8_w=ptr_sock(off=0,imm=0)
; if (!mptcp_subflow_active(subflow))
103: (bf) r1 = r7 ; R1_w=ptr_mptcp_subflow_context(off=0,imm=0) R7_w=ptr_mptcp_subflow_context(off=0,imm=0)
104: (85) call mptcp_subflow_active#153119 ; R0_w=scalar()
; if (!mptcp_subflow_active(subflow))
105: (16) if w0 == 0x0 goto pc+36 ; R0_w=scalar()
; pace = subflow->avg_pacing_rate;
106: (79) r1 = *(u64 *)(r7 +16) ; R1_w=scalar() R7_w=ptr_mptcp_subflow_context(off=0,imm=0)
; pace = subflow->avg_pacing_rate;
107: (bf) r2 = r1 ; R1_w=scalar(id=136) R2_w=scalar(id=136)
108: (67) r2 <<= 32 ; R2_w=scalar(smax=9223372032559808512,umax=18446744069414584320,var_off=(0x0; 0xffffffff00000000),s32_min=0,s32_max=0,u32_max=0)
109: (77) r2 >>= 32 ; R2_w=scalar(umax=4294967295,var_off=(0x0; 0xffffffff))
; if (!pace) {
110: (56) if w1 != 0x0 goto pc+7 ; R1_w=scalar(id=136,smax=9223372032559808512,umax=18446744069414584320,var_off=(0x0; 0xffffffff00000000),s32_min=0,s32_max=0,u32_max=0)
; subflow->avg_pacing_rate = ssk->sk_pacing_rate;
111: (79) r1 = *(u64 *)(r8 +456) ; R1_w=scalar() R8_w=ptr_sock(off=0,imm=0)
; subflow->avg_pacing_rate = ssk->sk_pacing_rate;
112: (7b) *(u64 *)(r7 +16) = r1 ; R1_w=scalar() R7_w=ptr_mptcp_subflow_context(off=0,imm=0)
; pace = subflow->avg_pacing_rate;
113: (79) r1 = *(u64 *)(r7 +16) ; R1_w=scalar() R7_w=ptr_mptcp_subflow_context(off=0,imm=0)
; pace = subflow->avg_pacing_rate;
114: (bf) r2 = r1 ; R1_w=scalar(id=137) R2_w=scalar(id=137)
115: (67) r2 <<= 32 ; R2_w=scalar(smax=9223372032559808512,umax=18446744069414584320,var_off=(0x0; 0xffffffff00000000),s32_min=0,s32_max=0,u32_max=0)
116: (77) r2 >>= 32 ; R2_w=scalar(umax=4294967295,var_off=(0x0; 0xffffffff))
; if (!pace)
117: (16) if w1 == 0x0 goto pc+24 ; R1_w=scalar(id=137)
; linger_time = div_u64((__u64)ssk->sk_wmem_queued << 32, pace);
118: (61) r1 = *(u32 *)(r8 +336) ; R1_w=scalar(umax=4294967295,var_off=(0x0; 0xffffffff)) R8_w=ptr_sock(off=0,imm=0)
; linger_time = div_u64((__u64)ssk->sk_wmem_queued << 32, pace);
119: (67) r1 <<= 32 ; R1_w=scalar(smax=9223372032559808512,umax=18446744069414584320,var_off=(0x0; 0xffffffff00000000),s32_min=0,s32_max=0,u32_max=0)
; return dividend / divisor;
120: (3f) r1 /= r2 ; R1_w=scalar() R2_w=scalar(umax=4294967295,var_off=(0x0; 0xffffffff))
; if (linger_time < send_info[subflow->backup].linger_time) {
121: (71) r2 = *(u8 *)(r7 +88) ; R2_w=scalar(umax=255,var_off=(0x0; 0xff)) R7_w=ptr_mptcp_subflow_context(off=0,imm=0)
; if (linger_time < send_info[subflow->backup].linger_time) {
122: (57) r2 &= 1 ; R2_w=scalar(umax=1,var_off=(0x0; 0x1))
; if (linger_time < send_info[subflow->backup].linger_time) {
123: (67) r2 <<= 4 ; R2_w=scalar(umax=16,var_off=(0x0; 0x10))
124: (bf) r3 = r10 ; R3_w=fp0 R10=fp0
;
125: (07) r3 += -32 ; R3_w=fp-32
; if (linger_time < send_info[subflow->backup].linger_time) {
126: (0f) r3 += r2 ; R2_w=scalar(umax=16,var_off=(0x0; 0x10)) R3_w=fp(off=-32,umax=16,var_off=(0x0; 0x10))
127: (79) r2 = *(u64 *)(r3 +8) ; R2_w=scalar() R3_w=fp(off=-32,umax=16,var_off=(0x0; 0x10)) fp-24=mmmmmmmm
; if (linger_time < send_info[subflow->backup].linger_time) {
128: (3d) if r1 >= r2 goto pc+13 ; R1_w=scalar() R2_w=scalar()
; send_info[subflow->backup].subflow_id = i;
129: (71) r2 = *(u8 *)(r7 +88) ; R2_w=scalar(umax=255,var_off=(0x0; 0xff)) R7_w=ptr_mptcp_subflow_context(off=0,imm=0)
; send_info[subflow->backup].subflow_id = i;
130: (57) r2 &= 1 ; R2_w=scalar(umax=1,var_off=(0x0; 0x1))
; send_info[subflow->backup].subflow_id = i;
131: (67) r2 <<= 4 ; R2_w=scalar(umax=16,var_off=(0x0; 0x10))
132: (bf) r3 = r10 ; R3_w=fp0 R10=fp0
; send_info[subflow->backup].subflow_id = i;
133: (07) r3 += -32 ; R3_w=fp-32
; send_info[subflow->backup].subflow_id = i;
134: (bf) r4 = r3 ; R3_w=fp-32 R4_w=fp-32
135: (0f) r4 += r2 ; R2_w=scalar(umax=16,var_off=(0x0; 0x10)) R4_w=fp(off=-32,umax=16,var_off=(0x0; 0x10))
; send_info[subflow->backup].subflow_id = i;
136: (63) *(u32 *)(r4 +0) = r6 ; R4_w=fp(off=-32,umax=16,var_off=(0x0; 0x10)) R6=3 fp-16=mmmmmmmm fp-24=mmmmmmmm fp-32=mmmmmmmm
; send_info[subflow->backup].linger_time = linger_time;
137: (71) r2 = *(u8 *)(r7 +88) ; R2_w=scalar(umax=255,var_off=(0x0; 0xff)) R7_w=ptr_mptcp_subflow_context(off=0,imm=0)
; send_info[subflow->backup].linger_time = linger_time;
138: (57) r2 &= 1 ; R2_w=scalar(umax=1,var_off=(0x0; 0x1))
; send_info[subflow->backup].linger_time = linger_time;
139: (67) r2 <<= 4 ; R2_w=scalar(umax=16,var_off=(0x0; 0x10))
140: (0f) r3 += r2 ; R2_w=scalar(umax=16,var_off=(0x0; 0x10)) R3_w=fp(off=-32,umax=16,var_off=(0x0; 0x10))
; send_info[subflow->backup].linger_time = linger_time;
141: (7b) *(u64 *)(r3 +8) = r1 ; R1_w=scalar() R3_w=fp(off=-32,umax=16,var_off=(0x0; 0x10)) fp-8=mmmmmmmm fp-16=mmmmmmmm fp-24=mmmmmmmm
; for (i = 0; i < MPTCP_SUBFLOWS_MAX; i++) {
142: (55) if r6 != 0x7 goto pc-54 ; R6=3
; mptcp_set_timeout(sk);
89: (79) r1 = *(u64 *)(r10 -40) ; R1_w=trusted_ptr_mptcp_sched_data(off=0,imm=0) R10=fp0 fp-40=trusted_ptr_
90: (b7) r3 = 16 ; R3_w=16
91: (0f) r1 += r3 ; R1_w=trusted_ptr_mptcp_sched_data(off=16,imm=0) R3_w=16
; if (!data->contexts[i])
92: (bf) r2 = r9 ; R2_w=24 R9=24
93: (0f) r2 += r3 ; R2_w=40 R3_w=16
94: (79) r3 = *(u64 *)(r10 -48) ; R3_w=trusted_ptr_mptcp_sched_data(off=8,imm=0) R10=fp0 fp-48=trusted_ptr_
95: (0f) r3 += r2 ; R2_w=40 R3_w=trusted_ptr_mptcp_sched_data(off=48,imm=0)
; for (i = 0; i < MPTCP_SUBFLOWS_MAX; i++) {
96: (07) r6 += 1 ; R6_w=4
; if (!data->contexts[i])
97: (07) r9 += 8 ; R9_w=32
; if (!data->contexts[i])
98: (79) r2 = *(u64 *)(r3 +0) ; R2_w=ptr_mptcp_subflow_context(off=0,imm=0) R3_w=trusted_ptr_mptcp_sched_data(off=48,imm=0)
; if (!data->contexts[i])
99: (15) if r2 == 0x0 goto pc+43 ; R2_w=ptr_mptcp_subflow_context(off=0,imm=0)
; subflow = data->contexts[i];
100: (0f) r1 += r9 ; R1_w=trusted_ptr_mptcp_sched_data(off=48,imm=0) R9_w=32
101: (79) r7 = *(u64 *)(r1 +0) ; R1_w=trusted_ptr_mptcp_sched_data(off=48,imm=0) R7_w=ptr_mptcp_subflow_context(off=0,imm=0)
; return subflow->tcp_sock;
102: (79) r8 = *(u64 *)(r7 +192) ; R7_w=ptr_mptcp_subflow_context(off=0,imm=0) R8_w=ptr_sock(off=0,imm=0)
; if (!mptcp_subflow_active(subflow))
103: (bf) r1 = r7 ; R1_w=ptr_mptcp_subflow_context(off=0,imm=0) R7_w=ptr_mptcp_subflow_context(off=0,imm=0)
104: (85) call mptcp_subflow_active#153119 ; R0_w=scalar()
; if (!mptcp_subflow_active(subflow))
105: (16) if w0 == 0x0 goto pc+36 ; R0_w=scalar()
; pace = subflow->avg_pacing_rate;
106: (79) r1 = *(u64 *)(r7 +16) ; R1_w=scalar() R7_w=ptr_mptcp_subflow_context(off=0,imm=0)
; pace = subflow->avg_pacing_rate;
107: (bf) r2 = r1 ; R1_w=scalar(id=139) R2_w=scalar(id=139)
108: (67) r2 <<= 32 ; R2_w=scalar(smax=9223372032559808512,umax=18446744069414584320,var_off=(0x0; 0xffffffff00000000),s32_min=0,s32_max=0,u32_max=0)
109: (77) r2 >>= 32 ; R2_w=scalar(umax=4294967295,var_off=(0x0; 0xffffffff))
; if (!pace) {
110: (56) if w1 != 0x0 goto pc+7 ; R1_w=scalar(id=139,smax=9223372032559808512,umax=18446744069414584320,var_off=(0x0; 0xffffffff00000000),s32_min=0,s32_max=0,u32_max=0)
; subflow->avg_pacing_rate = ssk->sk_pacing_rate;
111: (79) r1 = *(u64 *)(r8 +456) ; R1_w=scalar() R8_w=ptr_sock(off=0,imm=0)
; subflow->avg_pacing_rate = ssk->sk_pacing_rate;
112: (7b) *(u64 *)(r7 +16) = r1 ; R1_w=scalar() R7_w=ptr_mptcp_subflow_context(off=0,imm=0)
; pace = subflow->avg_pacing_rate;
113: (79) r1 = *(u64 *)(r7 +16) ; R1_w=scalar() R7_w=ptr_mptcp_subflow_context(off=0,imm=0)
; pace = subflow->avg_pacing_rate;
114: (bf) r2 = r1 ; R1_w=scalar(id=140) R2_w=scalar(id=140)
115: (67) r2 <<= 32 ; R2_w=scalar(smax=9223372032559808512,umax=18446744069414584320,var_off=(0x0; 0xffffffff00000000),s32_min=0,s32_max=0,u32_max=0)
116: (77) r2 >>= 32 ; R2_w=scalar(umax=4294967295,var_off=(0x0; 0xffffffff))
; if (!pace)
117: (16) if w1 == 0x0 goto pc+24 ; R1_w=scalar(id=140)
; linger_time = div_u64((__u64)ssk->sk_wmem_queued << 32, pace);
118: (61) r1 = *(u32 *)(r8 +336) ; R1_w=scalar(umax=4294967295,var_off=(0x0; 0xffffffff)) R8_w=ptr_sock(off=0,imm=0)
; linger_time = div_u64((__u64)ssk->sk_wmem_queued << 32, pace);
119: (67) r1 <<= 32 ; R1_w=scalar(smax=9223372032559808512,umax=18446744069414584320,var_off=(0x0; 0xffffffff00000000),s32_min=0,s32_max=0,u32_max=0)
; return dividend / divisor;
120: (3f) r1 /= r2 ; R1_w=scalar() R2_w=scalar(umax=4294967295,var_off=(0x0; 0xffffffff))
; if (linger_time < send_info[subflow->backup].linger_time) {
121: (71) r2 = *(u8 *)(r7 +88) ; R2_w=scalar(umax=255,var_off=(0x0; 0xff)) R7_w=ptr_mptcp_subflow_context(off=0,imm=0)
; if (linger_time < send_info[subflow->backup].linger_time) {
122: (57) r2 &= 1 ; R2_w=scalar(umax=1,var_off=(0x0; 0x1))
; if (linger_time < send_info[subflow->backup].linger_time) {
123: (67) r2 <<= 4 ; R2_w=scalar(umax=16,var_off=(0x0; 0x10))
124: (bf) r3 = r10 ; R3_w=fp0 R10=fp0
;
125: (07) r3 += -32 ; R3_w=fp-32
; if (linger_time < send_info[subflow->backup].linger_time) {
126: (0f) r3 += r2 ; R2_w=scalar(umax=16,var_off=(0x0; 0x10)) R3_w=fp(off=-32,umax=16,var_off=(0x0; 0x10))
127: (79) r2 = *(u64 *)(r3 +8) ; R2_w=scalar() R3_w=fp(off=-32,umax=16,var_off=(0x0; 0x10)) fp-24=mmmmmmmm
; if (linger_time < send_info[subflow->backup].linger_time) {
128: (3d) if r1 >= r2 goto pc+13 ; R1_w=scalar() R2_w=scalar()
; send_info[subflow->backup].subflow_id = i;
129: (71) r2 = *(u8 *)(r7 +88) ; R2_w=scalar(umax=255,var_off=(0x0; 0xff)) R7_w=ptr_mptcp_subflow_context(off=0,imm=0)
; send_info[subflow->backup].subflow_id = i;
130: (57) r2 &= 1 ; R2_w=scalar(umax=1,var_off=(0x0; 0x1))
; send_info[subflow->backup].subflow_id = i;
131: (67) r2 <<= 4 ; R2_w=scalar(umax=16,var_off=(0x0; 0x10))
132: (bf) r3 = r10 ; R3_w=fp0 R10=fp0
; send_info[subflow->backup].subflow_id = i;
133: (07) r3 += -32 ; R3_w=fp-32
; send_info[subflow->backup].subflow_id = i;
134: (bf) r4 = r3 ; R3_w=fp-32 R4_w=fp-32
135: (0f) r4 += r2 ; R2_w=scalar(umax=16,var_off=(0x0; 0x10)) R4_w=fp(off=-32,umax=16,var_off=(0x0; 0x10))
; send_info[subflow->backup].subflow_id = i;
136: (63) *(u32 *)(r4 +0) = r6 ; R4_w=fp(off=-32,umax=16,var_off=(0x0; 0x10)) R6_w=4 fp-16=mmmmmmmm fp-24=mmmmmmmm fp-32=mmmmmmmm
; send_info[subflow->backup].linger_time = linger_time;
137: (71) r2 = *(u8 *)(r7 +88) ; R2_w=scalar(umax=255,var_off=(0x0; 0xff)) R7_w=ptr_mptcp_subflow_context(off=0,imm=0)
; send_info[subflow->backup].linger_time = linger_time;
138: (57) r2 &= 1 ; R2_w=scalar(umax=1,var_off=(0x0; 0x1))
; send_info[subflow->backup].linger_time = linger_time;
139: (67) r2 <<= 4 ; R2_w=scalar(umax=16,var_off=(0x0; 0x10))
140: (0f) r3 += r2 ; R2_w=scalar(umax=16,var_off=(0x0; 0x10)) R3_w=fp(off=-32,umax=16,var_off=(0x0; 0x10))
; send_info[subflow->backup].linger_time = linger_time;
141: (7b) *(u64 *)(r3 +8) = r1 ; R1_w=scalar() R3_w=fp(off=-32,umax=16,var_off=(0x0; 0x10)) fp-8=mmmmmmmm fp-16=mmmmmmmm fp-24=mmmmmmmm
; for (i = 0; i < MPTCP_SUBFLOWS_MAX; i++) {
142: (55) if r6 != 0x7 goto pc-54 ; R6_w=4
; mptcp_set_timeout(sk);
89: (79) r1 = *(u64 *)(r10 -40) ; R1_w=trusted_ptr_mptcp_sched_data(off=0,imm=0) R10=fp0 fp-40=trusted_ptr_
90: (b7) r3 = 16 ; R3_w=16
91: (0f) r1 += r3 ; R1_w=trusted_ptr_mptcp_sched_data(off=16,imm=0) R3_w=16
; if (!data->contexts[i])
92: (bf) r2 = r9 ; R2_w=32 R9_w=32
93: (0f) r2 += r3 ; R2_w=48 R3_w=16
94: (79) r3 = *(u64 *)(r10 -48) ; R3_w=trusted_ptr_mptcp_sched_data(off=8,imm=0) R10=fp0 fp-48=trusted_ptr_
95: (0f) r3 += r2 ; R2_w=48 R3_w=trusted_ptr_mptcp_sched_data(off=56,imm=0)
; for (i = 0; i < MPTCP_SUBFLOWS_MAX; i++) {
96: (07) r6 += 1 ; R6_w=5
; if (!data->contexts[i])
97: (07) r9 += 8 ; R9_w=40
; if (!data->contexts[i])
98: (79) r2 = *(u64 *)(r3 +0) ; R2=ptr_mptcp_subflow_context(off=0,imm=0) R3=trusted_ptr_mptcp_sched_data(off=56,imm=0)
; if (!data->contexts[i])
99: (15) if r2 == 0x0 goto pc+43 ; R2=ptr_mptcp_subflow_context(off=0,imm=0)
; subflow = data->contexts[i];
100: (0f) r1 += r9 ; R1_w=trusted_ptr_mptcp_sched_data(off=56,imm=0) R9=40
101: (79) r7 = *(u64 *)(r1 +0) ; R1_w=trusted_ptr_mptcp_sched_data(off=56,imm=0) R7_w=ptr_mptcp_subflow_context(off=0,imm=0)
; return subflow->tcp_sock;
102: (79) r8 = *(u64 *)(r7 +192) ; R7_w=ptr_mptcp_subflow_context(off=0,imm=0) R8_w=ptr_sock(off=0,imm=0)
; if (!mptcp_subflow_active(subflow))
103: (bf) r1 = r7 ; R1_w=ptr_mptcp_subflow_context(off=0,imm=0) R7_w=ptr_mptcp_subflow_context(off=0,imm=0)
104: (85) call mptcp_subflow_active#153119 ; R0_w=scalar()
; if (!mptcp_subflow_active(subflow))
105: (16) if w0 == 0x0 goto pc+36 ; R0_w=scalar()
; pace = subflow->avg_pacing_rate;
106: (79) r1 = *(u64 *)(r7 +16) ; R1_w=scalar() R7_w=ptr_mptcp_subflow_context(off=0,imm=0)
; pace = subflow->avg_pacing_rate;
107: (bf) r2 = r1 ; R1_w=scalar(id=142) R2_w=scalar(id=142)
108: (67) r2 <<= 32 ; R2_w=scalar(smax=9223372032559808512,umax=18446744069414584320,var_off=(0x0; 0xffffffff00000000),s32_min=0,s32_max=0,u32_max=0)
109: (77) r2 >>= 32 ; R2_w=scalar(umax=4294967295,var_off=(0x0; 0xffffffff))
; if (!pace) {
110: (56) if w1 != 0x0 goto pc+7 ; R1_w=scalar(id=142,smax=9223372032559808512,umax=18446744069414584320,var_off=(0x0; 0xffffffff00000000),s32_min=0,s32_max=0,u32_max=0)
; subflow->avg_pacing_rate = ssk->sk_pacing_rate;
111: (79) r1 = *(u64 *)(r8 +456) ; R1_w=scalar() R8_w=ptr_sock(off=0,imm=0)
; subflow->avg_pacing_rate = ssk->sk_pacing_rate;
112: (7b) *(u64 *)(r7 +16) = r1 ; R1_w=scalar() R7_w=ptr_mptcp_subflow_context(off=0,imm=0)
; pace = subflow->avg_pacing_rate;
113: (79) r1 = *(u64 *)(r7 +16) ; R1_w=scalar() R7_w=ptr_mptcp_subflow_context(off=0,imm=0)
; pace = subflow->avg_pacing_rate;
114: (bf) r2 = r1 ; R1_w=scalar(id=143) R2_w=scalar(id=143)
115: (67) r2 <<= 32 ; R2_w=scalar(smax=9223372032559808512,umax=18446744069414584320,var_off=(0x0; 0xffffffff00000000),s32_min=0,s32_max=0,u32_max=0)
116: (77) r2 >>= 32 ; R2_w=scalar(umax=4294967295,var_off=(0x0; 0xffffffff))
; if (!pace)
117: (16) if w1 == 0x0 goto pc+24 ; R1_w=scalar(id=143)
; linger_time = div_u64((__u64)ssk->sk_wmem_queued << 32, pace);
118: (61) r1 = *(u32 *)(r8 +336) ; R1_w=scalar(umax=4294967295,var_off=(0x0; 0xffffffff)) R8_w=ptr_sock(off=0,imm=0)
; linger_time = div_u64((__u64)ssk->sk_wmem_queued << 32, pace);
119: (67) r1 <<= 32 ; R1_w=scalar(smax=9223372032559808512,umax=18446744069414584320,var_off=(0x0; 0xffffffff00000000),s32_min=0,s32_max=0,u32_max=0)
; return dividend / divisor;
120: (3f) r1 /= r2 ; R1_w=scalar() R2_w=scalar(umax=4294967295,var_off=(0x0; 0xffffffff))
; if (linger_time < send_info[subflow->backup].linger_time) {
121: (71) r2 = *(u8 *)(r7 +88) ; R2_w=scalar(umax=255,var_off=(0x0; 0xff)) R7_w=ptr_mptcp_subflow_context(off=0,imm=0)
; if (linger_time < send_info[subflow->backup].linger_time) {
122: (57) r2 &= 1 ; R2_w=scalar(umax=1,var_off=(0x0; 0x1))
; if (linger_time < send_info[subflow->backup].linger_time) {
123: (67) r2 <<= 4 ; R2_w=scalar(umax=16,var_off=(0x0; 0x10))
124: (bf) r3 = r10 ; R3_w=fp0 R10=fp0
;
125: (07) r3 += -32 ; R3_w=fp-32
; if (linger_time < send_info[subflow->backup].linger_time) {
126: (0f) r3 += r2 ; R2_w=scalar(umax=16,var_off=(0x0; 0x10)) R3_w=fp(off=-32,umax=16,var_off=(0x0; 0x10))
127: (79) r2 = *(u64 *)(r3 +8) ; R2_w=scalar() R3_w=fp(off=-32,umax=16,var_off=(0x0; 0x10)) fp-24=mmmmmmmm
; if (linger_time < send_info[subflow->backup].linger_time) {
128: (3d) if r1 >= r2 goto pc+13 ; R1_w=scalar() R2_w=scalar()
; send_info[subflow->backup].subflow_id = i;
129: (71) r2 = *(u8 *)(r7 +88) ; R2_w=scalar(umax=255,var_off=(0x0; 0xff)) R7_w=ptr_mptcp_subflow_context(off=0,imm=0)
; send_info[subflow->backup].subflow_id = i;
130: (57) r2 &= 1 ; R2_w=scalar(umax=1,var_off=(0x0; 0x1))
; send_info[subflow->backup].subflow_id = i;
131: (67) r2 <<= 4 ; R2_w=scalar(umax=16,var_off=(0x0; 0x10))
132: (bf) r3 = r10 ; R3_w=fp0 R10=fp0
; send_info[subflow->backup].subflow_id = i;
133: (07) r3 += -32 ; R3_w=fp-32
; send_info[subflow->backup].subflow_id = i;
134: (bf) r4 = r3 ; R3_w=fp-32 R4_w=fp-32
135: (0f) r4 += r2 ; R2_w=scalar(umax=16,var_off=(0x0; 0x10)) R4_w=fp(off=-32,umax=16,var_off=(0x0; 0x10))
; send_info[subflow->backup].subflow_id = i;
136: (63) *(u32 *)(r4 +0) = r6 ; R4_w=fp(off=-32,umax=16,var_off=(0x0; 0x10)) R6=5 fp-16=mmmmmmmm fp-24=mmmmmmmm fp-32=mmmmmmmm
; send_info[subflow->backup].linger_time = linger_time;
137: (71) r2 = *(u8 *)(r7 +88) ; R2_w=scalar(umax=255,var_off=(0x0; 0xff)) R7_w=ptr_mptcp_subflow_context(off=0,imm=0)
; send_info[subflow->backup].linger_time = linger_time;
138: (57) r2 &= 1 ; R2_w=scalar(umax=1,var_off=(0x0; 0x1))
; send_info[subflow->backup].linger_time = linger_time;
139: (67) r2 <<= 4 ; R2_w=scalar(umax=16,var_off=(0x0; 0x10))
140: (0f) r3 += r2 ; R2_w=scalar(umax=16,var_off=(0x0; 0x10)) R3_w=fp(off=-32,umax=16,var_off=(0x0; 0x10))
; send_info[subflow->backup].linger_time = linger_time;
141: (7b) *(u64 *)(r3 +8) = r1 ; R1_w=scalar() R3_w=fp(off=-32,umax=16,var_off=(0x0; 0x10)) fp-8=mmmmmmmm fp-16=mmmmmmmm fp-24=mmmmmmmm
; for (i = 0; i < MPTCP_SUBFLOWS_MAX; i++) {
142: (55) if r6 != 0x7 goto pc-54 ; R6=5
; mptcp_set_timeout(sk);
89: (79) r1 = *(u64 *)(r10 -40) ; R1_w=trusted_ptr_mptcp_sched_data(off=0,imm=0) R10=fp0 fp-40=trusted_ptr_
90: (b7) r3 = 16 ; R3_w=16
91: (0f) r1 += r3 ; R1_w=trusted_ptr_mptcp_sched_data(off=16,imm=0) R3_w=16
; if (!data->contexts[i])
92: (bf) r2 = r9 ; R2_w=40 R9=40
93: (0f) r2 += r3 ; R2_w=56 R3_w=16
94: (79) r3 = *(u64 *)(r10 -48) ; R3_w=trusted_ptr_mptcp_sched_data(off=8,imm=0) R10=fp0 fp-48=trusted_ptr_
95: (0f) r3 += r2 ; R2_w=56 R3_w=trusted_ptr_mptcp_sched_data(off=64,imm=0)
; for (i = 0; i < MPTCP_SUBFLOWS_MAX; i++) {
96: (07) r6 += 1 ; R6_w=6
; if (!data->contexts[i])
97: (07) r9 += 8 ; R9_w=48
; if (!data->contexts[i])
98: (79) r2 = *(u64 *)(r3 +0) ; R2_w=ptr_mptcp_subflow_context(off=0,imm=0) R3_w=trusted_ptr_mptcp_sched_data(off=64,imm=0)
; if (!data->contexts[i])
99: (15) if r2 == 0x0 goto pc+43 ; R2_w=ptr_mptcp_subflow_context(off=0,imm=0)
; subflow = data->contexts[i];
100: (0f) r1 += r9 ; R1_w=trusted_ptr_mptcp_sched_data(off=64,imm=0) R9_w=48
101: (79) r7 = *(u64 *)(r1 +0) ; R1_w=trusted_ptr_mptcp_sched_data(off=64,imm=0) R7_w=ptr_mptcp_subflow_context(off=0,imm=0)
; return subflow->tcp_sock;
102: (79) r8 = *(u64 *)(r7 +192) ; R7_w=ptr_mptcp_subflow_context(off=0,imm=0) R8_w=ptr_sock(off=0,imm=0)
; if (!mptcp_subflow_active(subflow))
103: (bf) r1 = r7 ; R1_w=ptr_mptcp_subflow_context(off=0,imm=0) R7_w=ptr_mptcp_subflow_context(off=0,imm=0)
104: (85) call mptcp_subflow_active#153119 ; R0_w=scalar()
; if (!mptcp_subflow_active(subflow))
105: (16) if w0 == 0x0 goto pc+36 ; R0_w=scalar()
; pace = subflow->avg_pacing_rate;
106: (79) r1 = *(u64 *)(r7 +16) ; R1_w=scalar() R7_w=ptr_mptcp_subflow_context(off=0,imm=0)
; pace = subflow->avg_pacing_rate;
107: (bf) r2 = r1 ; R1_w=scalar(id=145) R2_w=scalar(id=145)
108: (67) r2 <<= 32 ; R2_w=scalar(smax=9223372032559808512,umax=18446744069414584320,var_off=(0x0; 0xffffffff00000000),s32_min=0,s32_max=0,u32_max=0)
109: (77) r2 >>= 32 ; R2_w=scalar(umax=4294967295,var_off=(0x0; 0xffffffff))
; if (!pace) {
110: (56) if w1 != 0x0 goto pc+7 ; R1_w=scalar(id=145,smax=9223372032559808512,umax=18446744069414584320,var_off=(0x0; 0xffffffff00000000),s32_min=0,s32_max=0,u32_max=0)
; subflow->avg_pacing_rate = ssk->sk_pacing_rate;
111: (79) r1 = *(u64 *)(r8 +456) ; R1_w=scalar() R8_w=ptr_sock(off=0,imm=0)
; subflow->avg_pacing_rate = ssk->sk_pacing_rate;
112: (7b) *(u64 *)(r7 +16) = r1 ; R1_w=scalar() R7_w=ptr_mptcp_subflow_context(off=0,imm=0)
; pace = subflow->avg_pacing_rate;
113: (79) r1 = *(u64 *)(r7 +16) ; R1_w=scalar() R7_w=ptr_mptcp_subflow_context(off=0,imm=0)
; pace = subflow->avg_pacing_rate;
114: (bf) r2 = r1 ; R1_w=scalar(id=146) R2_w=scalar(id=146)
115: (67) r2 <<= 32 ; R2_w=scalar(smax=9223372032559808512,umax=18446744069414584320,var_off=(0x0; 0xffffffff00000000),s32_min=0,s32_max=0,u32_max=0)
116: (77) r2 >>= 32 ; R2_w=scalar(umax=4294967295,var_off=(0x0; 0xffffffff))
; if (!pace)
117: (16) if w1 == 0x0 goto pc+24 ; R1_w=scalar(id=146)
; linger_time = div_u64((__u64)ssk->sk_wmem_queued << 32, pace);
118: (61) r1 = *(u32 *)(r8 +336) ; R1_w=scalar(umax=4294967295,var_off=(0x0; 0xffffffff)) R8_w=ptr_sock(off=0,imm=0)
; linger_time = div_u64((__u64)ssk->sk_wmem_queued << 32, pace);
119: (67) r1 <<= 32 ; R1_w=scalar(smax=9223372032559808512,umax=18446744069414584320,var_off=(0x0; 0xffffffff00000000),s32_min=0,s32_max=0,u32_max=0)
; return dividend / divisor;
120: (3f) r1 /= r2 ; R1_w=scalar() R2_w=scalar(umax=4294967295,var_off=(0x0; 0xffffffff))
; if (linger_time < send_info[subflow->backup].linger_time) {
121: (71) r2 = *(u8 *)(r7 +88) ; R2_w=scalar(umax=255,var_off=(0x0; 0xff)) R7_w=ptr_mptcp_subflow_context(off=0,imm=0)
; if (linger_time < send_info[subflow->backup].linger_time) {
122: (57) r2 &= 1 ; R2_w=scalar(umax=1,var_off=(0x0; 0x1))
; if (linger_time < send_info[subflow->backup].linger_time) {
123: (67) r2 <<= 4 ; R2_w=scalar(umax=16,var_off=(0x0; 0x10))
124: (bf) r3 = r10 ; R3_w=fp0 R10=fp0
;
125: (07) r3 += -32 ; R3_w=fp-32
; if (linger_time < send_info[subflow->backup].linger_time) {
126: (0f) r3 += r2 ; R2_w=scalar(umax=16,var_off=(0x0; 0x10)) R3_w=fp(off=-32,umax=16,var_off=(0x0; 0x10))
127: (79) r2 = *(u64 *)(r3 +8) ; R2_w=scalar() R3_w=fp(off=-32,umax=16,var_off=(0x0; 0x10)) fp-24=mmmmmmmm
; if (linger_time < send_info[subflow->backup].linger_time) {
128: (3d) if r1 >= r2 goto pc+13 ; R1_w=scalar() R2_w=scalar()
; send_info[subflow->backup].subflow_id = i;
129: (71) r2 = *(u8 *)(r7 +88) ; R2_w=scalar(umax=255,var_off=(0x0; 0xff)) R7_w=ptr_mptcp_subflow_context(off=0,imm=0)
; send_info[subflow->backup].subflow_id = i;
130: (57) r2 &= 1 ; R2_w=scalar(umax=1,var_off=(0x0; 0x1))
; send_info[subflow->backup].subflow_id = i;
131: (67) r2 <<= 4 ; R2_w=scalar(umax=16,var_off=(0x0; 0x10))
132: (bf) r3 = r10 ; R3_w=fp0 R10=fp0
; send_info[subflow->backup].subflow_id = i;
133: (07) r3 += -32 ; R3_w=fp-32
; send_info[subflow->backup].subflow_id = i;
134: (bf) r4 = r3 ; R3_w=fp-32 R4_w=fp-32
135: (0f) r4 += r2 ; R2_w=scalar(umax=16,var_off=(0x0; 0x10)) R4_w=fp(off=-32,umax=16,var_off=(0x0; 0x10))
; send_info[subflow->backup].subflow_id = i;
136: (63) *(u32 *)(r4 +0) = r6 ; R4_w=fp(off=-32,umax=16,var_off=(0x0; 0x10)) R6_w=6 fp-16=mmmmmmmm fp-24=mmmmmmmm fp-32=mmmmmmmm
; send_info[subflow->backup].linger_time = linger_time;
137: (71) r2 = *(u8 *)(r7 +88) ; R2_w=scalar(umax=255,var_off=(0x0; 0xff)) R7_w=ptr_mptcp_subflow_context(off=0,imm=0)
; send_info[subflow->backup].linger_time = linger_time;
138: (57) r2 &= 1 ; R2_w=scalar(umax=1,var_off=(0x0; 0x1))
; send_info[subflow->backup].linger_time = linger_time;
139: (67) r2 <<= 4 ; R2_w=scalar(umax=16,var_off=(0x0; 0x10))
140: (0f) r3 += r2 ; R2_w=scalar(umax=16,var_off=(0x0; 0x10)) R3_w=fp(off=-32,umax=16,var_off=(0x0; 0x10))
; send_info[subflow->backup].linger_time = linger_time;
141: (7b) *(u64 *)(r3 +8) = r1 ; R1_w=scalar() R3_w=fp(off=-32,umax=16,var_off=(0x0; 0x10)) fp-8=mmmmmmmm fp-16=mmmmmmmm fp-24=mmmmmmmm
; for (i = 0; i < MPTCP_SUBFLOWS_MAX; i++) {
142: (55) if r6 != 0x7 goto pc-54 ; R6_w=6
; mptcp_set_timeout(sk);
89: (79) r1 = *(u64 *)(r10 -40) ; R1_w=trusted_ptr_mptcp_sched_data(off=0,imm=0) R10=fp0 fp-40=trusted_ptr_
90: (b7) r3 = 16 ; R3_w=16
91: (0f) r1 += r3 ; R1_w=trusted_ptr_mptcp_sched_data(off=16,imm=0) R3_w=16
; if (!data->contexts[i])
92: (bf) r2 = r9 ; R2_w=48 R9_w=48
93: (0f) r2 += r3 ; R2_w=64 R3_w=16
94: (79) r3 = *(u64 *)(r10 -48) ; R3_w=trusted_ptr_mptcp_sched_data(off=8,imm=0) R10=fp0 fp-48=trusted_ptr_
95: (0f) r3 += r2 ; R2_w=64 R3_w=trusted_ptr_mptcp_sched_data(off=72,imm=0)
; for (i = 0; i < MPTCP_SUBFLOWS_MAX; i++) {
96: (07) r6 += 1 ; R6_w=7
; if (!data->contexts[i])
97: (07) r9 += 8 ; R9_w=56
; if (!data->contexts[i])
98: (79) r2 = *(u64 *)(r3 +0) ; R2=ptr_mptcp_subflow_context(off=0,imm=0) R3=trusted_ptr_mptcp_sched_data(off=72,imm=0)
; if (!data->contexts[i])
99: (15) if r2 == 0x0 goto pc+43 ; R2=ptr_mptcp_subflow_context(off=0,imm=0)
; subflow = data->contexts[i];
100: (0f) r1 += r9 ; R1_w=trusted_ptr_mptcp_sched_data(off=72,imm=0) R9=56
101: (79) r7 = *(u64 *)(r1 +0) ; R1_w=trusted_ptr_mptcp_sched_data(off=72,imm=0) R7_w=ptr_mptcp_subflow_context(off=0,imm=0)
; return subflow->tcp_sock;
102: (79) r8 = *(u64 *)(r7 +192) ; R7_w=ptr_mptcp_subflow_context(off=0,imm=0) R8_w=ptr_sock(off=0,imm=0)
; if (!mptcp_subflow_active(subflow))
103: (bf) r1 = r7 ; R1_w=ptr_mptcp_subflow_context(off=0,imm=0) R7_w=ptr_mptcp_subflow_context(off=0,imm=0)
104: (85) call mptcp_subflow_active#153119 ; R0_w=scalar()
; if (!mptcp_subflow_active(subflow))
105: (16) if w0 == 0x0 goto pc+36 ; R0_w=scalar()
; pace = subflow->avg_pacing_rate;
106: (79) r1 = *(u64 *)(r7 +16) ; R1_w=scalar() R7_w=ptr_mptcp_subflow_context(off=0,imm=0)
; pace = subflow->avg_pacing_rate;
107: (bf) r2 = r1 ; R1_w=scalar(id=148) R2_w=scalar(id=148)
108: (67) r2 <<= 32 ; R2_w=scalar(smax=9223372032559808512,umax=18446744069414584320,var_off=(0x0; 0xffffffff00000000),s32_min=0,s32_max=0,u32_max=0)
109: (77) r2 >>= 32 ; R2_w=scalar(umax=4294967295,var_off=(0x0; 0xffffffff))
; if (!pace) {
110: (56) if w1 != 0x0 goto pc+7 ; R1_w=scalar(id=148,smax=9223372032559808512,umax=18446744069414584320,var_off=(0x0; 0xffffffff00000000),s32_min=0,s32_max=0,u32_max=0)
; subflow->avg_pacing_rate = ssk->sk_pacing_rate;
111: (79) r1 = *(u64 *)(r8 +456) ; R1_w=scalar() R8_w=ptr_sock(off=0,imm=0)
; subflow->avg_pacing_rate = ssk->sk_pacing_rate;
112: (7b) *(u64 *)(r7 +16) = r1 ; R1_w=scalar() R7_w=ptr_mptcp_subflow_context(off=0,imm=0)
; pace = subflow->avg_pacing_rate;
113: (79) r1 = *(u64 *)(r7 +16) ; R1_w=scalar() R7_w=ptr_mptcp_subflow_context(off=0,imm=0)
; pace = subflow->avg_pacing_rate;
114: (bf) r2 = r1 ; R1_w=scalar(id=149) R2_w=scalar(id=149)
115: (67) r2 <<= 32 ; R2_w=scalar(smax=9223372032559808512,umax=18446744069414584320,var_off=(0x0; 0xffffffff00000000),s32_min=0,s32_max=0,u32_max=0)
116: (77) r2 >>= 32 ; R2_w=scalar(umax=4294967295,var_off=(0x0; 0xffffffff))
; if (!pace)
117: (16) if w1 == 0x0 goto pc+24 ; R1_w=scalar(id=149)
; linger_time = div_u64((__u64)ssk->sk_wmem_queued << 32, pace);
118: (61) r1 = *(u32 *)(r8 +336) ; R1_w=scalar(umax=4294967295,var_off=(0x0; 0xffffffff)) R8_w=ptr_sock(off=0,imm=0)
; linger_time = div_u64((__u64)ssk->sk_wmem_queued << 32, pace);
119: (67) r1 <<= 32 ; R1_w=scalar(smax=9223372032559808512,umax=18446744069414584320,var_off=(0x0; 0xffffffff00000000),s32_min=0,s32_max=0,u32_max=0)
; return dividend / divisor;
120: (3f) r1 /= r2 ; R1_w=scalar() R2_w=scalar(umax=4294967295,var_off=(0x0; 0xffffffff))
; if (linger_time < send_info[subflow->backup].linger_time) {
121: (71) r2 = *(u8 *)(r7 +88) ; R2_w=scalar(umax=255,var_off=(0x0; 0xff)) R7_w=ptr_mptcp_subflow_context(off=0,imm=0)
; if (linger_time < send_info[subflow->backup].linger_time) {
122: (57) r2 &= 1 ; R2_w=scalar(umax=1,var_off=(0x0; 0x1))
; if (linger_time < send_info[subflow->backup].linger_time) {
123: (67) r2 <<= 4 ; R2_w=scalar(umax=16,var_off=(0x0; 0x10))
124: (bf) r3 = r10 ; R3_w=fp0 R10=fp0
;
125: (07) r3 += -32 ; R3_w=fp-32
; if (linger_time < send_info[subflow->backup].linger_time) {
126: (0f) r3 += r2 ; R2_w=scalar(umax=16,var_off=(0x0; 0x10)) R3_w=fp(off=-32,umax=16,var_off=(0x0; 0x10))
127: (79) r2 = *(u64 *)(r3 +8) ; R2_w=scalar() R3_w=fp(off=-32,umax=16,var_off=(0x0; 0x10)) fp-24=mmmmmmmm
; if (linger_time < send_info[subflow->backup].linger_time) {
128: (3d) if r1 >= r2 goto pc+13 ; R1_w=scalar() R2_w=scalar()
; send_info[subflow->backup].subflow_id = i;
129: (71) r2 = *(u8 *)(r7 +88) ; R2_w=scalar(umax=255,var_off=(0x0; 0xff)) R7_w=ptr_mptcp_subflow_context(off=0,imm=0)
; send_info[subflow->backup].subflow_id = i;
130: (57) r2 &= 1 ; R2_w=scalar(umax=1,var_off=(0x0; 0x1))
; send_info[subflow->backup].subflow_id = i;
131: (67) r2 <<= 4 ; R2_w=scalar(umax=16,var_off=(0x0; 0x10))
132: (bf) r3 = r10 ; R3_w=fp0 R10=fp0
; send_info[subflow->backup].subflow_id = i;
133: (07) r3 += -32 ; R3_w=fp-32
; send_info[subflow->backup].subflow_id = i;
134: (bf) r4 = r3 ; R3_w=fp-32 R4_w=fp-32
135: (0f) r4 += r2 ; R2_w=scalar(umax=16,var_off=(0x0; 0x10)) R4_w=fp(off=-32,umax=16,var_off=(0x0; 0x10))
; send_info[subflow->backup].subflow_id = i;
136: (63) *(u32 *)(r4 +0) = r6 ; R4_w=fp(off=-32,umax=16,var_off=(0x0; 0x10)) R6=7 fp-16=mmmmmmmm fp-24=mmmmmmmm fp-32=mmmmmmmm
; send_info[subflow->backup].linger_time = linger_time;
137: (71) r2 = *(u8 *)(r7 +88) ; R2_w=scalar(umax=255,var_off=(0x0; 0xff)) R7_w=ptr_mptcp_subflow_context(off=0,imm=0)
; send_info[subflow->backup].linger_time = linger_time;
138: (57) r2 &= 1 ; R2_w=scalar(umax=1,var_off=(0x0; 0x1))
; send_info[subflow->backup].linger_time = linger_time;
139: (67) r2 <<= 4 ; R2_w=scalar(umax=16,var_off=(0x0; 0x10))
140: (0f) r3 += r2 ; R2_w=scalar(umax=16,var_off=(0x0; 0x10)) R3_w=fp(off=-32,umax=16,var_off=(0x0; 0x10))
; send_info[subflow->backup].linger_time = linger_time;
141: (7b) *(u64 *)(r3 +8) = r1 ; R1_w=scalar() R3_w=fp(off=-32,umax=16,var_off=(0x0; 0x10)) fp-8=mmmmmmmm fp-16=mmmmmmmm fp-24=mmmmmmmm
; for (i = 0; i < MPTCP_SUBFLOWS_MAX; i++) {
142: (55) if r6 != 0x7 goto pc-54 ; R6=7
; if (send_info[SSK_MODE_ACTIVE].subflow_id == MPTCP_SUBFLOWS_MAX)
143: (61) r6 = *(u32 *)(r10 -16) ; R6_w=scalar(umax=4294967295,var_off=(0x0; 0xffffffff)) R10=fp0 fp-16=mmmmmmmm
; if (send_info[SSK_MODE_ACTIVE].subflow_id == MPTCP_SUBFLOWS_MAX)
144: (61) r8 = *(u32 *)(r10 -32) ; R8_w=scalar(umax=4294967295,var_off=(0x0; 0xffffffff)) R10=fp0 fp-32=mmmmmmmm
145: (79) r9 = *(u64 *)(r10 -56) ; R9_w=trusted_ptr_mptcp_sock(off=0,imm=0) R10=fp0 fp-56=trusted_ptr_
; mptcp_set_timeout(sk);
146: (bf) r1 = r9 ; R1_w=trusted_ptr_mptcp_sock(off=0,imm=0) R9_w=trusted_ptr_mptcp_sock(off=0,imm=0)
147: (85) call mptcp_set_timeout#153142 ;
; if (send_info[SSK_MODE_ACTIVE].subflow_id == MPTCP_SUBFLOWS_MAX)
148: (56) if w8 != 0x8 goto pc+1 ; R8_w=8
149: (bc) w8 = w6 ; R6_w=scalar(id=150,umax=4294967295,var_off=(0x0; 0xffffffff)) R8_w=scalar(id=150,umax=4294967295,var_off=(0x0; 0xffffffff))
150: (bf) r6 = r9 ; R6=trusted_ptr_mptcp_sock(off=0,imm=0) R9=trusted_ptr_mptcp_sock(off=0,imm=0)
; if (send_info[SSK_MODE_ACTIVE].subflow_id < MPTCP_SUBFLOWS_MAX)
151: (26) if w8 > 0x7 goto pc+6 ; R8=scalar(id=150,umax=7,var_off=(0x0; 0x7))
152: (b7) r1 = 16 ; R1_w=16
153: (79) r2 = *(u64 *)(r10 -40) ; R2_w=trusted_ptr_mptcp_sched_data(off=0,imm=0) R10=fp0 fp-40=trusted_ptr_
154: (0f) r2 += r1 ; R1_w=16 R2_w=trusted_ptr_mptcp_sched_data(off=16,imm=0)
; subflow = data->contexts[send_info[SSK_MODE_ACTIVE].subflow_id];
155: (67) r8 <<= 3 ; R8_w=scalar(umax=56,var_off=(0x0; 0x38))
156: (0f) r2 += r8 ; R2_w=trusted_ptr_mptcp_sched_data(off=16,umax=56,var_off=(0x0; 0x38)) R8_w=scalar(umax=56,var_off=(0x0; 0x38))
157: (79) r7 = *(u64 *)(r2 +0)
R2 is ptr_mptcp_sched_data invalid variable offset: off=16, var_off=(0x0; 0x38)
processed 4748 insns (limit 1000000) max_states_per_insn 10 total_states 174 peak_states 113 mark_read 12
-- END PROG LOAD LOG --
libbpf: prog 'bpf_burst_get_subflow': failed to load: -13
libbpf: failed to load object 'mptcp_bpf_burst'
libbpf: failed to load BPF skeleton 'mptcp_bpf_burst': -13
test_burst:FAIL:bpf_burst__open_and_load unexpected error: -13
#141/6 mptcp/burst:FAIL
#141/7 mptcp/stale:OK
#141 mptcp:FAIL
All error logs:
libbpf: prog 'bpf_burst_get_subflow': BPF program load failed: Permission denied
libbpf: prog 'bpf_burst_get_subflow': -- BEGIN PROG LOAD LOG --
reg type unsupported for arg#0 function bpf_burst_get_subflow#38
0: R1=ctx(off=0,imm=0) R10=fp0
; int BPF_STRUCT_OPS(bpf_burst_get_subflow, const struct mptcp_sock *msk,
0: (79) r5 = *(u64 *)(r1 +8)
func 'get_subflow' arg1 has btf_id 33984 type STRUCT 'mptcp_sched_data'
1: R1=ctx(off=0,imm=0) R5_w=trusted_ptr_mptcp_sched_data(off=0,imm=0)
1: (79) r9 = *(u64 *)(r1 +0)
func 'get_subflow' arg0 has btf_id 152912 type STRUCT 'mptcp_sock'
2: R1=ctx(off=0,imm=0) R9_w=trusted_ptr_mptcp_sock(off=0,imm=0)
; if (data->reinject)
2: (71) r1 = *(u8 *)(r5 +12) ; R1_w=scalar(umax=255,var_off=(0x0; 0xff)) R5_w=trusted_ptr_mptcp_sched_data(off=0,imm=0)
3: (7b) *(u64 *)(r10 -40) = r5 ; R5_w=trusted_ptr_mptcp_sched_data(off=0,imm=0) R10=fp0 fp-40_w=trusted_ptr_
; if (data->reinject)
4: (16) if w1 == 0x0 goto pc+51 56: R1_w=0 R5_w=trusted_ptr_mptcp_sched_data(off=0,imm=0) R9_w=trusted_ptr_mptcp_sock(off=0,imm=0) R10=fp0 fp-40_w=trusted_ptr_
; if (pick)
56: (b7) r1 = -1 ; R1_w=-1
; send_info[i].linger_time = -1;
57: (7b) *(u64 *)(r10 -8) = r1 ; R1_w=-1 R10=fp0 fp-8_w=-1
58: (7b) *(u64 *)(r10 -24) = r1 ; R1_w=-1 R10=fp0 fp-24_w=-1
59: (b4) w6 = 8 ; R6_w=8
; send_info[i].subflow_id = MPTCP_SUBFLOWS_MAX;
60: (63) *(u32 *)(r10 -16) = r6 ; R6_w=8 R10=fp0 fp-16=8
61: (63) *(u32 *)(r10 -32) = r6 ; R6_w=8 R10=fp0 fp-32=8
; if (!data->contexts[i])
62: (79) r1 = *(u64 *)(r5 +16) ; R1_w=ptr_mptcp_subflow_context(off=0,imm=0) R5_w=trusted_ptr_mptcp_sched_data(off=0,imm=0)
; if (!data->contexts[i])
63: (15) if r1 == 0x0 goto pc+22 ; R1_w=ptr_mptcp_subflow_context(off=0,imm=0)
64: (7b) *(u64 *)(r10 -56) = r9 ; R9_w=trusted_ptr_mptcp_sock(off=0,imm=0) R10=fp0 fp-56_w=trusted_ptr_
65: (b7) r2 = 16 ; R2_w=16
66: (bf) r1 = r5 ; R1_w=trusted_ptr_mptcp_sched_data(off=0,imm=0) R5_w=trusted_ptr_mptcp_sched_data(off=0,imm=0)
67: (0f) r1 += r2 ; R1_w=trusted_ptr_mptcp_sched_data(off=16,imm=0) R2_w=16
68: (b7) r9 = 0 ; R9_w=0
; for (i = 0; i < MPTCP_SUBFLOWS_MAX; i++) {
69: (07) r5 += 8 ; R5_w=trusted_ptr_mptcp_sched_data(off=8,imm=0)
70: (7b) *(u64 *)(r10 -48) = r5 ; R5_w=trusted_ptr_mptcp_sched_data(off=8,imm=0) R10=fp0 fp-48_w=trusted_ptr_
71: (b7) r6 = 0 ; R6_w=0
72: (05) goto pc+27
; subflow = data->contexts[i];
100: (0f) r1 += r9 ; R1_w=trusted_ptr_mptcp_sched_data(off=16,imm=0) R9=0
101: (79) r7 = *(u64 *)(r1 +0) ; R1_w=trusted_ptr_mptcp_sched_data(off=16,imm=0) R7_w=ptr_mptcp_subflow_context(off=0,imm=0)
; return subflow->tcp_sock;
102: (79) r8 = *(u64 *)(r7 +192) ; R7_w=ptr_mptcp_subflow_context(off=0,imm=0) R8_w=ptr_sock(off=0,imm=0)
; if (!mptcp_subflow_active(subflow))
103: (bf) r1 = r7 ; R1_w=ptr_mptcp_subflow_context(off=0,imm=0) R7_w=ptr_mptcp_subflow_context(off=0,imm=0)
104: (85) call mptcp_subflow_active#153119 ; R0_w=scalar()
; if (!mptcp_subflow_active(subflow))
105: (16) if w0 == 0x0 goto pc+36 ; R0_w=scalar()
; pace = subflow->avg_pacing_rate;
106: (79) r1 = *(u64 *)(r7 +16) ; R1_w=scalar() R7_w=ptr_mptcp_subflow_context(off=0,imm=0)
; pace = subflow->avg_pacing_rate;
107: (bf) r2 = r1 ; R1_w=scalar(id=127) R2_w=scalar(id=127)
108: (67) r2 <<= 32 ; R2_w=scalar(smax=9223372032559808512,umax=18446744069414584320,var_off=(0x0; 0xffffffff00000000),s32_min=0,s32_max=0,u32_max=0)
109: (77) r2 >>= 32 ; R2=scalar(umax=4294967295,var_off=(0x0; 0xffffffff))
; if (!pace) {
110: (56) if w1 != 0x0 goto pc+7 ; R1=scalar(id=127,smax=9223372032559808512,umax=18446744069414584320,var_off=(0x0; 0xffffffff00000000),s32_min=0,s32_max=0,u32_max=0)
; subflow->avg_pacing_rate = ssk->sk_pacing_rate;
111: (79) r1 = *(u64 *)(r8 +456) ; R1_w=scalar() R8=ptr_sock(off=0,imm=0)
; subflow->avg_pacing_rate = ssk->sk_pacing_rate;
112: (7b) *(u64 *)(r7 +16) = r1 ; R1_w=scalar() R7=ptr_mptcp_subflow_context(off=0,imm=0)
; pace = subflow->avg_pacing_rate;
113: (79) r1 = *(u64 *)(r7 +16) ; R1_w=scalar() R7=ptr_mptcp_subflow_context(off=0,imm=0)
; pace = subflow->avg_pacing_rate;
114: (bf) r2 = r1 ; R1_w=scalar(id=128) R2_w=scalar(id=128)
115: (67) r2 <<= 32 ; R2_w=scalar(smax=9223372032559808512,umax=18446744069414584320,var_off=(0x0; 0xffffffff00000000),s32_min=0,s32_max=0,u32_max=0)
116: (77) r2 >>= 32 ; R2_w=scalar(umax=4294967295,var_off=(0x0; 0xffffffff))
; if (!pace)
117: (16) if w1 == 0x0 goto pc+24 ; R1_w=scalar(id=128)
; linger_time = div_u64((__u64)ssk->sk_wmem_queued << 32, pace);
118: (61) r1 = *(u32 *)(r8 +336) ; R1_w=scalar(umax=4294967295,var_off=(0x0; 0xffffffff)) R8=ptr_sock(off=0,imm=0)
; linger_time = div_u64((__u64)ssk->sk_wmem_queued << 32, pace);
119: (67) r1 <<= 32 ; R1_w=scalar(smax=9223372032559808512,umax=18446744069414584320,var_off=(0x0; 0xffffffff00000000),s32_min=0,s32_max=0,u32_max=0)
; return dividend / divisor;
120: (3f) r1 /= r2 ; R1_w=scalar() R2=scalar(umax=4294967295,var_off=(0x0; 0xffffffff))
; if (linger_time < send_info[subflow->backup].linger_time) {
121: (71) r2 = *(u8 *)(r7 +88) ; R2_w=scalar(umax=255,var_off=(0x0; 0xff)) R7=ptr_mptcp_subflow_context(off=0,imm=0)
; if (linger_time < send_info[subflow->backup].linger_time) {
122: (57) r2 &= 1 ; R2_w=scalar(umax=1,var_off=(0x0; 0x1))
; if (linger_time < send_info[subflow->backup].linger_time) {
123: (67) r2 <<= 4 ; R2_w=scalar(umax=16,var_off=(0x0; 0x10))
124: (bf) r3 = r10 ; R3_w=fp0 R10=fp0
;
125: (07) r3 += -32 ; R3_w=fp-32
; if (linger_time < send_info[subflow->backup].linger_time) {
126: (0f) r3 += r2 ; R2_w=scalar(umax=16,var_off=(0x0; 0x10)) R3_w=fp(off=-32,umax=16,var_off=(0x0; 0x10))
127: (79) r2 = *(u64 *)(r3 +8) ; R2_w=scalar() R3_w=fp(off=-32,umax=16,var_off=(0x0; 0x10)) fp-24=-1
; if (linger_time < send_info[subflow->backup].linger_time) {
128: (3d) if r1 >= r2 goto pc+13 ; R1_w=scalar() R2_w=scalar()
; send_info[subflow->backup].subflow_id = i;
129: (71) r2 = *(u8 *)(r7 +88) ; R2_w=scalar(umax=255,var_off=(0x0; 0xff)) R7=ptr_mptcp_subflow_context(off=0,imm=0)
; send_info[subflow->backup].subflow_id = i;
130: (57) r2 &= 1 ; R2_w=scalar(umax=1,var_off=(0x0; 0x1))
; send_info[subflow->backup].subflow_id = i;
131: (67) r2 <<= 4 ; R2_w=scalar(umax=16,var_off=(0x0; 0x10))
132: (bf) r3 = r10 ; R3_w=fp0 R10=fp0
; send_info[subflow->backup].subflow_id = i;
133: (07) r3 += -32 ; R3_w=fp-32
; send_info[subflow->backup].subflow_id = i;
134: (bf) r4 = r3 ; R3_w=fp-32 R4_w=fp-32
135: (0f) r4 += r2 ; R2_w=scalar(umax=16,var_off=(0x0; 0x10)) R4_w=fp(off=-32,umax=16,var_off=(0x0; 0x10))
; send_info[subflow->backup].subflow_id = i;
136: (63) *(u32 *)(r4 +0) = r6 ; R4_w=fp(off=-32,umax=16,var_off=(0x0; 0x10)) R6=0 fp-16=????mmmm fp-24=mmmmmmmm fp-32=mmmmmmmm
; send_info[subflow->backup].linger_time = linger_time;
137: (71) r2 = *(u8 *)(r7 +88) ; R2_w=scalar(umax=255,var_off=(0x0; 0xff)) R7=ptr_mptcp_subflow_context(off=0,imm=0)
; send_info[subflow->backup].linger_time = linger_time;
138: (57) r2 &= 1 ; R2_w=scalar(umax=1,var_off=(0x0; 0x1))
; send_info[subflow->backup].linger_time = linger_time;
139: (67) r2 <<= 4 ; R2_w=scalar(umax=16,var_off=(0x0; 0x10))
140: (0f) r3 += r2 ; R2_w=scalar(umax=16,var_off=(0x0; 0x10)) R3_w=fp(off=-32,umax=16,var_off=(0x0; 0x10))
; send_info[subflow->backup].linger_time = linger_time;
141: (7b) *(u64 *)(r3 +8) = r1 ; R1_w=scalar() R3_w=fp(off=-32,umax=16,var_off=(0x0; 0x10)) fp-8=mmmmmmmm fp-16=mmmmmmmm fp-24=mmmmmmmm
; for (i = 0; i < MPTCP_SUBFLOWS_MAX; i++) {
142: (55) if r6 != 0x7 goto pc-54 ; R6=0
; mptcp_set_timeout(sk);
89: (79) r1 = *(u64 *)(r10 -40) ; R1_w=trusted_ptr_mptcp_sched_data(off=0,imm=0) R10=fp0 fp-40=trusted_ptr_
90: (b7) r3 = 16 ; R3_w=16
91: (0f) r1 += r3 ; R1_w=trusted_ptr_mptcp_sched_data(off=16,imm=0) R3_w=16
; if (!data->contexts[i])
92: (bf) r2 = r9 ; R2_w=0 R9=0
93: (0f) r2 += r3 ; R2_w=16 R3_w=16
94: (79) r3 = *(u64 *)(r10 -48) ; R3_w=trusted_ptr_mptcp_sched_data(off=8,imm=0) R10=fp0 fp-48=trusted_ptr_
95: (0f) r3 += r2 ; R2_w=16 R3_w=trusted_ptr_mptcp_sched_data(off=24,imm=0)
; for (i = 0; i < MPTCP_SUBFLOWS_MAX; i++) {
96: (07) r6 += 1 ; R6_w=1
; if (!data->contexts[i])
97: (07) r9 += 8 ; R9_w=8
; if (!data->contexts[i])
98: (79) r2 = *(u64 *)(r3 +0) ; R2_w=ptr_mptcp_subflow_context(off=0,imm=0) R3_w=trusted_ptr_mptcp_sched_data(off=24,imm=0)
; if (!data->contexts[i])
99: (15) if r2 == 0x0 goto pc+43 ; R2_w=ptr_mptcp_subflow_context(off=0,imm=0)
; subflow = data->contexts[i];
100: (0f) r1 += r9 ; R1_w=trusted_ptr_mptcp_sched_data(off=24,imm=0) R9_w=8
101: (79) r7 = *(u64 *)(r1 +0) ; R1_w=trusted_ptr_mptcp_sched_data(off=24,imm=0) R7_w=ptr_mptcp_subflow_context(off=0,imm=0)
; return subflow->tcp_sock;
102: (79) r8 = *(u64 *)(r7 +192) ; R7_w=ptr_mptcp_subflow_context(off=0,imm=0) R8_w=ptr_sock(off=0,imm=0)
; if (!mptcp_subflow_active(subflow))
103: (bf) r1 = r7 ; R1_w=ptr_mptcp_subflow_context(off=0,imm=0) R7_w=ptr_mptcp_subflow_context(off=0,imm=0)
104: (85) call mptcp_subflow_active#153119 ; R0=scalar()
; if (!mptcp_subflow_active(subflow))
105: (16) if w0 == 0x0 goto pc+36 ; R0=scalar()
; pace = subflow->avg_pacing_rate;
106: (79) r1 = *(u64 *)(r7 +16) ; R1_w=scalar() R7=ptr_mptcp_subflow_context(off=0,imm=0)
; pace = subflow->avg_pacing_rate;
107: (bf) r2 = r1 ; R1_w=scalar(id=130) R2_w=scalar(id=130)
108: (67) r2 <<= 32 ; R2_w=scalar(smax=9223372032559808512,umax=18446744069414584320,var_off=(0x0; 0xffffffff00000000),s32_min=0,s32_max=0,u32_max=0)
109: (77) r2 >>= 32 ; R2_w=scalar(umax=4294967295,var_off=(0x0; 0xffffffff))
; if (!pace) {
110: (56) if w1 != 0x0 goto pc+7 ; R1_w=scalar(id=130,smax=9223372032559808512,umax=18446744069414584320,var_off=(0x0; 0xffffffff00000000),s32_min=0,s32_max=0,u32_max=0)
; subflow->avg_pacing_rate = ssk->sk_pacing_rate;
111: (79) r1 = *(u64 *)(r8 +456) ; R1_w=scalar() R8=ptr_sock(off=0,imm=0)
; subflow->avg_pacing_rate = ssk->sk_pacing_rate;
112: (7b) *(u64 *)(r7 +16) = r1 ; R1_w=scalar() R7=ptr_mptcp_subflow_context(off=0,imm=0)
; pace = subflow->avg_pacing_rate;
113: (79) r1 = *(u64 *)(r7 +16) ; R1_w=scalar() R7=ptr_mptcp_subflow_context(off=0,imm=0)
; pace = subflow->avg_pacing_rate;
114: (bf) r2 = r1 ; R1_w=scalar(id=131) R2_w=scalar(id=131)
115: (67) r2 <<= 32 ; R2_w=scalar(smax=9223372032559808512,umax=18446744069414584320,var_off=(0x0; 0xffffffff00000000),s32_min=0,s32_max=0,u32_max=0)
116: (77) r2 >>= 32 ; R2=scalar(umax=4294967295,var_off=(0x0; 0xffffffff))
; if (!pace)
117: (16) if w1 == 0x0 goto pc+24 ; R1=scalar(id=131)
; linger_time = div_u64((__u64)ssk->sk_wmem_queued << 32, pace);
118: (61) r1 = *(u32 *)(r8 +336) ; R1_w=scalar(umax=4294967295,var_off=(0x0; 0xffffffff)) R8=ptr_sock(off=0,imm=0)
; linger_time = div_u64((__u64)ssk->sk_wmem_queued << 32, pace);
119: (67) r1 <<= 32 ; R1_w=scalar(smax=9223372032559808512,umax=18446744069414584320,var_off=(0x0; 0xffffffff00000000),s32_min=0,s32_max=0,u32_max=0)
; return dividend / divisor;
120: (3f) r1 /= r2 ; R1_w=scalar() R2=scalar(umax=4294967295,var_off=(0x0; 0xffffffff))
; if (linger_time < send_info[subflow->backup].linger_time) {
121: (71) r2 = *(u8 *)(r7 +88) ; R2_w=scalar(umax=255,var_off=(0x0; 0xff)) R7=ptr_mptcp_subflow_context(off=0,imm=0)
; if (linger_time < send_info[subflow->backup].linger_time) {
122: (57) r2 &= 1 ; R2_w=scalar(umax=1,var_off=(0x0; 0x1))
; if (linger_time < send_info[subflow->backup].linger_time) {
123: (67) r2 <<= 4 ; R2_w=scalar(umax=16,var_off=(0x0; 0x10))
124: (bf) r3 = r10 ; R3_w=fp0 R10=fp0
;
125: (07) r3 += -32 ; R3_w=fp-32
; if (linger_time < send_info[subflow->backup].linger_time) {
126: (0f) r3 += r2 ; R2_w=scalar(umax=16,var_off=(0x0; 0x10)) R3_w=fp(off=-32,umax=16,var_off=(0x0; 0x10))
127: (79) r2 = *(u64 *)(r3 +8) ; R2_w=scalar() R3_w=fp(off=-32,umax=16,var_off=(0x0; 0x10)) fp-24=mmmmmmmm
; if (linger_time < send_info[subflow->backup].linger_time) {
128: (3d) if r1 >= r2 goto pc+13 ; R1_w=scalar() R2_w=scalar()
; send_info[subflow->backup].subflow_id = i;
129: (71) r2 = *(u8 *)(r7 +88) ; R2_w=scalar(umax=255,var_off=(0x0; 0xff)) R7=ptr_mptcp_subflow_context(off=0,imm=0)
; send_info[subflow->backup].subflow_id = i;
130: (57) r2 &= 1 ; R2_w=scalar(umax=1,var_off=(0x0; 0x1))
; send_info[subflow->backup].subflow_id = i;
131: (67) r2 <<= 4 ; R2_w=scalar(umax=16,var_off=(0x0; 0x10))
132: (bf) r3 = r10 ; R3_w=fp0 R10=fp0
; send_info[subflow->backup].subflow_id = i;
133: (07) r3 += -32 ; R3_w=fp-32
; send_info[subflow->backup].subflow_id = i;
134: (bf) r4 = r3 ; R3_w=fp-32 R4_w=fp-32
135: (0f) r4 += r2 ; R2_w=scalar(umax=16,var_off=(0x0; 0x10)) R4_w=fp(off=-32,umax=16,var_off=(0x0; 0x10))
; send_info[subflow->backup].subflow_id = i;
136: (63) *(u32 *)(r4 +0) = r6 ; R4_w=fp(off=-32,umax=16,var_off=(0x0; 0x10)) R6=1 fp-16=mmmmmmmm fp-24=mmmmmmmm fp-32=mmmmmmmm
; send_info[subflow->backup].linger_time = linger_time;
137: (71) r2 = *(u8 *)(r7 +88) ; R2_w=scalar(umax=255,var_off=(0x0; 0xff)) R7=ptr_mptcp_subflow_context(off=0,imm=0)
; send_info[subflow->backup].linger_time = linger_time;
138: (57) r2 &= 1 ; R2_w=scalar(umax=1,var_off=(0x0; 0x1))
; send_info[subflow->backup].linger_time = linger_time;
139: (67) r2 <<= 4 ; R2_w=scalar(umax=16,var_off=(0x0; 0x10))
140: (0f) r3 += r2 ; R2_w=scalar(umax=16,var_off=(0x0; 0x10)) R3_w=fp(off=-32,umax=16,var_off=(0x0; 0x10))
; send_info[subflow->backup].linger_time = linger_time;
141: (7b) *(u64 *)(r3 +8) = r1 ; R1=scalar() R3=fp(off=-32,umax=16,var_off=(0x0; 0x10)) fp-8=mmmmmmmm fp-16=mmmmmmmm fp-24=mmmmmmmm
; for (i = 0; i < MPTCP_SUBFLOWS_MAX; i++) {
142: (55) if r6 != 0x7 goto pc-54 ; R6=1
; mptcp_set_timeout(sk);
89: (79) r1 = *(u64 *)(r10 -40) ; R1_w=trusted_ptr_mptcp_sched_data(off=0,imm=0) R10=fp0 fp-40=trusted_ptr_
90: (b7) r3 = 16 ; R3_w=16
91: (0f) r1 += r3 ; R1_w=trusted_ptr_mptcp_sched_data(off=16,imm=0) R3_w=16
; if (!data->contexts[i])
92: (bf) r2 = r9 ; R2_w=8 R9=8
93: (0f) r2 += r3 ; R2_w=24 R3_w=16
94: (79) r3 = *(u64 *)(r10 -48) ; R3_w=trusted_ptr_mptcp_sched_data(off=8,imm=0) R10=fp0 fp-48=trusted_ptr_
95: (0f) r3 += r2 ; R2_w=24 R3_w=trusted_ptr_mptcp_sched_data(off=32,imm=0)
; for (i = 0; i < MPTCP_SUBFLOWS_MAX; i++) {
96: (07) r6 += 1 ; R6_w=2
; if (!data->contexts[i])
97: (07) r9 += 8 ; R9_w=16
; if (!data->contexts[i])
98: (79) r2 = *(u64 *)(r3 +0) ; R2_w=ptr_mptcp_subflow_context(off=0,imm=0) R3_w=trusted_ptr_mptcp_sched_data(off=32,imm=0)
; if (!data->contexts[i])
99: (15) if r2 == 0x0 goto pc+43 ; R2_w=ptr_mptcp_subflow_context(off=0,imm=0)
; subflow = data->contexts[i];
100: (0f) r1 += r9 ; R1_w=trusted_ptr_mptcp_sched_data(off=32,imm=0) R9_w=16
101: (79) r7 = *(u64 *)(r1 +0) ; R1_w=trusted_ptr_mptcp_sched_data(off=32,imm=0) R7_w=ptr_mptcp_subflow_context(off=0,imm=0)
; return subflow->tcp_sock;
102: (79) r8 = *(u64 *)(r7 +192) ; R7_w=ptr_mptcp_subflow_context(off=0,imm=0) R8_w=ptr_sock(off=0,imm=0)
; if (!mptcp_subflow_active(subflow))
103: (bf) r1 = r7 ; R1_w=ptr_mptcp_subflow_context(off=0,imm=0) R7_w=ptr_mptcp_subflow_context(off=0,imm=0)
104: (85) call mptcp_subflow_active#153119 ; R0_w=scalar()
; if (!mptcp_subflow_active(subflow))
105: (16) if w0 == 0x0 goto pc+36 ; R0_w=scalar()
; pace = subflow->avg_pacing_rate;
106: (79) r1 = *(u64 *)(r7 +16) ; R1_w=scalar() R7_w=ptr_mptcp_subflow_context(off=0,imm=0)
; pace = subflow->avg_pacing_rate;
107: (bf) r2 = r1 ; R1_w=scalar(id=133) R2_w=scalar(id=133)
108: (67) r2 <<= 32 ; R2_w=scalar(smax=9223372032559808512,umax=18446744069414584320,var_off=(0x0; 0xffffffff00000000),s32_min=0,s32_max=0,u32_max=0)
109: (77) r2 >>= 32 ; R2_w=scalar(umax=4294967295,var_off=(0x0; 0xffffffff))
; if (!pace) {
110: (56) if w1 != 0x0 goto pc+7 ; R1_w=scalar(id=133,smax=9223372032559808512,umax=18446744069414584320,var_off=(0x0; 0xffffffff00000000),s32_min=0,s32_max=0,u32_max=0)
; subflow->avg_pacing_rate = ssk->sk_pacing_rate;
111: (79) r1 = *(u64 *)(r8 +456) ; R1_w=scalar() R8_w=ptr_sock(off=0,imm=0)
; subflow->avg_pacing_rate = ssk->sk_pacing_rate;
112: (7b) *(u64 *)(r7 +16) = r1 ; R1_w=scalar() R7_w=ptr_mptcp_subflow_context(off=0,imm=0)
; pace = subflow->avg_pacing_rate;
113: (79) r1 = *(u64 *)(r7 +16) ; R1_w=scalar() R7_w=ptr_mptcp_subflow_context(off=0,imm=0)
; pace = subflow->avg_pacing_rate;
114: (bf) r2 = r1 ; R1_w=scalar(id=134) R2_w=scalar(id=134)
115: (67) r2 <<= 32 ; R2_w=scalar(smax=9223372032559808512,umax=18446744069414584320,var_off=(0x0; 0xffffffff00000000),s32_min=0,s32_max=0,u32_max=0)
116: (77) r2 >>= 32 ; R2_w=scalar(umax=4294967295,var_off=(0x0; 0xffffffff))
; if (!pace)
117: (16) if w1 == 0x0 goto pc+24 ; R1_w=scalar(id=134)
; linger_time = div_u64((__u64)ssk->sk_wmem_queued << 32, pace);
118: (61) r1 = *(u32 *)(r8 +336) ; R1_w=scalar(umax=4294967295,var_off=(0x0; 0xffffffff)) R8_w=ptr_sock(off=0,imm=0)
; linger_time = div_u64((__u64)ssk->sk_wmem_queued << 32, pace);
119: (67) r1 <<= 32 ; R1_w=scalar(smax=9223372032559808512,umax=18446744069414584320,var_off=(0x0; 0xffffffff00000000),s32_min=0,s32_max=0,u32_max=0)
; return dividend / divisor;
120: (3f) r1 /= r2 ; R1_w=scalar() R2_w=scalar(umax=4294967295,var_off=(0x0; 0xffffffff))
; if (linger_time < send_info[subflow->backup].linger_time) {
121: (71) r2 = *(u8 *)(r7 +88) ; R2_w=scalar(umax=255,var_off=(0x0; 0xff)) R7_w=ptr_mptcp_subflow_context(off=0,imm=0)
; if (linger_time < send_info[subflow->backup].linger_time) {
122: (57) r2 &= 1 ; R2_w=scalar(umax=1,var_off=(0x0; 0x1))
; if (linger_time < send_info[subflow->backup].linger_time) {
123: (67) r2 <<= 4 ; R2_w=scalar(umax=16,var_off=(0x0; 0x10))
124: (bf) r3 = r10 ; R3_w=fp0 R10=fp0
;
125: (07) r3 += -32 ; R3_w=fp-32
; if (linger_time < send_info[subflow->backup].linger_time) {
126: (0f) r3 += r2 ; R2_w=scalar(umax=16,var_off=(0x0; 0x10)) R3_w=fp(off=-32,umax=16,var_off=(0x0; 0x10))
127: (79) r2 = *(u64 *)(r3 +8) ; R2=scalar() R3=fp(off=-32,umax=16,var_off=(0x0; 0x10)) fp-24=mmmmmmmm
; if (linger_time < send_info[subflow->backup].linger_time) {
128: (3d) if r1 >= r2 goto pc+13 ; R1=scalar() R2=scalar()
; send_info[subflow->backup].subflow_id = i;
129: (71) r2 = *(u8 *)(r7 +88) ; R2_w=scalar(umax=255,var_off=(0x0; 0xff)) R7=ptr_mptcp_subflow_context(off=0,imm=0)
; send_info[subflow->backup].subflow_id = i;
130: (57) r2 &= 1 ; R2_w=scalar(umax=1,var_off=(0x0; 0x1))
; send_info[subflow->backup].subflow_id = i;
131: (67) r2 <<= 4 ; R2_w=scalar(umax=16,var_off=(0x0; 0x10))
132: (bf) r3 = r10 ; R3_w=fp0 R10=fp0
; send_info[subflow->backup].subflow_id = i;
133: (07) r3 += -32 ; R3_w=fp-32
; send_info[subflow->backup].subflow_id = i;
134: (bf) r4 = r3 ; R3_w=fp-32 R4_w=fp-32
135: (0f) r4 += r2 ; R2_w=scalar(umax=16,var_off=(0x0; 0x10)) R4_w=fp(off=-32,umax=16,var_off=(0x0; 0x10))
; send_info[subflow->backup].subflow_id = i;
136: (63) *(u32 *)(r4 +0) = r6 ; R4_w=fp(off=-32,umax=16,var_off=(0x0; 0x10)) R6=2 fp-16=mmmmmmmm fp-24=mmmmmmmm fp-32=mmmmmmmm
; send_info[subflow->backup].linger_time = linger_time;
137: (71) r2 = *(u8 *)(r7 +88) ; R2_w=scalar(umax=255,var_off=(0x0; 0xff)) R7=ptr_mptcp_subflow_context(off=0,imm=0)
; send_info[subflow->backup].linger_time = linger_time;
138: (57) r2 &= 1 ; R2_w=scalar(umax=1,var_off=(0x0; 0x1))
; send_info[subflow->backup].linger_time = linger_time;
139: (67) r2 <<= 4 ; R2_w=scalar(umax=16,var_off=(0x0; 0x10))
140: (0f) r3 += r2 ; R2_w=scalar(umax=16,var_off=(0x0; 0x10)) R3_w=fp(off=-32,umax=16,var_off=(0x0; 0x10))
; send_info[subflow->backup].linger_time = linger_time;
141: (7b) *(u64 *)(r3 +8) = r1 ; R1=scalar() R3_w=fp(off=-32,umax=16,var_off=(0x0; 0x10)) fp-8=mmmmmmmm fp-16=mmmmmmmm fp-24=mmmmmmmm
; for (i = 0; i < MPTCP_SUBFLOWS_MAX; i++) {
142: (55) if r6 != 0x7 goto pc-54 ; R6=2
; mptcp_set_timeout(sk);
89: (79) r1 = *(u64 *)(r10 -40) ; R1_w=trusted_ptr_mptcp_sched_data(off=0,imm=0) R10=fp0 fp-40=trusted_ptr_
90: (b7) r3 = 16 ; R3_w=16
91: (0f) r1 += r3 ; R1_w=trusted_ptr_mptcp_sched_data(off=16,imm=0) R3_w=16
; if (!data->contexts[i])
92: (bf) r2 = r9 ; R2_w=16 R9=16
93: (0f) r2 += r3 ; R2_w=32 R3_w=16
94: (79) r3 = *(u64 *)(r10 -48) ; R3_w=trusted_ptr_mptcp_sched_data(off=8,imm=0) R10=fp0 fp-48=trusted_ptr_
95: (0f) r3 += r2 ; R2_w=32 R3_w=trusted_ptr_mptcp_sched_data(off=40,imm=0)
; for (i = 0; i < MPTCP_SUBFLOWS_MAX; i++) {
96: (07) r6 += 1 ; R6_w=3
; if (!data->contexts[i])
97: (07) r9 += 8 ; R9_w=24
; if (!data->contexts[i])
98: (79) r2 = *(u64 *)(r3 +0) ; R2=ptr_mptcp_subflow_context(off=0,imm=0) R3=trusted_ptr_mptcp_sched_data(off=40,imm=0)
; if (!data->contexts[i])
99: (15) if r2 == 0x0 goto pc+43 ; R2=ptr_mptcp_subflow_context(off=0,imm=0)
; subflow = data->contexts[i];
100: (0f) r1 += r9 ; R1_w=trusted_ptr_mptcp_sched_data(off=40,imm=0) R9=24
101: (79) r7 = *(u64 *)(r1 +0) ; R1_w=trusted_ptr_mptcp_sched_data(off=40,imm=0) R7_w=ptr_mptcp_subflow_context(off=0,imm=0)
; return subflow->tcp_sock;
102: (79) r8 = *(u64 *)(r7 +192) ; R7_w=ptr_mptcp_subflow_context(off=0,imm=0) R8_w=ptr_sock(off=0,imm=0)
; if (!mptcp_subflow_active(subflow))
103: (bf) r1 = r7 ; R1_w=ptr_mptcp_subflow_context(off=0,imm=0) R7_w=ptr_mptcp_subflow_context(off=0,imm=0)
104: (85) call mptcp_subflow_active#153119 ; R0_w=scalar()
; if (!mptcp_subflow_active(subflow))
105: (16) if w0 == 0x0 goto pc+36 ; R0_w=scalar()
; pace = subflow->avg_pacing_rate;
106: (79) r1 = *(u64 *)(r7 +16) ; R1_w=scalar() R7_w=ptr_mptcp_subflow_context(off=0,imm=0)
; pace = subflow->avg_pacing_rate;
107: (bf) r2 = r1 ; R1_w=scalar(id=136) R2_w=scalar(id=136)
108: (67) r2 <<= 32 ; R2_w=scalar(smax=9223372032559808512,umax=18446744069414584320,var_off=(0x0; 0xffffffff00000000),s32_min=0,s32_max=0,u32_max=0)
109: (77) r2 >>= 32 ; R2_w=scalar(umax=4294967295,var_off=(0x0; 0xffffffff))
; if (!pace) {
110: (56) if w1 != 0x0 goto pc+7 ; R1_w=scalar(id=136,smax=9223372032559808512,umax=18446744069414584320,var_off=(0x0; 0xffffffff00000000),s32_min=0,s32_max=0,u32_max=0)
; subflow->avg_pacing_rate = ssk->sk_pacing_rate;
111: (79) r1 = *(u64 *)(r8 +456) ; R1_w=scalar() R8_w=ptr_sock(off=0,imm=0)
; subflow->avg_pacing_rate = ssk->sk_pacing_rate;
112: (7b) *(u64 *)(r7 +16) = r1 ; R1_w=scalar() R7_w=ptr_mptcp_subflow_context(off=0,imm=0)
; pace = subflow->avg_pacing_rate;
113: (79) r1 = *(u64 *)(r7 +16) ; R1_w=scalar() R7_w=ptr_mptcp_subflow_context(off=0,imm=0)
; pace = subflow->avg_pacing_rate;
114: (bf) r2 = r1 ; R1_w=scalar(id=137) R2_w=scalar(id=137)
115: (67) r2 <<= 32 ; R2_w=scalar(smax=9223372032559808512,umax=18446744069414584320,var_off=(0x0; 0xffffffff00000000),s32_min=0,s32_max=0,u32_max=0)
116: (77) r2 >>= 32 ; R2_w=scalar(umax=4294967295,var_off=(0x0; 0xffffffff))
; if (!pace)
117: (16) if w1 == 0x0 goto pc+24 ; R1_w=scalar(id=137)
; linger_time = div_u64((__u64)ssk->sk_wmem_queued << 32, pace);
118: (61) r1 = *(u32 *)(r8 +336) ; R1_w=scalar(umax=4294967295,var_off=(0x0; 0xffffffff)) R8_w=ptr_sock(off=0,imm=0)
; linger_time = div_u64((__u64)ssk->sk_wmem_queued << 32, pace);
119: (67) r1 <<= 32 ; R1_w=scalar(smax=9223372032559808512,umax=18446744069414584320,var_off=(0x0; 0xffffffff00000000),s32_min=0,s32_max=0,u32_max=0)
; return dividend / divisor;
120: (3f) r1 /= r2 ; R1_w=scalar() R2_w=scalar(umax=4294967295,var_off=(0x0; 0xffffffff))
; if (linger_time < send_info[subflow->backup].linger_time) {
121: (71) r2 = *(u8 *)(r7 +88) ; R2_w=scalar(umax=255,var_off=(0x0; 0xff)) R7_w=ptr_mptcp_subflow_context(off=0,imm=0)
; if (linger_time < send_info[subflow->backup].linger_time) {
122: (57) r2 &= 1 ; R2_w=scalar(umax=1,var_off=(0x0; 0x1))
; if (linger_time < send_info[subflow->backup].linger_time) {
123: (67) r2 <<= 4 ; R2_w=scalar(umax=16,var_off=(0x0; 0x10))
124: (bf) r3 = r10 ; R3_w=fp0 R10=fp0
;
125: (07) r3 += -32 ; R3_w=fp-32
; if (linger_time < send_info[subflow->backup].linger_time) {
126: (0f) r3 += r2 ; R2_w=scalar(umax=16,var_off=(0x0; 0x10)) R3_w=fp(off=-32,umax=16,var_off=(0x0; 0x10))
127: (79) r2 = *(u64 *)(r3 +8) ; R2_w=scalar() R3_w=fp(off=-32,umax=16,var_off=(0x0; 0x10)) fp-24=mmmmmmmm
; if (linger_time < send_info[subflow->backup].linger_time) {
128: (3d) if r1 >= r2 goto pc+13 ; R1_w=scalar() R2_w=scalar()
; send_info[subflow->backup].subflow_id = i;
129: (71) r2 = *(u8 *)(r7 +88) ; R2_w=scalar(umax=255,var_off=(0x0; 0xff)) R7_w=ptr_mptcp_subflow_context(off=0,imm=0)
; send_info[subflow->backup].subflow_id = i;
130: (57) r2 &= 1 ; R2_w=scalar(umax=1,var_off=(0x0; 0x1))
; send_info[subflow->backup].subflow_id = i;
131: (67) r2 <<= 4 ; R2_w=scalar(umax=16,var_off=(0x0; 0x10))
132: (bf) r3 = r10 ; R3_w=fp0 R10=fp0
; send_info[subflow->backup].subflow_id = i;
133: (07) r3 += -32 ; R3_w=fp-32
; send_info[subflow->backup].subflow_id = i;
134: (bf) r4 = r3 ; R3_w=fp-32 R4_w=fp-32
135: (0f) r4 += r2 ; R2_w=scalar(umax=16,var_off=(0x0; 0x10)) R4_w=fp(off=-32,umax=16,var_off=(0x0; 0x10))
; send_info[subflow->backup].subflow_id = i;
136: (63) *(u32 *)(r4 +0) = r6 ; R4_w=fp(off=-32,umax=16,var_off=(0x0; 0x10)) R6=3 fp-16=mmmmmmmm fp-24=mmmmmmmm fp-32=mmmmmmmm
; send_info[subflow->backup].linger_time = linger_time;
137: (71) r2 = *(u8 *)(r7 +88) ; R2_w=scalar(umax=255,var_off=(0x0; 0xff)) R7_w=ptr_mptcp_subflow_context(off=0,imm=0)
; send_info[subflow->backup].linger_time = linger_time;
138: (57) r2 &= 1 ; R2_w=scalar(umax=1,var_off=(0x0; 0x1))
; send_info[subflow->backup].linger_time = linger_time;
139: (67) r2 <<= 4 ; R2_w=scalar(umax=16,var_off=(0x0; 0x10))
140: (0f) r3 += r2 ; R2_w=scalar(umax=16,var_off=(0x0; 0x10)) R3_w=fp(off=-32,umax=16,var_off=(0x0; 0x10))
; send_info[subflow->backup].linger_time = linger_time;
141: (7b) *(u64 *)(r3 +8) = r1 ; R1_w=scalar() R3_w=fp(off=-32,umax=16,var_off=(0x0; 0x10)) fp-8=mmmmmmmm fp-16=mmmmmmmm fp-24=mmmmmmmm
; for (i = 0; i < MPTCP_SUBFLOWS_MAX; i++) {
142: (55) if r6 != 0x7 goto pc-54 ; R6=3
; mptcp_set_timeout(sk);
89: (79) r1 = *(u64 *)(r10 -40) ; R1_w=trusted_ptr_mptcp_sched_data(off=0,imm=0) R10=fp0 fp-40=trusted_ptr_
90: (b7) r3 = 16 ; R3_w=16
91: (0f) r1 += r3 ; R1_w=trusted_ptr_mptcp_sched_data(off=16,imm=0) R3_w=16
; if (!data->contexts[i])
92: (bf) r2 = r9 ; R2_w=24 R9=24
93: (0f) r2 += r3 ; R2_w=40 R3_w=16
94: (79) r3 = *(u64 *)(r10 -48) ; R3_w=trusted_ptr_mptcp_sched_data(off=8,imm=0) R10=fp0 fp-48=trusted_ptr_
95: (0f) r3 += r2 ; R2_w=40 R3_w=trusted_ptr_mptcp_sched_data(off=48,imm=0)
; for (i = 0; i < MPTCP_SUBFLOWS_MAX; i++) {
96: (07) r6 += 1 ; R6_w=4
; if (!data->contexts[i])
97: (07) r9 += 8 ; R9_w=32
; if (!data->contexts[i])
98: (79) r2 = *(u64 *)(r3 +0) ; R2_w=ptr_mptcp_subflow_context(off=0,imm=0) R3_w=trusted_ptr_mptcp_sched_data(off=48,imm=0)
; if (!data->contexts[i])
99: (15) if r2 == 0x0 goto pc+43 ; R2_w=ptr_mptcp_subflow_context(off=0,imm=0)
; subflow = data->contexts[i];
100: (0f) r1 += r9 ; R1_w=trusted_ptr_mptcp_sched_data(off=48,imm=0) R9_w=32
101: (79) r7 = *(u64 *)(r1 +0) ; R1_w=trusted_ptr_mptcp_sched_data(off=48,imm=0) R7_w=ptr_mptcp_subflow_context(off=0,imm=0)
; return subflow->tcp_sock;
102: (79) r8 = *(u64 *)(r7 +192) ; R7_w=ptr_mptcp_subflow_context(off=0,imm=0) R8_w=ptr_sock(off=0,imm=0)
; if (!mptcp_subflow_active(subflow))
103: (bf) r1 = r7 ; R1_w=ptr_mptcp_subflow_context(off=0,imm=0) R7_w=ptr_mptcp_subflow_context(off=0,imm=0)
104: (85) call mptcp_subflow_active#153119 ; R0_w=scalar()
; if (!mptcp_subflow_active(subflow))
105: (16) if w0 == 0x0 goto pc+36 ; R0_w=scalar()
; pace = subflow->avg_pacing_rate;
106: (79) r1 = *(u64 *)(r7 +16) ; R1_w=scalar() R7_w=ptr_mptcp_subflow_context(off=0,imm=0)
; pace = subflow->avg_pacing_rate;
107: (bf) r2 = r1 ; R1_w=scalar(id=139) R2_w=scalar(id=139)
108: (67) r2 <<= 32 ; R2_w=scalar(smax=9223372032559808512,umax=18446744069414584320,var_off=(0x0; 0xffffffff00000000),s32_min=0,s32_max=0,u32_max=0)
109: (77) r2 >>= 32 ; R2_w=scalar(umax=4294967295,var_off=(0x0; 0xffffffff))
; if (!pace) {
110: (56) if w1 != 0x0 goto pc+7 ; R1_w=scalar(id=139,smax=9223372032559808512,umax=18446744069414584320,var_off=(0x0; 0xffffffff00000000),s32_min=0,s32_max=0,u32_max=0)
; subflow->avg_pacing_rate = ssk->sk_pacing_rate;
111: (79) r1 = *(u64 *)(r8 +456) ; R1_w=scalar() R8_w=ptr_sock(off=0,imm=0)
; subflow->avg_pacing_rate = ssk->sk_pacing_rate;
112: (7b) *(u64 *)(r7 +16) = r1 ; R1_w=scalar() R7_w=ptr_mptcp_subflow_context(off=0,imm=0)
; pace = subflow->avg_pacing_rate;
113: (79) r1 = *(u64 *)(r7 +16) ; R1_w=scalar() R7_w=ptr_mptcp_subflow_context(off=0,imm=0)
; pace = subflow->avg_pacing_rate;
114: (bf) r2 = r1 ; R1_w=scalar(id=140) R2_w=scalar(id=140)
115: (67) r2 <<= 32 ; R2_w=scalar(smax=9223372032559808512,umax=18446744069414584320,var_off=(0x0; 0xffffffff00000000),s32_min=0,s32_max=0,u32_max=0)
116: (77) r2 >>= 32 ; R2_w=scalar(umax=4294967295,var_off=(0x0; 0xffffffff))
; if (!pace)
117: (16) if w1 == 0x0 goto pc+24 ; R1_w=scalar(id=140)
; linger_time = div_u64((__u64)ssk->sk_wmem_queued << 32, pace);
118: (61) r1 = *(u32 *)(r8 +336) ; R1_w=scalar(umax=4294967295,var_off=(0x0; 0xffffffff)) R8_w=ptr_sock(off=0,imm=0)
; linger_time = div_u64((__u64)ssk->sk_wmem_queued << 32, pace);
119: (67) r1 <<= 32 ; R1_w=scalar(smax=9223372032559808512,umax=18446744069414584320,var_off=(0x0; 0xffffffff00000000),s32_min=0,s32_max=0,u32_max=0)
; return dividend / divisor;
120: (3f) r1 /= r2 ; R1_w=scalar() R2_w=scalar(umax=4294967295,var_off=(0x0; 0xffffffff))
; if (linger_time < send_info[subflow->backup].linger_time) {
121: (71) r2 = *(u8 *)(r7 +88) ; R2_w=scalar(umax=255,var_off=(0x0; 0xff)) R7_w=ptr_mptcp_subflow_context(off=0,imm=0)
; if (linger_time < send_info[subflow->backup].linger_time) {
122: (57) r2 &= 1 ; R2_w=scalar(umax=1,var_off=(0x0; 0x1))
; if (linger_time < send_info[subflow->backup].linger_time) {
123: (67) r2 <<= 4 ; R2_w=scalar(umax=16,var_off=(0x0; 0x10))
124: (bf) r3 = r10 ; R3_w=fp0 R10=fp0
;
125: (07) r3 += -32 ; R3_w=fp-32
; if (linger_time < send_info[subflow->backup].linger_time) {
126: (0f) r3 += r2 ; R2_w=scalar(umax=16,var_off=(0x0; 0x10)) R3_w=fp(off=-32,umax=16,var_off=(0x0; 0x10))
127: (79) r2 = *(u64 *)(r3 +8) ; R2_w=scalar() R3_w=fp(off=-32,umax=16,var_off=(0x0; 0x10)) fp-24=mmmmmmmm
; if (linger_time < send_info[subflow->backup].linger_time) {
128: (3d) if r1 >= r2 goto pc+13 ; R1_w=scalar() R2_w=scalar()
; send_info[subflow->backup].subflow_id = i;
129: (71) r2 = *(u8 *)(r7 +88) ; R2_w=scalar(umax=255,var_off=(0x0; 0xff)) R7_w=ptr_mptcp_subflow_context(off=0,imm=0)
; send_info[subflow->backup].subflow_id = i;
130: (57) r2 &= 1 ; R2_w=scalar(umax=1,var_off=(0x0; 0x1))
; send_info[subflow->backup].subflow_id = i;
131: (67) r2 <<= 4 ; R2_w=scalar(umax=16,var_off=(0x0; 0x10))
132: (bf) r3 = r10 ; R3_w=fp0 R10=fp0
; send_info[subflow->backup].subflow_id = i;
133: (07) r3 += -32 ; R3_w=fp-32
; send_info[subflow->backup].subflow_id = i;
134: (bf) r4 = r3 ; R3_w=fp-32 R4_w=fp-32
135: (0f) r4 += r2 ; R2_w=scalar(umax=16,var_off=(0x0; 0x10)) R4_w=fp(off=-32,umax=16,var_off=(0x0; 0x10))
; send_info[subflow->backup].subflow_id = i;
136: (63) *(u32 *)(r4 +0) = r6 ; R4_w=fp(off=-32,umax=16,var_off=(0x0; 0x10)) R6_w=4 fp-16=mmmmmmmm fp-24=mmmmmmmm fp-32=mmmmmmmm
; send_info[subflow->backup].linger_time = linger_time;
137: (71) r2 = *(u8 *)(r7 +88) ; R2_w=scalar(umax=255,var_off=(0x0; 0xff)) R7_w=ptr_mptcp_subflow_context(off=0,imm=0)
; send_info[subflow->backup].linger_time = linger_time;
138: (57) r2 &= 1 ; R2_w=scalar(umax=1,var_off=(0x0; 0x1))
; send_info[subflow->backup].linger_time = linger_time;
139: (67) r2 <<= 4 ; R2_w=scalar(umax=16,var_off=(0x0; 0x10))
140: (0f) r3 += r2 ; R2_w=scalar(umax=16,var_off=(0x0; 0x10)) R3_w=fp(off=-32,umax=16,var_off=(0x0; 0x10))
; send_info[subflow->backup].linger_time = linger_time;
141: (7b) *(u64 *)(r3 +8) = r1 ; R1_w=scalar() R3_w=fp(off=-32,umax=16,var_off=(0x0; 0x10)) fp-8=mmmmmmmm fp-16=mmmmmmmm fp-24=mmmmmmmm
; for (i = 0; i < MPTCP_SUBFLOWS_MAX; i++) {
142: (55) if r6 != 0x7 goto pc-54 ; R6_w=4
; mptcp_set_timeout(sk);
89: (79) r1 = *(u64 *)(r10 -40) ; R1_w=trusted_ptr_mptcp_sched_data(off=0,imm=0) R10=fp0 fp-40=trusted_ptr_
90: (b7) r3 = 16 ; R3_w=16
91: (0f) r1 += r3 ; R1_w=trusted_ptr_mptcp_sched_data(off=16,imm=0) R3_w=16
; if (!data->contexts[i])
92: (bf) r2 = r9 ; R2_w=32 R9_w=32
93: (0f) r2 += r3 ; R2_w=48 R3_w=16
94: (79) r3 = *(u64 *)(r10 -48) ; R3_w=trusted_ptr_mptcp_sched_data(off=8,imm=0) R10=fp0 fp-48=trusted_ptr_
95: (0f) r3 += r2 ; R2_w=48 R3_w=trusted_ptr_mptcp_sched_data(off=56,imm=0)
; for (i = 0; i < MPTCP_SUBFLOWS_MAX; i++) {
96: (07) r6 += 1 ; R6_w=5
; if (!data->contexts[i])
97: (07) r9 += 8 ; R9_w=40
; if (!data->contexts[i])
98: (79) r2 = *(u64 *)(r3 +0) ; R2=ptr_mptcp_subflow_context(off=0,imm=0) R3=trusted_ptr_mptcp_sched_data(off=56,imm=0)
; if (!data->contexts[i])
99: (15) if r2 == 0x0 goto pc+43 ; R2=ptr_mptcp_subflow_context(off=0,imm=0)
; subflow = data->contexts[i];
100: (0f) r1 += r9 ; R1_w=trusted_ptr_mptcp_sched_data(off=56,imm=0) R9=40
101: (79) r7 = *(u64 *)(r1 +0) ; R1_w=trusted_ptr_mptcp_sched_data(off=56,imm=0) R7_w=ptr_mptcp_subflow_context(off=0,imm=0)
; return subflow->tcp_sock;
102: (79) r8 = *(u64 *)(r7 +192) ; R7_w=ptr_mptcp_subflow_context(off=0,imm=0) R8_w=ptr_sock(off=0,imm=0)
; if (!mptcp_subflow_active(subflow))
103: (bf) r1 = r7 ; R1_w=ptr_mptcp_subflow_context(off=0,imm=0) R7_w=ptr_mptcp_subflow_context(off=0,imm=0)
104: (85) call mptcp_subflow_active#153119 ; R0_w=scalar()
; if (!mptcp_subflow_active(subflow))
105: (16) if w0 == 0x0 goto pc+36 ; R0_w=scalar()
; pace = subflow->avg_pacing_rate;
106: (79) r1 = *(u64 *)(r7 +16) ; R1_w=scalar() R7_w=ptr_mptcp_subflow_context(off=0,imm=0)
; pace = subflow->avg_pacing_rate;
107: (bf) r2 = r1 ; R1_w=scalar(id=142) R2_w=scalar(id=142)
108: (67) r2 <<= 32 ; R2_w=scalar(smax=9223372032559808512,umax=18446744069414584320,var_off=(0x0; 0xffffffff00000000),s32_min=0,s32_max=0,u32_max=0)
109: (77) r2 >>= 32 ; R2_w=scalar(umax=4294967295,var_off=(0x0; 0xffffffff))
; if (!pace) {
110: (56) if w1 != 0x0 goto pc+7 ; R1_w=scalar(id=142,smax=9223372032559808512,umax=18446744069414584320,var_off=(0x0; 0xffffffff00000000),s32_min=0,s32_max=0,u32_max=0)
; subflow->avg_pacing_rate = ssk->sk_pacing_rate;
111: (79) r1 = *(u64 *)(r8 +456) ; R1_w=scalar() R8_w=ptr_sock(off=0,imm=0)
; subflow->avg_pacing_rate = ssk->sk_pacing_rate;
112: (7b) *(u64 *)(r7 +16) = r1 ; R1_w=scalar() R7_w=ptr_mptcp_subflow_context(off=0,imm=0)
; pace = subflow->avg_pacing_rate;
113: (79) r1 = *(u64 *)(r7 +16) ; R1_w=scalar() R7_w=ptr_mptcp_subflow_context(off=0,imm=0)
; pace = subflow->avg_pacing_rate;
114: (bf) r2 = r1 ; R1_w=scalar(id=143) R2_w=scalar(id=143)
115: (67) r2 <<= 32 ; R2_w=scalar(smax=9223372032559808512,umax=18446744069414584320,var_off=(0x0; 0xffffffff00000000),s32_min=0,s32_max=0,u32_max=0)
116: (77) r2 >>= 32 ; R2_w=scalar(umax=4294967295,var_off=(0x0; 0xffffffff))
; if (!pace)
117: (16) if w1 == 0x0 goto pc+24 ; R1_w=scalar(id=143)
; linger_time = div_u64((__u64)ssk->sk_wmem_queued << 32, pace);
118: (61) r1 = *(u32 *)(r8 +336) ; R1_w=scalar(umax=4294967295,var_off=(0x0; 0xffffffff)) R8_w=ptr_sock(off=0,imm=0)
; linger_time = div_u64((__u64)ssk->sk_wmem_queued << 32, pace);
119: (67) r1 <<= 32 ; R1_w=scalar(smax=9223372032559808512,umax=18446744069414584320,var_off=(0x0; 0xffffffff00000000),s32_min=0,s32_max=0,u32_max=0)
; return dividend / divisor;
120: (3f) r1 /= r2 ; R1_w=scalar() R2_w=scalar(umax=4294967295,var_off=(0x0; 0xffffffff))
; if (linger_time < send_info[subflow->backup].linger_time) {
121: (71) r2 = *(u8 *)(r7 +88) ; R2_w=scalar(umax=255,var_off=(0x0; 0xff)) R7_w=ptr_mptcp_subflow_context(off=0,imm=0)
; if (linger_time < send_info[subflow->backup].linger_time) {
122: (57) r2 &= 1 ; R2_w=scalar(umax=1,var_off=(0x0; 0x1))
; if (linger_time < send_info[subflow->backup].linger_time) {
123: (67) r2 <<= 4 ; R2_w=scalar(umax=16,var_off=(0x0; 0x10))
124: (bf) r3 = r10 ; R3_w=fp0 R10=fp0
;
125: (07) r3 += -32 ; R3_w=fp-32
; if (linger_time < send_info[subflow->backup].linger_time) {
126: (0f) r3 += r2 ; R2_w=scalar(umax=16,var_off=(0x0; 0x10)) R3_w=fp(off=-32,umax=16,var_off=(0x0; 0x10))
127: (79) r2 = *(u64 *)(r3 +8) ; R2_w=scalar() R3_w=fp(off=-32,umax=16,var_off=(0x0; 0x10)) fp-24=mmmmmmmm
; if (linger_time < send_info[subflow->backup].linger_time) {
128: (3d) if r1 >= r2 goto pc+13 ; R1_w=scalar() R2_w=scalar()
; send_info[subflow->backup].subflow_id = i;
129: (71) r2 = *(u8 *)(r7 +88) ; R2_w=scalar(umax=255,var_off=(0x0; 0xff)) R7_w=ptr_mptcp_subflow_context(off=0,imm=0)
; send_info[subflow->backup].subflow_id = i;
130: (57) r2 &= 1 ; R2_w=scalar(umax=1,var_off=(0x0; 0x1))
; send_info[subflow->backup].subflow_id = i;
131: (67) r2 <<= 4 ; R2_w=scalar(umax=16,var_off=(0x0; 0x10))
132: (bf) r3 = r10 ; R3_w=fp0 R10=fp0
; send_info[subflow->backup].subflow_id = i;
133: (07) r3 += -32 ; R3_w=fp-32
; send_info[subflow->backup].subflow_id = i;
134: (bf) r4 = r3 ; R3_w=fp-32 R4_w=fp-32
135: (0f) r4 += r2 ; R2_w=scalar(umax=16,var_off=(0x0; 0x10)) R4_w=fp(off=-32,umax=16,var_off=(0x0; 0x10))
; send_info[subflow->backup].subflow_id = i;
136: (63) *(u32 *)(r4 +0) = r6 ; R4_w=fp(off=-32,umax=16,var_off=(0x0; 0x10)) R6=5 fp-16=mmmmmmmm fp-24=mmmmmmmm fp-32=mmmmmmmm
; send_info[subflow->backup].linger_time = linger_time;
137: (71) r2 = *(u8 *)(r7 +88) ; R2_w=scalar(umax=255,var_off=(0x0; 0xff)) R7_w=ptr_mptcp_subflow_context(off=0,imm=0)
; send_info[subflow->backup].linger_time = linger_time;
138: (57) r2 &= 1 ; R2_w=scalar(umax=1,var_off=(0x0; 0x1))
; send_info[subflow->backup].linger_time = linger_time;
139: (67) r2 <<= 4 ; R2_w=scalar(umax=16,var_off=(0x0; 0x10))
140: (0f) r3 += r2 ; R2_w=scalar(umax=16,var_off=(0x0; 0x10)) R3_w=fp(off=-32,umax=16,var_off=(0x0; 0x10))
; send_info[subflow->backup].linger_time = linger_time;
141: (7b) *(u64 *)(r3 +8) = r1 ; R1_w=scalar() R3_w=fp(off=-32,umax=16,var_off=(0x0; 0x10)) fp-8=mmmmmmmm fp-16=mmmmmmmm fp-24=mmmmmmmm
; for (i = 0; i < MPTCP_SUBFLOWS_MAX; i++) {
142: (55) if r6 != 0x7 goto pc-54 ; R6=5
; mptcp_set_timeout(sk);
89: (79) r1 = *(u64 *)(r10 -40) ; R1_w=trusted_ptr_mptcp_sched_data(off=0,imm=0) R10=fp0 fp-40=trusted_ptr_
90: (b7) r3 = 16 ; R3_w=16
91: (0f) r1 += r3 ; R1_w=trusted_ptr_mptcp_sched_data(off=16,imm=0) R3_w=16
; if (!data->contexts[i])
92: (bf) r2 = r9 ; R2_w=40 R9=40
93: (0f) r2 += r3 ; R2_w=56 R3_w=16
94: (79) r3 = *(u64 *)(r10 -48) ; R3_w=trusted_ptr_mptcp_sched_data(off=8,imm=0) R10=fp0 fp-48=trusted_ptr_
95: (0f) r3 += r2 ; R2_w=56 R3_w=trusted_ptr_mptcp_sched_data(off=64,imm=0)
; for (i = 0; i < MPTCP_SUBFLOWS_MAX; i++) {
96: (07) r6 += 1 ; R6_w=6
; if (!data->contexts[i])
97: (07) r9 += 8 ; R9_w=48
; if (!data->contexts[i])
98: (79) r2 = *(u64 *)(r3 +0) ; R2_w=ptr_mptcp_subflow_context(off=0,imm=0) R3_w=trusted_ptr_mptcp_sched_data(off=64,imm=0)
; if (!data->contexts[i])
99: (15) if r2 == 0x0 goto pc+43 ; R2_w=ptr_mptcp_subflow_context(off=0,imm=0)
; subflow = data->contexts[i];
100: (0f) r1 += r9 ; R1_w=trusted_ptr_mptcp_sched_data(off=64,imm=0) R9_w=48
101: (79) r7 = *(u64 *)(r1 +0) ; R1_w=trusted_ptr_mptcp_sched_data(off=64,imm=0) R7_w=ptr_mptcp_subflow_context(off=0,imm=0)
; return subflow->tcp_sock;
102: (79) r8 = *(u64 *)(r7 +192) ; R7_w=ptr_mptcp_subflow_context(off=0,imm=0) R8_w=ptr_sock(off=0,imm=0)
; if (!mptcp_subflow_active(subflow))
103: (bf) r1 = r7 ; R1_w=ptr_mptcp_subflow_context(off=0,imm=0) R7_w=ptr_mptcp_subflow_context(off=0,imm=0)
104: (85) call mptcp_subflow_active#153119 ; R0_w=scalar()
; if (!mptcp_subflow_active(subflow))
105: (16) if w0 == 0x0 goto pc+36 ; R0_w=scalar()
; pace = subflow->avg_pacing_rate;
106: (79) r1 = *(u64 *)(r7 +16) ; R1_w=scalar() R7_w=ptr_mptcp_subflow_context(off=0,imm=0)
; pace = subflow->avg_pacing_rate;
107: (bf) r2 = r1 ; R1_w=scalar(id=145) R2_w=scalar(id=145)
108: (67) r2 <<= 32 ; R2_w=scalar(smax=9223372032559808512,umax=18446744069414584320,var_off=(0x0; 0xffffffff00000000),s32_min=0,s32_max=0,u32_max=0)
109: (77) r2 >>= 32 ; R2_w=scalar(umax=4294967295,var_off=(0x0; 0xffffffff))
; if (!pace) {
110: (56) if w1 != 0x0 goto pc+7 ; R1_w=scalar(id=145,smax=9223372032559808512,umax=18446744069414584320,var_off=(0x0; 0xffffffff00000000),s32_min=0,s32_max=0,u32_max=0)
; subflow->avg_pacing_rate = ssk->sk_pacing_rate;
111: (79) r1 = *(u64 *)(r8 +456) ; R1_w=scalar() R8_w=ptr_sock(off=0,imm=0)
; subflow->avg_pacing_rate = ssk->sk_pacing_rate;
112: (7b) *(u64 *)(r7 +16) = r1 ; R1_w=scalar() R7_w=ptr_mptcp_subflow_context(off=0,imm=0)
; pace = subflow->avg_pacing_rate;
113: (79) r1 = *(u64 *)(r7 +16) ; R1_w=scalar() R7_w=ptr_mptcp_subflow_context(off=0,imm=0)
; pace = subflow->avg_pacing_rate;
114: (bf) r2 = r1 ; R1_w=scalar(id=146) R2_w=scalar(id=146)
115: (67) r2 <<= 32 ; R2_w=scalar(smax=9223372032559808512,umax=18446744069414584320,var_off=(0x0; 0xffffffff00000000),s32_min=0,s32_max=0,u32_max=0)
116: (77) r2 >>= 32 ; R2_w=scalar(umax=4294967295,var_off=(0x0; 0xffffffff))
; if (!pace)
117: (16) if w1 == 0x0 goto pc+24 ; R1_w=scalar(id=146)
; linger_time = div_u64((__u64)ssk->sk_wmem_queued << 32, pace);
118: (61) r1 = *(u32 *)(r8 +336) ; R1_w=scalar(umax=4294967295,var_off=(0x0; 0xffffffff)) R8_w=ptr_sock(off=0,imm=0)
; linger_time = div_u64((__u64)ssk->sk_wmem_queued << 32, pace);
119: (67) r1 <<= 32 ; R1_w=scalar(smax=9223372032559808512,umax=18446744069414584320,var_off=(0x0; 0xffffffff00000000),s32_min=0,s32_max=0,u32_max=0)
; return dividend / divisor;
120: (3f) r1 /= r2 ; R1_w=scalar() R2_w=scalar(umax=4294967295,var_off=(0x0; 0xffffffff))
; if (linger_time < send_info[subflow->backup].linger_time) {
121: (71) r2 = *(u8 *)(r7 +88) ; R2_w=scalar(umax=255,var_off=(0x0; 0xff)) R7_w=ptr_mptcp_subflow_context(off=0,imm=0)
; if (linger_time < send_info[subflow->backup].linger_time) {
122: (57) r2 &= 1 ; R2_w=scalar(umax=1,var_off=(0x0; 0x1))
; if (linger_time < send_info[subflow->backup].linger_time) {
123: (67) r2 <<= 4 ; R2_w=scalar(umax=16,var_off=(0x0; 0x10))
124: (bf) r3 = r10 ; R3_w=fp0 R10=fp0
;
125: (07) r3 += -32 ; R3_w=fp-32
; if (linger_time < send_info[subflow->backup].linger_time) {
126: (0f) r3 += r2 ; R2_w=scalar(umax=16,var_off=(0x0; 0x10)) R3_w=fp(off=-32,umax=16,var_off=(0x0; 0x10))
127: (79) r2 = *(u64 *)(r3 +8) ; R2_w=scalar() R3_w=fp(off=-32,umax=16,var_off=(0x0; 0x10)) fp-24=mmmmmmmm
; if (linger_time < send_info[subflow->backup].linger_time) {
128: (3d) if r1 >= r2 goto pc+13 ; R1_w=scalar() R2_w=scalar()
; send_info[subflow->backup].subflow_id = i;
129: (71) r2 = *(u8 *)(r7 +88) ; R2_w=scalar(umax=255,var_off=(0x0; 0xff)) R7_w=ptr_mptcp_subflow_context(off=0,imm=0)
; send_info[subflow->backup].subflow_id = i;
130: (57) r2 &= 1 ; R2_w=scalar(umax=1,var_off=(0x0; 0x1))
; send_info[subflow->backup].subflow_id = i;
131: (67) r2 <<= 4 ; R2_w=scalar(umax=16,var_off=(0x0; 0x10))
132: (bf) r3 = r10 ; R3_w=fp0 R10=fp0
; send_info[subflow->backup].subflow_id = i;
133: (07) r3 += -32 ; R3_w=fp-32
; send_info[subflow->backup].subflow_id = i;
134: (bf) r4 = r3 ; R3_w=fp-32 R4_w=fp-32
135: (0f) r4 += r2 ; R2_w=scalar(umax=16,var_off=(0x0; 0x10)) R4_w=fp(off=-32,umax=16,var_off=(0x0; 0x10))
; send_info[subflow->backup].subflow_id = i;
136: (63) *(u32 *)(r4 +0) = r6 ; R4_w=fp(off=-32,umax=16,var_off=(0x0; 0x10)) R6_w=6 fp-16=mmmmmmmm fp-24=mmmmmmmm fp-32=mmmmmmmm
; send_info[subflow->backup].linger_time = linger_time;
137: (71) r2 = *(u8 *)(r7 +88) ; R2_w=scalar(umax=255,var_off=(0x0; 0xff)) R7_w=ptr_mptcp_subflow_context(off=0,imm=0)
; send_info[subflow->backup].linger_time = linger_time;
138: (57) r2 &= 1 ; R2_w=scalar(umax=1,var_off=(0x0; 0x1))
; send_info[subflow->backup].linger_time = linger_time;
139: (67) r2 <<= 4 ; R2_w=scalar(umax=16,var_off=(0x0; 0x10))
140: (0f) r3 += r2 ; R2_w=scalar(umax=16,var_off=(0x0; 0x10)) R3_w=fp(off=-32,umax=16,var_off=(0x0; 0x10))
; send_info[subflow->backup].linger_time = linger_time;
141: (7b) *(u64 *)(r3 +8) = r1 ; R1_w=scalar() R3_w=fp(off=-32,umax=16,var_off=(0x0; 0x10)) fp-8=mmmmmmmm fp-16=mmmmmmmm fp-24=mmmmmmmm
; for (i = 0; i < MPTCP_SUBFLOWS_MAX; i++) {
142: (55) if r6 != 0x7 goto pc-54 ; R6_w=6
; mptcp_set_timeout(sk);
89: (79) r1 = *(u64 *)(r10 -40) ; R1_w=trusted_ptr_mptcp_sched_data(off=0,imm=0) R10=fp0 fp-40=trusted_ptr_
90: (b7) r3 = 16 ; R3_w=16
91: (0f) r1 += r3 ; R1_w=trusted_ptr_mptcp_sched_data(off=16,imm=0) R3_w=16
; if (!data->contexts[i])
92: (bf) r2 = r9 ; R2_w=48 R9_w=48
93: (0f) r2 += r3 ; R2_w=64 R3_w=16
94: (79) r3 = *(u64 *)(r10 -48) ; R3_w=trusted_ptr_mptcp_sched_data(off=8,imm=0) R10=fp0 fp-48=trusted_ptr_
95: (0f) r3 += r2 ; R2_w=64 R3_w=trusted_ptr_mptcp_sched_data(off=72,imm=0)
; for (i = 0; i < MPTCP_SUBFLOWS_MAX; i++) {
96: (07) r6 += 1 ; R6_w=7
; if (!data->contexts[i])
97: (07) r9 += 8 ; R9_w=56
; if (!data->contexts[i])
98: (79) r2 = *(u64 *)(r3 +0) ; R2=ptr_mptcp_subflow_context(off=0,imm=0) R3=trusted_ptr_mptcp_sched_data(off=72,imm=0)
; if (!data->contexts[i])
99: (15) if r2 == 0x0 goto pc+43 ; R2=ptr_mptcp_subflow_context(off=0,imm=0)
; subflow = data->contexts[i];
100: (0f) r1 += r9 ; R1_w=trusted_ptr_mptcp_sched_data(off=72,imm=0) R9=56
101: (79) r7 = *(u64 *)(r1 +0) ; R1_w=trusted_ptr_mptcp_sched_data(off=72,imm=0) R7_w=ptr_mptcp_subflow_context(off=0,imm=0)
; return subflow->tcp_sock;
102: (79) r8 = *(u64 *)(r7 +192) ; R7_w=ptr_mptcp_subflow_context(off=0,imm=0) R8_w=ptr_sock(off=0,imm=0)
; if (!mptcp_subflow_active(subflow))
103: (bf) r1 = r7 ; R1_w=ptr_mptcp_subflow_context(off=0,imm=0) R7_w=ptr_mptcp_subflow_context(off=0,imm=0)
104: (85) call mptcp_subflow_active#153119 ; R0_w=scalar()
; if (!mptcp_subflow_active(subflow))
105: (16) if w0 == 0x0 goto pc+36 ; R0_w=scalar()
; pace = subflow->avg_pacing_rate;
106: (79) r1 = *(u64 *)(r7 +16) ; R1_w=scalar() R7_w=ptr_mptcp_subflow_context(off=0,imm=0)
; pace = subflow->avg_pacing_rate;
107: (bf) r2 = r1 ; R1_w=scalar(id=148) R2_w=scalar(id=148)
108: (67) r2 <<= 32 ; R2_w=scalar(smax=9223372032559808512,umax=18446744069414584320,var_off=(0x0; 0xffffffff00000000),s32_min=0,s32_max=0,u32_max=0)
109: (77) r2 >>= 32 ; R2_w=scalar(umax=4294967295,var_off=(0x0; 0xffffffff))
; if (!pace) {
110: (56) if w1 != 0x0 goto pc+7 ; R1_w=scalar(id=148,smax=9223372032559808512,umax=18446744069414584320,var_off=(0x0; 0xffffffff00000000),s32_min=0,s32_max=0,u32_max=0)
; subflow->avg_pacing_rate = ssk->sk_pacing_rate;
111: (79) r1 = *(u64 *)(r8 +456) ; R1_w=scalar() R8_w=ptr_sock(off=0,imm=0)
; subflow->avg_pacing_rate = ssk->sk_pacing_rate;
112: (7b) *(u64 *)(r7 +16) = r1 ; R1_w=scalar() R7_w=ptr_mptcp_subflow_context(off=0,imm=0)
; pace = subflow->avg_pacing_rate;
113: (79) r1 = *(u64 *)(r7 +16) ; R1_w=scalar() R7_w=ptr_mptcp_subflow_context(off=0,imm=0)
; pace = subflow->avg_pacing_rate;
114: (bf) r2 = r1 ; R1_w=scalar(id=149) R2_w=scalar(id=149)
115: (67) r2 <<= 32 ; R2_w=scalar(smax=9223372032559808512,umax=18446744069414584320,var_off=(0x0; 0xffffffff00000000),s32_min=0,s32_max=0,u32_max=0)
116: (77) r2 >>= 32 ; R2_w=scalar(umax=4294967295,var_off=(0x0; 0xffffffff))
; if (!pace)
117: (16) if w1 == 0x0 goto pc+24 ; R1_w=scalar(id=149)
; linger_time = div_u64((__u64)ssk->sk_wmem_queued << 32, pace);
118: (61) r1 = *(u32 *)(r8 +336) ; R1_w=scalar(umax=4294967295,var_off=(0x0; 0xffffffff)) R8_w=ptr_sock(off=0,imm=0)
; linger_time = div_u64((__u64)ssk->sk_wmem_queued << 32, pace);
119: (67) r1 <<= 32 ; R1_w=scalar(smax=9223372032559808512,umax=18446744069414584320,var_off=(0x0; 0xffffffff00000000),s32_min=0,s32_max=0,u32_max=0)
; return dividend / divisor;
120: (3f) r1 /= r2 ; R1_w=scalar() R2_w=scalar(umax=4294967295,var_off=(0x0; 0xffffffff))
; if (linger_time < send_info[subflow->backup].linger_time) {
121: (71) r2 = *(u8 *)(r7 +88) ; R2_w=scalar(umax=255,var_off=(0x0; 0xff)) R7_w=ptr_mptcp_subflow_context(off=0,imm=0)
; if (linger_time < send_info[subflow->backup].linger_time) {
122: (57) r2 &= 1 ; R2_w=scalar(umax=1,var_off=(0x0; 0x1))
; if (linger_time < send_info[subflow->backup].linger_time) {
123: (67) r2 <<= 4 ; R2_w=scalar(umax=16,var_off=(0x0; 0x10))
124: (bf) r3 = r10 ; R3_w=fp0 R10=fp0
;
125: (07) r3 += -32 ; R3_w=fp-32
; if (linger_time < send_info[subflow->backup].linger_time) {
126: (0f) r3 += r2 ; R2_w=scalar(umax=16,var_off=(0x0; 0x10)) R3_w=fp(off=-32,umax=16,var_off=(0x0; 0x10))
127: (79) r2 = *(u64 *)(r3 +8) ; R2_w=scalar() R3_w=fp(off=-32,umax=16,var_off=(0x0; 0x10)) fp-24=mmmmmmmm
; if (linger_time < send_info[subflow->backup].linger_time) {
128: (3d) if r1 >= r2 goto pc+13 ; R1_w=scalar() R2_w=scalar()
; send_info[subflow->backup].subflow_id = i;
129: (71) r2 = *(u8 *)(r7 +88) ; R2_w=scalar(umax=255,var_off=(0x0; 0xff)) R7_w=ptr_mptcp_subflow_context(off=0,imm=0)
; send_info[subflow->backup].subflow_id = i;
130: (57) r2 &= 1 ; R2_w=scalar(umax=1,var_off=(0x0; 0x1))
; send_info[subflow->backup].subflow_id = i;
131: (67) r2 <<= 4 ; R2_w=scalar(umax=16,var_off=(0x0; 0x10))
132: (bf) r3 = r10 ; R3_w=fp0 R10=fp0
; send_info[subflow->backup].subflow_id = i;
133: (07) r3 += -32 ; R3_w=fp-32
; send_info[subflow->backup].subflow_id = i;
134: (bf) r4 = r3 ; R3_w=fp-32 R4_w=fp-32
135: (0f) r4 += r2 ; R2_w=scalar(umax=16,var_off=(0x0; 0x10)) R4_w=fp(off=-32,umax=16,var_off=(0x0; 0x10))
; send_info[subflow->backup].subflow_id = i;
136: (63) *(u32 *)(r4 +0) = r6 ; R4_w=fp(off=-32,umax=16,var_off=(0x0; 0x10)) R6=7 fp-16=mmmmmmmm fp-24=mmmmmmmm fp-32=mmmmmmmm
; send_info[subflow->backup].linger_time = linger_time;
137: (71) r2 = *(u8 *)(r7 +88) ; R2_w=scalar(umax=255,var_off=(0x0; 0xff)) R7_w=ptr_mptcp_subflow_context(off=0,imm=0)
; send_info[subflow->backup].linger_time = linger_time;
138: (57) r2 &= 1 ; R2_w=scalar(umax=1,var_off=(0x0; 0x1))
; send_info[subflow->backup].linger_time = linger_time;
139: (67) r2 <<= 4 ; R2_w=scalar(umax=16,var_off=(0x0; 0x10))
140: (0f) r3 += r2 ; R2_w=scalar(umax=16,var_off=(0x0; 0x10)) R3_w=fp(off=-32,umax=16,var_off=(0x0; 0x10))
; send_info[subflow->backup].linger_time = linger_time;
141: (7b) *(u64 *)(r3 +8) = r1 ; R1_w=scalar() R3_w=fp(off=-32,umax=16,var_off=(0x0; 0x10)) fp-8=mmmmmmmm fp-16=mmmmmmmm fp-24=mmmmmmmm
; for (i = 0; i < MPTCP_SUBFLOWS_MAX; i++) {
142: (55) if r6 != 0x7 goto pc-54 ; R6=7
; if (send_info[SSK_MODE_ACTIVE].subflow_id == MPTCP_SUBFLOWS_MAX)
143: (61) r6 = *(u32 *)(r10 -16) ; R6_w=scalar(umax=4294967295,var_off=(0x0; 0xffffffff)) R10=fp0 fp-16=mmmmmmmm
; if (send_info[SSK_MODE_ACTIVE].subflow_id == MPTCP_SUBFLOWS_MAX)
144: (61) r8 = *(u32 *)(r10 -32) ; R8_w=scalar(umax=4294967295,var_off=(0x0; 0xffffffff)) R10=fp0 fp-32=mmmmmmmm
145: (79) r9 = *(u64 *)(r10 -56) ; R9_w=trusted_ptr_mptcp_sock(off=0,imm=0) R10=fp0 fp-56=trusted_ptr_
; mptcp_set_timeout(sk);
146: (bf) r1 = r9 ; R1_w=trusted_ptr_mptcp_sock(off=0,imm=0) R9_w=trusted_ptr_mptcp_sock(off=0,imm=0)
147: (85) call mptcp_set_timeout#153142 ;
; if (send_info[SSK_MODE_ACTIVE].subflow_id == MPTCP_SUBFLOWS_MAX)
148: (56) if w8 != 0x8 goto pc+1 ; R8_w=8
149: (bc) w8 = w6 ; R6_w=scalar(id=150,umax=4294967295,var_off=(0x0; 0xffffffff)) R8_w=scalar(id=150,umax=4294967295,var_off=(0x0; 0xffffffff))
150: (bf) r6 = r9 ; R6=trusted_ptr_mptcp_sock(off=0,imm=0) R9=trusted_ptr_mptcp_sock(off=0,imm=0)
; if (send_info[SSK_MODE_ACTIVE].subflow_id < MPTCP_SUBFLOWS_MAX)
151: (26) if w8 > 0x7 goto pc+6 ; R8=scalar(id=150,umax=7,var_off=(0x0; 0x7))
152: (b7) r1 = 16 ; R1_w=16
153: (79) r2 = *(u64 *)(r10 -40) ; R2_w=trusted_ptr_mptcp_sched_data(off=0,imm=0) R10=fp0 fp-40=trusted_ptr_
154: (0f) r2 += r1 ; R1_w=16 R2_w=trusted_ptr_mptcp_sched_data(off=16,imm=0)
; subflow = data->contexts[send_info[SSK_MODE_ACTIVE].subflow_id];
155: (67) r8 <<= 3 ; R8_w=scalar(umax=56,var_off=(0x0; 0x38))
156: (0f) r2 += r8 ; R2_w=trusted_ptr_mptcp_sched_data(off=16,umax=56,var_off=(0x0; 0x38)) R8_w=scalar(umax=56,var_off=(0x0; 0x38))
157: (79) r7 = *(u64 *)(r2 +0)
R2 is ptr_mptcp_sched_data invalid variable offset: off=16, var_off=(0x0; 0x38)
processed 4748 insns (limit 1000000) max_states_per_insn 10 total_states 174 peak_states 113 mark_read 12
-- END PROG LOAD LOG --
libbpf: prog 'bpf_burst_get_subflow': failed to load: -13
libbpf: failed to load object 'mptcp_bpf_burst'
libbpf: failed to load BPF skeleton 'mptcp_bpf_burst': -13
test_burst:FAIL:bpf_burst__open_and_load unexpected error: -13
#141/6 mptcp/burst:FAIL
#141 mptcp:FAIL
Summary: 0/6 PASSED, 0 SKIPPED, 1 FAILED
'''
Thanks,
-Geliang
>
> >
> > > that we avoid the 'mptcp_subflow_tcp_sock()'
> > > call entirely.
> >
> > No need to avoid "mptcp_subflow_tcp_sock", we need to access both
> > 'subflow' and 'ssk' below.
>
> Yup, typo on my side above. I'm trying to avoid
> bpf_mptcp_subflow_ctx().
>
>
> Cheers,
>
> Paolo
>
next prev parent reply other threads:[~2023-06-10 1:45 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-06-08 5:46 [PATCH mptcp-next v8 00/17] BPF packet scheduler updates Geliang Tang
2023-06-08 5:46 ` [PATCH mptcp-next v8 01/17] Squash to "mptcp: drop last_snd and MPTCP_RESET_SCHEDULER" Geliang Tang
2023-06-08 5:46 ` [PATCH mptcp-next v8 02/17] Squash to "mptcp: add struct mptcp_sched_ops" Geliang Tang
2023-06-08 5:46 ` [PATCH mptcp-next v8 03/17] Squash to "mptcp: add scheduler wrappers" Geliang Tang
2023-06-08 5:46 ` [PATCH mptcp-next v8 04/17] mptcp: add last_snd in sched_data Geliang Tang
2023-06-08 5:46 ` [PATCH mptcp-next v8 05/17] mptcp: add snd_burst " Geliang Tang
2023-06-08 5:46 ` [PATCH mptcp-next v8 06/17] mptcp: register default scheduler Geliang Tang
2023-06-08 5:46 ` [PATCH mptcp-next v8 07/17] Squash to "bpf: Add bpf_mptcp_sched_ops" Geliang Tang
2023-06-08 5:46 ` [PATCH mptcp-next v8 08/17] Squash to "selftests/bpf: Add mptcp sched structs" Geliang Tang
2023-06-08 5:46 ` [PATCH mptcp-next v8 09/17] Squash to "selftests/bpf: Add bpf_rr scheduler" Geliang Tang
2023-06-08 5:46 ` [PATCH mptcp-next v8 10/17] mptcp: add two wrappers needed by bpf_burst Geliang Tang
2023-06-08 5:46 ` [PATCH mptcp-next v8 11/17] bpf: Add bpf_burst write accesses Geliang Tang
2023-06-08 5:46 ` [PATCH mptcp-next v8 12/17] bpf: Export more bpf_burst related functions Geliang Tang
2023-06-08 5:46 ` [PATCH mptcp-next v8 13/17] selftests/bpf: Add bpf_burst scheduler Geliang Tang
2023-06-09 9:57 ` Paolo Abeni
2023-06-09 13:32 ` Geliang Tang
2023-06-09 14:40 ` Paolo Abeni
2023-06-10 1:45 ` Geliang Tang [this message]
2023-06-12 11:05 ` Paolo Abeni
2023-06-12 13:29 ` Geliang Tang
2023-06-12 14:22 ` Paolo Abeni
2023-06-13 5:36 ` Geliang Tang
2023-06-13 9:35 ` Paolo Abeni
2023-06-13 12:32 ` Geliang Tang
2023-06-13 13:36 ` Paolo Abeni
2023-06-13 14:03 ` Geliang Tang
2023-06-13 14:18 ` Paolo Abeni
2023-06-08 5:46 ` [PATCH mptcp-next v8 14/17] selftests/bpf: Add bpf_burst test Geliang Tang
2023-06-08 5:46 ` [PATCH mptcp-next v8 15/17] bpf: Add subflow bit flags write accesses Geliang Tang
2023-06-08 5:46 ` [PATCH mptcp-next v8 16/17] selftests/bpf: Add bpf_stale scheduler Geliang Tang
2023-06-08 5:46 ` [PATCH mptcp-next v8 17/17] selftests/bpf: Add bpf_stale test Geliang Tang
2023-06-08 6:29 ` selftests/bpf: Add bpf_stale test: Build Failure MPTCP CI
2023-06-08 6:56 ` selftests/bpf: Add bpf_stale test: Tests Results MPTCP CI
2023-06-13 10:08 ` selftests/bpf: Add bpf_stale test: Build Failure MPTCP CI
2023-06-13 10:57 ` selftests/bpf: Add bpf_stale test: Tests Results MPTCP CI
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20230610014514.GA2843@localhost \
--to=geliang.tang@suse.com \
--cc=mptcp@lists.linux.dev \
--cc=pabeni@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.