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-support-for-real-multipath-xmit/20200912-005157 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 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/d7f1745bcd6815d03c0fcf621b988118301bc269 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(a)lists.01.org