net/sctp/outqueue.c:1380:1: warning: the frame size of 8200 bytes is larger than 1024 bytes

From: kernel test robot
Date: Sun Dec 27 2020 - 08:57:55 EST


tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head: f838f8d2b694cf9d524dc4423e9dd2db13892f3f
commit: 18c07d23da5a48525b2955aa269b8bb108c19300 csky: Fixup calltrace panic
date: 8 months ago
config: csky-randconfig-r004-20201227 (attached as .config)
compiler: csky-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
# https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=18c07d23da5a48525b2955aa269b8bb108c19300
git remote add linus https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
git fetch --no-tags linus master
git checkout 18c07d23da5a48525b2955aa269b8bb108c19300
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=csky

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@xxxxxxxxx>

All warnings (new ones prefixed by >>):

net/sctp/outqueue.c: In function 'sctp_outq_sack':
>> net/sctp/outqueue.c:1380:1: warning: the frame size of 8200 bytes is larger than 1024 bytes [-Wframe-larger-than=]
1380 | }
| ^


vim +1380 net/sctp/outqueue.c

^1da177e4c3f415 Linus Torvalds 2005-04-16 1216
^1da177e4c3f415 Linus Torvalds 2005-04-16 1217 /* This is where we REALLY process a SACK.
^1da177e4c3f415 Linus Torvalds 2005-04-16 1218 *
^1da177e4c3f415 Linus Torvalds 2005-04-16 1219 * Process the SACK against the outqueue. Mostly, this just frees
^1da177e4c3f415 Linus Torvalds 2005-04-16 1220 * things off the transmitted queue.
^1da177e4c3f415 Linus Torvalds 2005-04-16 1221 */
edfee0339e681a7 Nicolas Dichtel 2012-10-03 1222 int sctp_outq_sack(struct sctp_outq *q, struct sctp_chunk *chunk)
^1da177e4c3f415 Linus Torvalds 2005-04-16 1223 {
^1da177e4c3f415 Linus Torvalds 2005-04-16 1224 struct sctp_association *asoc = q->asoc;
edfee0339e681a7 Nicolas Dichtel 2012-10-03 1225 struct sctp_sackhdr *sack = chunk->subh.sack_hdr;
^1da177e4c3f415 Linus Torvalds 2005-04-16 1226 struct sctp_transport *transport;
^1da177e4c3f415 Linus Torvalds 2005-04-16 1227 struct sctp_chunk *tchunk = NULL;
9dbc15f055f0539 Robert P. J. Day 2008-04-12 1228 struct list_head *lchunk, *transport_list, *temp;
afd93b7be6e2473 Xin Long 2017-07-23 1229 union sctp_sack_variable *frags = sack->variable;
^1da177e4c3f415 Linus Torvalds 2005-04-16 1230 __u32 sack_ctsn, ctsn, tsn;
^1da177e4c3f415 Linus Torvalds 2005-04-16 1231 __u32 highest_tsn, highest_new_tsn;
^1da177e4c3f415 Linus Torvalds 2005-04-16 1232 __u32 sack_a_rwnd;
95c961747284a6b Eric Dumazet 2012-04-15 1233 unsigned int outstanding;
^1da177e4c3f415 Linus Torvalds 2005-04-16 1234 struct sctp_transport *primary = asoc->peer.primary_path;
^1da177e4c3f415 Linus Torvalds 2005-04-16 1235 int count_of_newacks = 0;
2cd9b822bfa79fc Vlad Yasevich 2008-06-19 1236 int gap_ack_blocks;
ea862c8d1f4a0d1 Vlad Yasevich 2010-04-30 1237 u8 accum_moved = 0;
^1da177e4c3f415 Linus Torvalds 2005-04-16 1238
^1da177e4c3f415 Linus Torvalds 2005-04-16 1239 /* Grab the association's destination address list. */
^1da177e4c3f415 Linus Torvalds 2005-04-16 1240 transport_list = &asoc->peer.transport_addr_list;
^1da177e4c3f415 Linus Torvalds 2005-04-16 1241
f643ee295c1c63b Kevin Kou 2019-12-26 1242 /* SCTP path tracepoint for congestion control debugging. */
f398efc14a9277b Kevin Kou 2019-12-27 1243 if (trace_sctp_probe_path_enabled()) {
f398efc14a9277b Kevin Kou 2019-12-27 1244 list_for_each_entry(transport, transport_list, transports)
f643ee295c1c63b Kevin Kou 2019-12-26 1245 trace_sctp_probe_path(transport, asoc);
f643ee295c1c63b Kevin Kou 2019-12-26 1246 }
f643ee295c1c63b Kevin Kou 2019-12-26 1247
^1da177e4c3f415 Linus Torvalds 2005-04-16 1248 sack_ctsn = ntohl(sack->cum_tsn_ack);
2cd9b822bfa79fc Vlad Yasevich 2008-06-19 1249 gap_ack_blocks = ntohs(sack->num_gap_ack_blocks);
196d67593439b03 Michele Baldessari 2012-12-01 1250 asoc->stats.gapcnt += gap_ack_blocks;
^1da177e4c3f415 Linus Torvalds 2005-04-16 1251 /*
^1da177e4c3f415 Linus Torvalds 2005-04-16 1252 * SFR-CACC algorithm:
^1da177e4c3f415 Linus Torvalds 2005-04-16 1253 * On receipt of a SACK the sender SHOULD execute the
^1da177e4c3f415 Linus Torvalds 2005-04-16 1254 * following statements.
^1da177e4c3f415 Linus Torvalds 2005-04-16 1255 *
^1da177e4c3f415 Linus Torvalds 2005-04-16 1256 * 1) If the cumulative ack in the SACK passes next tsn_at_change
^1da177e4c3f415 Linus Torvalds 2005-04-16 1257 * on the current primary, the CHANGEOVER_ACTIVE flag SHOULD be
^1da177e4c3f415 Linus Torvalds 2005-04-16 1258 * cleared. The CYCLING_CHANGEOVER flag SHOULD also be cleared for
^1da177e4c3f415 Linus Torvalds 2005-04-16 1259 * all destinations.
^1da177e4c3f415 Linus Torvalds 2005-04-16 1260 * 2) If the SACK contains gap acks and the flag CHANGEOVER_ACTIVE
^1da177e4c3f415 Linus Torvalds 2005-04-16 1261 * is set the receiver of the SACK MUST take the following actions:
^1da177e4c3f415 Linus Torvalds 2005-04-16 1262 *
^1da177e4c3f415 Linus Torvalds 2005-04-16 1263 * A) Initialize the cacc_saw_newack to 0 for all destination
^1da177e4c3f415 Linus Torvalds 2005-04-16 1264 * addresses.
ab5216a5bd45375 Vlad Yasevich 2008-06-19 1265 *
ab5216a5bd45375 Vlad Yasevich 2008-06-19 1266 * Only bother if changeover_active is set. Otherwise, this is
ab5216a5bd45375 Vlad Yasevich 2008-06-19 1267 * totally suboptimal to do on every SACK.
^1da177e4c3f415 Linus Torvalds 2005-04-16 1268 */
ab5216a5bd45375 Vlad Yasevich 2008-06-19 1269 if (primary->cacc.changeover_active) {
ab5216a5bd45375 Vlad Yasevich 2008-06-19 1270 u8 clear_cycling = 0;
ab5216a5bd45375 Vlad Yasevich 2008-06-19 1271
ab5216a5bd45375 Vlad Yasevich 2008-06-19 1272 if (TSN_lte(primary->cacc.next_tsn_at_change, sack_ctsn)) {
ab5216a5bd45375 Vlad Yasevich 2008-06-19 1273 primary->cacc.changeover_active = 0;
ab5216a5bd45375 Vlad Yasevich 2008-06-19 1274 clear_cycling = 1;
ab5216a5bd45375 Vlad Yasevich 2008-06-19 1275 }
ab5216a5bd45375 Vlad Yasevich 2008-06-19 1276
ab5216a5bd45375 Vlad Yasevich 2008-06-19 1277 if (clear_cycling || gap_ack_blocks) {
ab5216a5bd45375 Vlad Yasevich 2008-06-19 1278 list_for_each_entry(transport, transport_list,
ab5216a5bd45375 Vlad Yasevich 2008-06-19 1279 transports) {
ab5216a5bd45375 Vlad Yasevich 2008-06-19 1280 if (clear_cycling)
ab5216a5bd45375 Vlad Yasevich 2008-06-19 1281 transport->cacc.cycling_changeover = 0;
ab5216a5bd45375 Vlad Yasevich 2008-06-19 1282 if (gap_ack_blocks)
^1da177e4c3f415 Linus Torvalds 2005-04-16 1283 transport->cacc.cacc_saw_newack = 0;
^1da177e4c3f415 Linus Torvalds 2005-04-16 1284 }
^1da177e4c3f415 Linus Torvalds 2005-04-16 1285 }
ab5216a5bd45375 Vlad Yasevich 2008-06-19 1286 }
^1da177e4c3f415 Linus Torvalds 2005-04-16 1287
^1da177e4c3f415 Linus Torvalds 2005-04-16 1288 /* Get the highest TSN in the sack. */
^1da177e4c3f415 Linus Torvalds 2005-04-16 1289 highest_tsn = sack_ctsn;
2cd9b822bfa79fc Vlad Yasevich 2008-06-19 1290 if (gap_ack_blocks)
2cd9b822bfa79fc Vlad Yasevich 2008-06-19 1291 highest_tsn += ntohs(frags[gap_ack_blocks - 1].gab.end);
^1da177e4c3f415 Linus Torvalds 2005-04-16 1292
bfa0d9843ac5feb Vlad Yasevich 2010-04-30 1293 if (TSN_lt(asoc->highest_sacked, highest_tsn))
^1da177e4c3f415 Linus Torvalds 2005-04-16 1294 asoc->highest_sacked = highest_tsn;
^1da177e4c3f415 Linus Torvalds 2005-04-16 1295
bfa0d9843ac5feb Vlad Yasevich 2010-04-30 1296 highest_new_tsn = sack_ctsn;
2cd9b822bfa79fc Vlad Yasevich 2008-06-19 1297
^1da177e4c3f415 Linus Torvalds 2005-04-16 1298 /* Run through the retransmit queue. Credit bytes received
^1da177e4c3f415 Linus Torvalds 2005-04-16 1299 * and free those chunks that we can.
^1da177e4c3f415 Linus Torvalds 2005-04-16 1300 */
edfee0339e681a7 Nicolas Dichtel 2012-10-03 1301 sctp_check_transmitted(q, &q->retransmit, NULL, NULL, sack, &highest_new_tsn);
^1da177e4c3f415 Linus Torvalds 2005-04-16 1302
^1da177e4c3f415 Linus Torvalds 2005-04-16 1303 /* Run through the transmitted queue.
^1da177e4c3f415 Linus Torvalds 2005-04-16 1304 * Credit bytes received and free those chunks which we can.
^1da177e4c3f415 Linus Torvalds 2005-04-16 1305 *
^1da177e4c3f415 Linus Torvalds 2005-04-16 1306 * This is a MASSIVE candidate for optimization.
^1da177e4c3f415 Linus Torvalds 2005-04-16 1307 */
9dbc15f055f0539 Robert P. J. Day 2008-04-12 1308 list_for_each_entry(transport, transport_list, transports) {
^1da177e4c3f415 Linus Torvalds 2005-04-16 1309 sctp_check_transmitted(q, &transport->transmitted,
edfee0339e681a7 Nicolas Dichtel 2012-10-03 1310 transport, &chunk->source, sack,
edfee0339e681a7 Nicolas Dichtel 2012-10-03 1311 &highest_new_tsn);
^1da177e4c3f415 Linus Torvalds 2005-04-16 1312 /*
^1da177e4c3f415 Linus Torvalds 2005-04-16 1313 * SFR-CACC algorithm:
^1da177e4c3f415 Linus Torvalds 2005-04-16 1314 * C) Let count_of_newacks be the number of
^1da177e4c3f415 Linus Torvalds 2005-04-16 1315 * destinations for which cacc_saw_newack is set.
^1da177e4c3f415 Linus Torvalds 2005-04-16 1316 */
^1da177e4c3f415 Linus Torvalds 2005-04-16 1317 if (transport->cacc.cacc_saw_newack)
^1da177e4c3f415 Linus Torvalds 2005-04-16 1318 count_of_newacks++;
^1da177e4c3f415 Linus Torvalds 2005-04-16 1319 }
^1da177e4c3f415 Linus Torvalds 2005-04-16 1320
ea862c8d1f4a0d1 Vlad Yasevich 2010-04-30 1321 /* Move the Cumulative TSN Ack Point if appropriate. */
ea862c8d1f4a0d1 Vlad Yasevich 2010-04-30 1322 if (TSN_lt(asoc->ctsn_ack_point, sack_ctsn)) {
ea862c8d1f4a0d1 Vlad Yasevich 2010-04-30 1323 asoc->ctsn_ack_point = sack_ctsn;
ea862c8d1f4a0d1 Vlad Yasevich 2010-04-30 1324 accum_moved = 1;
ea862c8d1f4a0d1 Vlad Yasevich 2010-04-30 1325 }
ea862c8d1f4a0d1 Vlad Yasevich 2010-04-30 1326
2cd9b822bfa79fc Vlad Yasevich 2008-06-19 1327 if (gap_ack_blocks) {
ea862c8d1f4a0d1 Vlad Yasevich 2010-04-30 1328
ea862c8d1f4a0d1 Vlad Yasevich 2010-04-30 1329 if (asoc->fast_recovery && accum_moved)
ea862c8d1f4a0d1 Vlad Yasevich 2010-04-30 1330 highest_new_tsn = highest_tsn;
ea862c8d1f4a0d1 Vlad Yasevich 2010-04-30 1331
2cd9b822bfa79fc Vlad Yasevich 2008-06-19 1332 list_for_each_entry(transport, transport_list, transports)
^1da177e4c3f415 Linus Torvalds 2005-04-16 1333 sctp_mark_missing(q, &transport->transmitted, transport,
^1da177e4c3f415 Linus Torvalds 2005-04-16 1334 highest_new_tsn, count_of_newacks);
^1da177e4c3f415 Linus Torvalds 2005-04-16 1335 }
^1da177e4c3f415 Linus Torvalds 2005-04-16 1336
^1da177e4c3f415 Linus Torvalds 2005-04-16 1337 /* Update unack_data field in the assoc. */
^1da177e4c3f415 Linus Torvalds 2005-04-16 1338 sctp_sack_update_unack_data(asoc, sack);
^1da177e4c3f415 Linus Torvalds 2005-04-16 1339
^1da177e4c3f415 Linus Torvalds 2005-04-16 1340 ctsn = asoc->ctsn_ack_point;
^1da177e4c3f415 Linus Torvalds 2005-04-16 1341
^1da177e4c3f415 Linus Torvalds 2005-04-16 1342 /* Throw away stuff rotting on the sack queue. */
^1da177e4c3f415 Linus Torvalds 2005-04-16 1343 list_for_each_safe(lchunk, temp, &q->sacked) {
^1da177e4c3f415 Linus Torvalds 2005-04-16 1344 tchunk = list_entry(lchunk, struct sctp_chunk,
^1da177e4c3f415 Linus Torvalds 2005-04-16 1345 transmitted_list);
^1da177e4c3f415 Linus Torvalds 2005-04-16 1346 tsn = ntohl(tchunk->subh.data_hdr->tsn);
5f9646c3d9f92a9 Vlad Yasevich 2008-02-05 1347 if (TSN_lte(tsn, ctsn)) {
5f9646c3d9f92a9 Vlad Yasevich 2008-02-05 1348 list_del_init(&tchunk->transmitted_list);
be4947bf46cb0e7 Xin Long 2016-09-29 1349 if (asoc->peer.prsctp_capable &&
8dbdf1f5b09cb22 Xin Long 2016-07-09 1350 SCTP_PR_PRIO_ENABLED(chunk->sinfo.sinfo_flags))
8dbdf1f5b09cb22 Xin Long 2016-07-09 1351 asoc->sent_cnt_removable--;
^1da177e4c3f415 Linus Torvalds 2005-04-16 1352 sctp_chunk_free(tchunk);
^1da177e4c3f415 Linus Torvalds 2005-04-16 1353 }
5f9646c3d9f92a9 Vlad Yasevich 2008-02-05 1354 }
^1da177e4c3f415 Linus Torvalds 2005-04-16 1355
^1da177e4c3f415 Linus Torvalds 2005-04-16 1356 /* ii) Set rwnd equal to the newly received a_rwnd minus the
^1da177e4c3f415 Linus Torvalds 2005-04-16 1357 * number of bytes still outstanding after processing the
^1da177e4c3f415 Linus Torvalds 2005-04-16 1358 * Cumulative TSN Ack and the Gap Ack Blocks.
^1da177e4c3f415 Linus Torvalds 2005-04-16 1359 */
^1da177e4c3f415 Linus Torvalds 2005-04-16 1360
^1da177e4c3f415 Linus Torvalds 2005-04-16 1361 sack_a_rwnd = ntohl(sack->a_rwnd);
8a0d19c5ed417c7 lucien 2015-12-05 1362 asoc->peer.zero_window_announced = !sack_a_rwnd;
^1da177e4c3f415 Linus Torvalds 2005-04-16 1363 outstanding = q->outstanding_bytes;
^1da177e4c3f415 Linus Torvalds 2005-04-16 1364
^1da177e4c3f415 Linus Torvalds 2005-04-16 1365 if (outstanding < sack_a_rwnd)
^1da177e4c3f415 Linus Torvalds 2005-04-16 1366 sack_a_rwnd -= outstanding;
^1da177e4c3f415 Linus Torvalds 2005-04-16 1367 else
^1da177e4c3f415 Linus Torvalds 2005-04-16 1368 sack_a_rwnd = 0;
^1da177e4c3f415 Linus Torvalds 2005-04-16 1369
^1da177e4c3f415 Linus Torvalds 2005-04-16 1370 asoc->peer.rwnd = sack_a_rwnd;
^1da177e4c3f415 Linus Torvalds 2005-04-16 1371
8e0c3b73cec1b94 Xin Long 2017-12-15 1372 asoc->stream.si->generate_ftsn(q, sack_ctsn);
^1da177e4c3f415 Linus Torvalds 2005-04-16 1373
bb33381d0c97cde Daniel Borkmann 2013-06-28 1374 pr_debug("%s: sack cumulative tsn ack:0x%x\n", __func__, sack_ctsn);
bb33381d0c97cde Daniel Borkmann 2013-06-28 1375 pr_debug("%s: cumulative tsn ack of assoc:%p is 0x%x, "
bb33381d0c97cde Daniel Borkmann 2013-06-28 1376 "advertised peer ack point:0x%x\n", __func__, asoc, ctsn,
bb33381d0c97cde Daniel Borkmann 2013-06-28 1377 asoc->adv_peer_ack_point);
^1da177e4c3f415 Linus Torvalds 2005-04-16 1378
619a60ee04be332 Vlad Yasevich 2014-01-02 1379 return sctp_outq_is_empty(q);
^1da177e4c3f415 Linus Torvalds 2005-04-16 @1380 }
^1da177e4c3f415 Linus Torvalds 2005-04-16 1381

:::::: The code at line 1380 was first introduced by commit
:::::: 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 Linux-2.6.12-rc2

:::::: TO: Linus Torvalds <torvalds@xxxxxxxxxxxxxxx>
:::::: CC: Linus Torvalds <torvalds@xxxxxxxxxxxxxxx>

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@xxxxxxxxxxxx

Attachment: .config.gz
Description: application/gzip