Hi Oz, [FYI, it's a private test report for your RFC patch.] [auto build test WARNING on net-next/master] url: https://github.com/intel-lab-lkp/linux/commits/Oz-Shlomo/net-flow_offload-add-support-for-per-action-hw-stats/20221003-142027 base: https://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next.git bc37b24ee05e3fc4eae3e51c25572ccda9c34c11 config: arm-randconfig-r012-20221003 compiler: clang version 16.0.0 (https://github.com/llvm/llvm-project 791a7ae1ba3efd6bca96338e10ffde557ba83920) 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 # install arm cross compiling tool for clang build # apt-get install binutils-arm-linux-gnueabi # https://github.com/intel-lab-lkp/linux/commit/3ecd82cbfcf531ed64dd72b7eee8b0097efe22ec git remote add linux-review https://github.com/intel-lab-lkp/linux git fetch --no-tags linux-review Oz-Shlomo/net-flow_offload-add-support-for-per-action-hw-stats/20221003-142027 git checkout 3ecd82cbfcf531ed64dd72b7eee8b0097efe22ec # save the config file mkdir build_dir && cp config build_dir/.config COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=arm SHELL=/bin/bash net/sched/ If you fix the issue, kindly add following tag where applicable | Reported-by: kernel test robot All warnings (new ones prefixed by >>): >> net/sched/cls_flower.c:2403:12: warning: stack frame size (1704) exceeds limit (1024) in 'fl_reoffload' [-Wframe-larger-than] static int fl_reoffload(struct tcf_proto *tp, bool add, flow_setup_cb_t *cb, ^ >> net/sched/cls_flower.c:2528:14: warning: stack frame size (1664) exceeds limit (1024) in 'fl_tmplt_create' [-Wframe-larger-than] static void *fl_tmplt_create(struct net *net, struct tcf_chain *chain, ^ >> net/sched/cls_flower.c:2573:13: warning: stack frame size (1648) exceeds limit (1024) in 'fl_tmplt_destroy' [-Wframe-larger-than] static void fl_tmplt_destroy(void *tmplt_priv) ^ >> net/sched/cls_flower.c:3274:12: warning: stack frame size (1664) exceeds limit (1024) in 'fl_dump' [-Wframe-larger-than] static int fl_dump(struct net *net, struct tcf_proto *tp, void *fh, ^ >> net/sched/cls_flower.c:3332:12: warning: stack frame size (1664) exceeds limit (1024) in 'fl_terse_dump' [-Wframe-larger-than] static int fl_terse_dump(struct net *net, struct tcf_proto *tp, void *fh, ^ >> net/sched/cls_flower.c:531:12: warning: stack frame size (1680) exceeds limit (1024) in '__fl_delete' [-Wframe-larger-than] static int __fl_delete(struct tcf_proto *tp, struct cls_fl_filter *f, ^ >> net/sched/cls_flower.c:429:13: warning: stack frame size (1664) exceeds limit (1024) in 'fl_hw_destroy_filter' [-Wframe-larger-than] static void fl_hw_destroy_filter(struct tcf_proto *tp, struct cls_fl_filter *f, ^ >> net/sched/cls_flower.c:444:12: warning: stack frame size (3296) exceeds limit (1024) in 'fl_hw_replace_filter' [-Wframe-larger-than] static int fl_hw_replace_filter(struct tcf_proto *tp, ^ 8 warnings generated. vim +/fl_reoffload +2403 net/sched/cls_flower.c c049d56eb21966 Vlad Buslov 2019-04-24 2402 a7323311515d48 Pablo Neira Ayuso 2019-07-19 @2403 static int fl_reoffload(struct tcf_proto *tp, bool add, flow_setup_cb_t *cb, 31533cba4327ae John Hurley 2018-06-25 2404 void *cb_priv, struct netlink_ext_ack *extack) 31533cba4327ae John Hurley 2018-06-25 2405 { 31533cba4327ae John Hurley 2018-06-25 2406 struct tcf_block *block = tp->chain->block; f9e30088d20016 Pablo Neira Ayuso 2019-07-09 2407 struct flow_cls_offload cls_flower = {}; c049d56eb21966 Vlad Buslov 2019-04-24 2408 struct cls_fl_filter *f = NULL; 31533cba4327ae John Hurley 2018-06-25 2409 int err; 31533cba4327ae John Hurley 2018-06-25 2410 c049d56eb21966 Vlad Buslov 2019-04-24 2411 /* hw_filters list can only be changed by hw offload functions after c049d56eb21966 Vlad Buslov 2019-04-24 2412 * obtaining rtnl lock. Make sure it is not changed while reoffload is c049d56eb21966 Vlad Buslov 2019-04-24 2413 * iterating it. c049d56eb21966 Vlad Buslov 2019-04-24 2414 */ c049d56eb21966 Vlad Buslov 2019-04-24 2415 ASSERT_RTNL(); 31533cba4327ae John Hurley 2018-06-25 2416 c049d56eb21966 Vlad Buslov 2019-04-24 2417 while ((f = fl_get_next_hw_filter(tp, f, add))) { e3ab786b42535d Pablo Neira Ayuso 2019-02-02 2418 cls_flower.rule = e3ab786b42535d Pablo Neira Ayuso 2019-02-02 2419 flow_rule_alloc(tcf_exts_num_actions(&f->exts)); 95e27a4da6143a John Hurley 2019-04-02 2420 if (!cls_flower.rule) { 95e27a4da6143a John Hurley 2019-04-02 2421 __fl_put(f); 8f2566225ae2d6 Pablo Neira Ayuso 2019-02-02 2422 return -ENOMEM; 95e27a4da6143a John Hurley 2019-04-02 2423 } 8f2566225ae2d6 Pablo Neira Ayuso 2019-02-02 2424 95e27a4da6143a John Hurley 2019-04-02 2425 tc_cls_common_offload_init(&cls_flower.common, tp, f->flags, d6787147e15dff Pieter Jansen van Vuuren 2019-05-06 2426 extack); 31533cba4327ae John Hurley 2018-06-25 2427 cls_flower.command = add ? f9e30088d20016 Pablo Neira Ayuso 2019-07-09 2428 FLOW_CLS_REPLACE : FLOW_CLS_DESTROY; 31533cba4327ae John Hurley 2018-06-25 2429 cls_flower.cookie = (unsigned long)f; 95e27a4da6143a John Hurley 2019-04-02 2430 cls_flower.rule->match.dissector = &f->mask->dissector; 95e27a4da6143a John Hurley 2019-04-02 2431 cls_flower.rule->match.mask = &f->mask->key; 8f2566225ae2d6 Pablo Neira Ayuso 2019-02-02 2432 cls_flower.rule->match.key = &f->mkey; 3a7b68617de749 Pablo Neira Ayuso 2019-02-02 2433 c2ccf84ecb715b Ido Schimmel 2022-04-07 2434 err = tc_setup_offload_action(&cls_flower.rule->action, &f->exts, c2ccf84ecb715b Ido Schimmel 2022-04-07 2435 cls_flower.common.extack); 3a7b68617de749 Pablo Neira Ayuso 2019-02-02 2436 if (err) { 3a7b68617de749 Pablo Neira Ayuso 2019-02-02 2437 kfree(cls_flower.rule); 1f15bb4f399cec Vlad Buslov 2019-02-12 2438 if (tc_skip_sw(f->flags)) { 95e27a4da6143a John Hurley 2019-04-02 2439 __fl_put(f); 3a7b68617de749 Pablo Neira Ayuso 2019-02-02 2440 return err; 3a7b68617de749 Pablo Neira Ayuso 2019-02-02 2441 } 95e27a4da6143a John Hurley 2019-04-02 2442 goto next_flow; 1f15bb4f399cec Vlad Buslov 2019-02-12 2443 } 3a7b68617de749 Pablo Neira Ayuso 2019-02-02 2444 31533cba4327ae John Hurley 2018-06-25 2445 cls_flower.classid = f->res.classid; 31533cba4327ae John Hurley 2018-06-25 2446 40119211373094 Vlad Buslov 2019-08-26 2447 err = tc_setup_cb_reoffload(block, tp, add, cb, 40119211373094 Vlad Buslov 2019-08-26 2448 TC_SETUP_CLSFLOWER, &cls_flower, 40119211373094 Vlad Buslov 2019-08-26 2449 cb_priv, &f->flags, 40119211373094 Vlad Buslov 2019-08-26 2450 &f->in_hw_count); 9c1c0e124ca255 Baowen Zheng 2021-12-17 2451 tc_cleanup_offload_action(&cls_flower.rule->action); 8f2566225ae2d6 Pablo Neira Ayuso 2019-02-02 2452 kfree(cls_flower.rule); 8f2566225ae2d6 Pablo Neira Ayuso 2019-02-02 2453 31533cba4327ae John Hurley 2018-06-25 2454 if (err) { 95e27a4da6143a John Hurley 2019-04-02 2455 __fl_put(f); 31533cba4327ae John Hurley 2018-06-25 2456 return err; 95e27a4da6143a John Hurley 2019-04-02 2457 } 95e27a4da6143a John Hurley 2019-04-02 2458 next_flow: 95e27a4da6143a John Hurley 2019-04-02 2459 __fl_put(f); 31533cba4327ae John Hurley 2018-06-25 2460 } 31533cba4327ae John Hurley 2018-06-25 2461 31533cba4327ae John Hurley 2018-06-25 2462 return 0; 31533cba4327ae John Hurley 2018-06-25 2463 } 31533cba4327ae John Hurley 2018-06-25 2464 a449a3e77a85fc Vlad Buslov 2019-08-26 2465 static void fl_hw_add(struct tcf_proto *tp, void *type_data) a449a3e77a85fc Vlad Buslov 2019-08-26 2466 { a449a3e77a85fc Vlad Buslov 2019-08-26 2467 struct flow_cls_offload *cls_flower = type_data; a449a3e77a85fc Vlad Buslov 2019-08-26 2468 struct cls_fl_filter *f = a449a3e77a85fc Vlad Buslov 2019-08-26 2469 (struct cls_fl_filter *) cls_flower->cookie; a449a3e77a85fc Vlad Buslov 2019-08-26 2470 struct cls_fl_head *head = fl_head_dereference(tp); a449a3e77a85fc Vlad Buslov 2019-08-26 2471 a449a3e77a85fc Vlad Buslov 2019-08-26 2472 spin_lock(&tp->lock); a449a3e77a85fc Vlad Buslov 2019-08-26 2473 list_add(&f->hw_list, &head->hw_filters); a449a3e77a85fc Vlad Buslov 2019-08-26 2474 spin_unlock(&tp->lock); a449a3e77a85fc Vlad Buslov 2019-08-26 2475 } a449a3e77a85fc Vlad Buslov 2019-08-26 2476 a449a3e77a85fc Vlad Buslov 2019-08-26 2477 static void fl_hw_del(struct tcf_proto *tp, void *type_data) a449a3e77a85fc Vlad Buslov 2019-08-26 2478 { a449a3e77a85fc Vlad Buslov 2019-08-26 2479 struct flow_cls_offload *cls_flower = type_data; a449a3e77a85fc Vlad Buslov 2019-08-26 2480 struct cls_fl_filter *f = a449a3e77a85fc Vlad Buslov 2019-08-26 2481 (struct cls_fl_filter *) cls_flower->cookie; a449a3e77a85fc Vlad Buslov 2019-08-26 2482 a449a3e77a85fc Vlad Buslov 2019-08-26 2483 spin_lock(&tp->lock); a449a3e77a85fc Vlad Buslov 2019-08-26 2484 if (!list_empty(&f->hw_list)) a449a3e77a85fc Vlad Buslov 2019-08-26 2485 list_del_init(&f->hw_list); a449a3e77a85fc Vlad Buslov 2019-08-26 2486 spin_unlock(&tp->lock); a449a3e77a85fc Vlad Buslov 2019-08-26 2487 } a449a3e77a85fc Vlad Buslov 2019-08-26 2488 8f2566225ae2d6 Pablo Neira Ayuso 2019-02-02 2489 static int fl_hw_create_tmplt(struct tcf_chain *chain, 34738452739069 Jiri Pirko 2018-07-23 2490 struct fl_flow_tmplt *tmplt) 34738452739069 Jiri Pirko 2018-07-23 2491 { f9e30088d20016 Pablo Neira Ayuso 2019-07-09 2492 struct flow_cls_offload cls_flower = {}; 34738452739069 Jiri Pirko 2018-07-23 2493 struct tcf_block *block = chain->block; 34738452739069 Jiri Pirko 2018-07-23 2494 e3ab786b42535d Pablo Neira Ayuso 2019-02-02 2495 cls_flower.rule = flow_rule_alloc(0); 8f2566225ae2d6 Pablo Neira Ayuso 2019-02-02 2496 if (!cls_flower.rule) 8f2566225ae2d6 Pablo Neira Ayuso 2019-02-02 2497 return -ENOMEM; 8f2566225ae2d6 Pablo Neira Ayuso 2019-02-02 2498 34738452739069 Jiri Pirko 2018-07-23 2499 cls_flower.common.chain_index = chain->index; f9e30088d20016 Pablo Neira Ayuso 2019-07-09 2500 cls_flower.command = FLOW_CLS_TMPLT_CREATE; 34738452739069 Jiri Pirko 2018-07-23 2501 cls_flower.cookie = (unsigned long) tmplt; 8f2566225ae2d6 Pablo Neira Ayuso 2019-02-02 2502 cls_flower.rule->match.dissector = &tmplt->dissector; 8f2566225ae2d6 Pablo Neira Ayuso 2019-02-02 2503 cls_flower.rule->match.mask = &tmplt->mask; 8f2566225ae2d6 Pablo Neira Ayuso 2019-02-02 2504 cls_flower.rule->match.key = &tmplt->dummy_key; 34738452739069 Jiri Pirko 2018-07-23 2505 34738452739069 Jiri Pirko 2018-07-23 2506 /* We don't care if driver (any of them) fails to handle this 34738452739069 Jiri Pirko 2018-07-23 2507 * call. It serves just as a hint for it. 34738452739069 Jiri Pirko 2018-07-23 2508 */ 40119211373094 Vlad Buslov 2019-08-26 2509 tc_setup_cb_call(block, TC_SETUP_CLSFLOWER, &cls_flower, false, true); 8f2566225ae2d6 Pablo Neira Ayuso 2019-02-02 2510 kfree(cls_flower.rule); 8f2566225ae2d6 Pablo Neira Ayuso 2019-02-02 2511 8f2566225ae2d6 Pablo Neira Ayuso 2019-02-02 2512 return 0; 34738452739069 Jiri Pirko 2018-07-23 2513 } 34738452739069 Jiri Pirko 2018-07-23 2514 34738452739069 Jiri Pirko 2018-07-23 2515 static void fl_hw_destroy_tmplt(struct tcf_chain *chain, 34738452739069 Jiri Pirko 2018-07-23 2516 struct fl_flow_tmplt *tmplt) 34738452739069 Jiri Pirko 2018-07-23 2517 { f9e30088d20016 Pablo Neira Ayuso 2019-07-09 2518 struct flow_cls_offload cls_flower = {}; 34738452739069 Jiri Pirko 2018-07-23 2519 struct tcf_block *block = chain->block; 34738452739069 Jiri Pirko 2018-07-23 2520 34738452739069 Jiri Pirko 2018-07-23 2521 cls_flower.common.chain_index = chain->index; f9e30088d20016 Pablo Neira Ayuso 2019-07-09 2522 cls_flower.command = FLOW_CLS_TMPLT_DESTROY; 34738452739069 Jiri Pirko 2018-07-23 2523 cls_flower.cookie = (unsigned long) tmplt; 34738452739069 Jiri Pirko 2018-07-23 2524 40119211373094 Vlad Buslov 2019-08-26 2525 tc_setup_cb_call(block, TC_SETUP_CLSFLOWER, &cls_flower, false, true); 34738452739069 Jiri Pirko 2018-07-23 2526 } 34738452739069 Jiri Pirko 2018-07-23 2527 b95ec7eb3b4d2f Jiri Pirko 2018-07-23 @2528 static void *fl_tmplt_create(struct net *net, struct tcf_chain *chain, b95ec7eb3b4d2f Jiri Pirko 2018-07-23 2529 struct nlattr **tca, b95ec7eb3b4d2f Jiri Pirko 2018-07-23 2530 struct netlink_ext_ack *extack) b95ec7eb3b4d2f Jiri Pirko 2018-07-23 2531 { b95ec7eb3b4d2f Jiri Pirko 2018-07-23 2532 struct fl_flow_tmplt *tmplt; b95ec7eb3b4d2f Jiri Pirko 2018-07-23 2533 struct nlattr **tb; b95ec7eb3b4d2f Jiri Pirko 2018-07-23 2534 int err; b95ec7eb3b4d2f Jiri Pirko 2018-07-23 2535 b95ec7eb3b4d2f Jiri Pirko 2018-07-23 2536 if (!tca[TCA_OPTIONS]) b95ec7eb3b4d2f Jiri Pirko 2018-07-23 2537 return ERR_PTR(-EINVAL); b95ec7eb3b4d2f Jiri Pirko 2018-07-23 2538 b95ec7eb3b4d2f Jiri Pirko 2018-07-23 2539 tb = kcalloc(TCA_FLOWER_MAX + 1, sizeof(struct nlattr *), GFP_KERNEL); b95ec7eb3b4d2f Jiri Pirko 2018-07-23 2540 if (!tb) b95ec7eb3b4d2f Jiri Pirko 2018-07-23 2541 return ERR_PTR(-ENOBUFS); 8cb081746c031f Johannes Berg 2019-04-26 2542 err = nla_parse_nested_deprecated(tb, TCA_FLOWER_MAX, 8cb081746c031f Johannes Berg 2019-04-26 2543 tca[TCA_OPTIONS], fl_policy, NULL); b95ec7eb3b4d2f Jiri Pirko 2018-07-23 2544 if (err) b95ec7eb3b4d2f Jiri Pirko 2018-07-23 2545 goto errout_tb; b95ec7eb3b4d2f Jiri Pirko 2018-07-23 2546 b95ec7eb3b4d2f Jiri Pirko 2018-07-23 2547 tmplt = kzalloc(sizeof(*tmplt), GFP_KERNEL); 1cbc36a53b60d4 Dan Carpenter 2018-08-03 2548 if (!tmplt) { 1cbc36a53b60d4 Dan Carpenter 2018-08-03 2549 err = -ENOMEM; b95ec7eb3b4d2f Jiri Pirko 2018-07-23 2550 goto errout_tb; 1cbc36a53b60d4 Dan Carpenter 2018-08-03 2551 } b95ec7eb3b4d2f Jiri Pirko 2018-07-23 2552 tmplt->chain = chain; b95ec7eb3b4d2f Jiri Pirko 2018-07-23 2553 err = fl_set_key(net, tb, &tmplt->dummy_key, &tmplt->mask, extack); b95ec7eb3b4d2f Jiri Pirko 2018-07-23 2554 if (err) b95ec7eb3b4d2f Jiri Pirko 2018-07-23 2555 goto errout_tmplt; b95ec7eb3b4d2f Jiri Pirko 2018-07-23 2556 b95ec7eb3b4d2f Jiri Pirko 2018-07-23 2557 fl_init_dissector(&tmplt->dissector, &tmplt->mask); b95ec7eb3b4d2f Jiri Pirko 2018-07-23 2558 8f2566225ae2d6 Pablo Neira Ayuso 2019-02-02 2559 err = fl_hw_create_tmplt(chain, tmplt); 8f2566225ae2d6 Pablo Neira Ayuso 2019-02-02 2560 if (err) 8f2566225ae2d6 Pablo Neira Ayuso 2019-02-02 2561 goto errout_tmplt; 34738452739069 Jiri Pirko 2018-07-23 2562 8f2566225ae2d6 Pablo Neira Ayuso 2019-02-02 2563 kfree(tb); b95ec7eb3b4d2f Jiri Pirko 2018-07-23 2564 return tmplt; b95ec7eb3b4d2f Jiri Pirko 2018-07-23 2565 b95ec7eb3b4d2f Jiri Pirko 2018-07-23 2566 errout_tmplt: b95ec7eb3b4d2f Jiri Pirko 2018-07-23 2567 kfree(tmplt); b95ec7eb3b4d2f Jiri Pirko 2018-07-23 2568 errout_tb: b95ec7eb3b4d2f Jiri Pirko 2018-07-23 2569 kfree(tb); b95ec7eb3b4d2f Jiri Pirko 2018-07-23 2570 return ERR_PTR(err); b95ec7eb3b4d2f Jiri Pirko 2018-07-23 2571 } b95ec7eb3b4d2f Jiri Pirko 2018-07-23 2572 ec3ed293e76656 Vlad Buslov 2018-09-19 @2573 static void fl_tmplt_destroy(void *tmplt_priv) ec3ed293e76656 Vlad Buslov 2018-09-19 2574 { ec3ed293e76656 Vlad Buslov 2018-09-19 2575 struct fl_flow_tmplt *tmplt = tmplt_priv; ec3ed293e76656 Vlad Buslov 2018-09-19 2576 95278ddaa15cfa Cong Wang 2018-10-02 2577 fl_hw_destroy_tmplt(tmplt->chain, tmplt); 95278ddaa15cfa Cong Wang 2018-10-02 2578 kfree(tmplt); ec3ed293e76656 Vlad Buslov 2018-09-19 2579 } ec3ed293e76656 Vlad Buslov 2018-09-19 2580 -- 0-DAY CI Kernel Test Service https://01.org/lkp