Hi Paolo,
Thank you for the patch! Yet something to improve:
[auto build test ERROR on net-next/master]
url:
https://github.com/0day-ci/linux/commits/Paolo-Abeni/mptcp-introduce-supp...
base:
https://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next.git
9984c0bb22dcae688ef8588e2621133850ff49bc
config: arm-randconfig-c003-20200911 (attached as .config)
compiler: arm-linux-gnueabi-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
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=arm
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 >>):
arm-linux-gnueabi-ld: net/mptcp/protocol.o: in function `mptcp_subflow_get_send':
> net/mptcp/protocol.c:1109: undefined reference to
`__aeabi_ldivmod'
#
https://github.com/0day-ci/linux/commit/d7f1745bcd6815d03c0fcf621b9881183...
git remote add linux-review
https://github.com/0day-ci/linux
git fetch --no-tags linux-review
Paolo-Abeni/mptcp-introduce-support-for-real-multipath-xmit/20200912-005157
git checkout d7f1745bcd6815d03c0fcf621b988118301bc269
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