tree:
https://github.com/multipath-tcp/mptcp_net-next.git export
head: 38c882ee9a77d857355a8dd2a220156ba7df73bc
commit: 6ad4fb22474e4f8d3c0aae6b68d4c4de49deeae5 [653/660] mptcp: allow picking different
xmit subflows
config: m68k-randconfig-r025-20200911 (attached as .config)
compiler: m68k-linux-gcc (GCC) 9.3.0
reproduce (this is a W=1 build):
wget
https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O
~/bin/make.cross
chmod +x ~/bin/make.cross
git checkout 6ad4fb22474e4f8d3c0aae6b68d4c4de49deeae5
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=m68k
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp(a)intel.com>
All errors (new ones prefixed by >>):
m68k-linux-ld: net/mptcp/protocol.o: in function `mptcp_subflow_get_send':
> net/mptcp/protocol.c:1109: undefined reference to `__divdi3'
#
https://github.com/multipath-tcp/mptcp_net-next/commit/6ad4fb22474e4f8d3c...
git remote add mptcp
https://github.com/multipath-tcp/mptcp_net-next.git
git fetch --no-tags mptcp export
git checkout 6ad4fb22474e4f8d3c0aae6b68d4c4de49deeae5
vim +1109 net/mptcp/protocol.c
1056
1057 static struct sock *mptcp_subflow_get_send(struct mptcp_sock *msk,
1058 u32 *sndbuf)
1059 {
1060 struct subflow_send_info send_info[2];
1061 struct mptcp_subflow_context *subflow;
1062 int i, nr_active = 0;
1063 int64_t ratio, pace;
1064 struct sock *ssk;
1065
1066 sock_owned_by_me((struct sock *)msk);
1067
1068 *sndbuf = 0;
1069 if (!mptcp_ext_cache_refill(msk))
1070 return NULL;
1071
1072 if (__mptcp_check_fallback(msk)) {
1073 if (!msk->first)
1074 return NULL;
1075 *sndbuf = msk->first->sk_sndbuf;
1076 return sk_stream_memory_free(msk->first) ? msk->first : NULL;
1077 }
1078
1079 /* re-use last subflow, if the burst allow that */
1080 if (msk->last_snd && msk->snd_burst > 0 &&
1081 sk_stream_memory_free(msk->last_snd) &&
1082 mptcp_subflow_active(mptcp_subflow_ctx(msk->last_snd))) {
1083 mptcp_for_each_subflow(msk, subflow) {
1084 ssk = mptcp_subflow_tcp_sock(subflow);
1085 *sndbuf = max(tcp_sk(ssk)->snd_wnd, *sndbuf);
1086 }
1087 return msk->last_snd;
1088 }
1089
1090 /* pick the subflow with the lower wmem/wspace ratio */
1091 for (i = 0; i < 2; ++i) {
1092 send_info[i].ssk = NULL;
1093 send_info[i].ratio = -1;
1094 }
1095 mptcp_for_each_subflow(msk, subflow) {
1096 ssk = mptcp_subflow_tcp_sock(subflow);
1097 if (!mptcp_subflow_active(subflow))
1098 continue;
1099
1100 nr_active += !subflow->backup;
1101 *sndbuf = max(tcp_sk(ssk)->snd_wnd, *sndbuf);
1102 if (!sk_stream_memory_free(subflow->tcp_sock))
1103 continue;
1104
1105 pace = READ_ONCE(ssk->sk_pacing_rate);
1106 if (!pace)
1107 continue;
1108
1109 ratio = (int64_t)READ_ONCE(ssk->sk_wmem_queued) << 32
/ pace;
1110 if (ratio < send_info[subflow->backup].ratio) {
1111 send_info[subflow->backup].ssk = ssk;
1112 send_info[subflow->backup].ratio = ratio;
1113 }
1114 }
1115
1116 pr_debug("msk=%p nr_active=%d ssk=%p:%lld backup=%p:%lld",
1117 msk, nr_active, send_info[0].ssk, send_info[0].ratio,
1118 send_info[1].ssk, send_info[1].ratio);
1119
1120 /* pick the best backup if no other subflow is active */
1121 if (!nr_active)
1122 send_info[0].ssk = send_info[1].ssk;
1123
1124 if (send_info[0].ssk) {
1125 msk->last_snd = send_info[0].ssk;
1126 msk->snd_burst = min_t(int, MPTCP_SEND_BURST_SIZE,
1127 sk_stream_wspace(msk->last_snd));
1128 return msk->last_snd;
1129 }
1130 return NULL;
1131 }
1132
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org