CC: kbuild-all(a)lists.01.org BCC: lkp(a)intel.com CC: linux-kernel(a)vger.kernel.org TO: Qi Zhang CC: Tony Nguyen CC: Dan Nowlin tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master head: aad611a868d16cdc16a7d4a764cef955293e47e3 commit: b199dddbd399536d5470e10e6bfd7d0e1b5fb71a ice: Support non word aligned input set field date: 12 months ago :::::: branch date: 20 hours ago :::::: commit date: 12 months ago config: riscv-randconfig-m031-20220313 (https://download.01.org/0day-ci/archive/20220313/202203132208.HIElRQyp-lkp(a)intel.com/config) compiler: riscv64-linux-gcc (GCC) 11.2.0 If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot Reported-by: Dan Carpenter New smatch warnings: drivers/net/ethernet/intel/ice/ice_flow.c:663 ice_flow_xtract_fld() error: testing array offset 'sib' after use. Old smatch warnings: drivers/net/ethernet/intel/ice/ice_flow.c:1698 ice_add_rss_cfg_sync() error: we previously assumed 'prof' could be null (see line 1680) vim +/sib +663 drivers/net/ethernet/intel/ice/ice_flow.c 31ad4e4ee1e4e2 Tony Nguyen 2020-01-17 511 31ad4e4ee1e4e2 Tony Nguyen 2020-01-17 512 /** 31ad4e4ee1e4e2 Tony Nguyen 2020-01-17 513 * ice_flow_xtract_fld - Create an extraction sequence entry for the given field 31ad4e4ee1e4e2 Tony Nguyen 2020-01-17 514 * @hw: pointer to the HW struct 31ad4e4ee1e4e2 Tony Nguyen 2020-01-17 515 * @params: information about the flow to be processed 31ad4e4ee1e4e2 Tony Nguyen 2020-01-17 516 * @seg: packet segment index of the field to be extracted 31ad4e4ee1e4e2 Tony Nguyen 2020-01-17 517 * @fld: ID of field to be extracted b199dddbd39953 Qi Zhang 2021-03-09 518 * @match: bit field of all fields 31ad4e4ee1e4e2 Tony Nguyen 2020-01-17 519 * 31ad4e4ee1e4e2 Tony Nguyen 2020-01-17 520 * This function determines the protocol ID, offset, and size of the given 31ad4e4ee1e4e2 Tony Nguyen 2020-01-17 521 * field. It then allocates one or more extraction sequence entries for the 31ad4e4ee1e4e2 Tony Nguyen 2020-01-17 522 * given field, and fill the entries with protocol ID and offset information. 31ad4e4ee1e4e2 Tony Nguyen 2020-01-17 523 */ 31ad4e4ee1e4e2 Tony Nguyen 2020-01-17 524 static enum ice_status 31ad4e4ee1e4e2 Tony Nguyen 2020-01-17 525 ice_flow_xtract_fld(struct ice_hw *hw, struct ice_flow_prof_params *params, b199dddbd39953 Qi Zhang 2021-03-09 526 u8 seg, enum ice_flow_field fld, u64 match) 31ad4e4ee1e4e2 Tony Nguyen 2020-01-17 527 { b199dddbd39953 Qi Zhang 2021-03-09 528 enum ice_flow_field sib = ICE_FLOW_FIELD_IDX_MAX; 31ad4e4ee1e4e2 Tony Nguyen 2020-01-17 529 enum ice_prot_id prot_id = ICE_PROT_ID_INVAL; 31ad4e4ee1e4e2 Tony Nguyen 2020-01-17 530 u8 fv_words = hw->blk[params->blk].es.fvw; 31ad4e4ee1e4e2 Tony Nguyen 2020-01-17 531 struct ice_flow_fld_info *flds; 31ad4e4ee1e4e2 Tony Nguyen 2020-01-17 532 u16 cnt, ese_bits, i; b199dddbd39953 Qi Zhang 2021-03-09 533 u16 sib_mask = 0; b199dddbd39953 Qi Zhang 2021-03-09 534 u16 mask; 31ad4e4ee1e4e2 Tony Nguyen 2020-01-17 535 u16 off; 31ad4e4ee1e4e2 Tony Nguyen 2020-01-17 536 31ad4e4ee1e4e2 Tony Nguyen 2020-01-17 537 flds = params->prof->segs[seg].fields; 31ad4e4ee1e4e2 Tony Nguyen 2020-01-17 538 31ad4e4ee1e4e2 Tony Nguyen 2020-01-17 539 switch (fld) { 390bd141808d50 Qi Zhang 2021-03-09 540 case ICE_FLOW_FIELD_IDX_ETH_DA: 390bd141808d50 Qi Zhang 2021-03-09 541 case ICE_FLOW_FIELD_IDX_ETH_SA: 390bd141808d50 Qi Zhang 2021-03-09 542 case ICE_FLOW_FIELD_IDX_S_VLAN: 390bd141808d50 Qi Zhang 2021-03-09 543 case ICE_FLOW_FIELD_IDX_C_VLAN: 390bd141808d50 Qi Zhang 2021-03-09 544 prot_id = seg == 0 ? ICE_PROT_MAC_OF_OR_S : ICE_PROT_MAC_IL; 390bd141808d50 Qi Zhang 2021-03-09 545 break; 390bd141808d50 Qi Zhang 2021-03-09 546 case ICE_FLOW_FIELD_IDX_ETH_TYPE: 390bd141808d50 Qi Zhang 2021-03-09 547 prot_id = seg == 0 ? ICE_PROT_ETYPE_OL : ICE_PROT_ETYPE_IL; 390bd141808d50 Qi Zhang 2021-03-09 548 break; b199dddbd39953 Qi Zhang 2021-03-09 549 case ICE_FLOW_FIELD_IDX_IPV4_DSCP: b199dddbd39953 Qi Zhang 2021-03-09 550 prot_id = seg == 0 ? ICE_PROT_IPV4_OF_OR_S : ICE_PROT_IPV4_IL; b199dddbd39953 Qi Zhang 2021-03-09 551 break; b199dddbd39953 Qi Zhang 2021-03-09 552 case ICE_FLOW_FIELD_IDX_IPV6_DSCP: b199dddbd39953 Qi Zhang 2021-03-09 553 prot_id = seg == 0 ? ICE_PROT_IPV6_OF_OR_S : ICE_PROT_IPV6_IL; b199dddbd39953 Qi Zhang 2021-03-09 554 break; b199dddbd39953 Qi Zhang 2021-03-09 555 case ICE_FLOW_FIELD_IDX_IPV4_TTL: b199dddbd39953 Qi Zhang 2021-03-09 556 case ICE_FLOW_FIELD_IDX_IPV4_PROT: b199dddbd39953 Qi Zhang 2021-03-09 557 prot_id = seg == 0 ? ICE_PROT_IPV4_OF_OR_S : ICE_PROT_IPV4_IL; b199dddbd39953 Qi Zhang 2021-03-09 558 b199dddbd39953 Qi Zhang 2021-03-09 559 /* TTL and PROT share the same extraction seq. entry. b199dddbd39953 Qi Zhang 2021-03-09 560 * Each is considered a sibling to the other in terms of sharing b199dddbd39953 Qi Zhang 2021-03-09 561 * the same extraction sequence entry. b199dddbd39953 Qi Zhang 2021-03-09 562 */ b199dddbd39953 Qi Zhang 2021-03-09 563 if (fld == ICE_FLOW_FIELD_IDX_IPV4_TTL) b199dddbd39953 Qi Zhang 2021-03-09 564 sib = ICE_FLOW_FIELD_IDX_IPV4_PROT; b199dddbd39953 Qi Zhang 2021-03-09 565 else if (fld == ICE_FLOW_FIELD_IDX_IPV4_PROT) b199dddbd39953 Qi Zhang 2021-03-09 566 sib = ICE_FLOW_FIELD_IDX_IPV4_TTL; b199dddbd39953 Qi Zhang 2021-03-09 567 b199dddbd39953 Qi Zhang 2021-03-09 568 /* If the sibling field is also included, that field's b199dddbd39953 Qi Zhang 2021-03-09 569 * mask needs to be included. b199dddbd39953 Qi Zhang 2021-03-09 570 */ b199dddbd39953 Qi Zhang 2021-03-09 571 if (match & BIT(sib)) b199dddbd39953 Qi Zhang 2021-03-09 572 sib_mask = ice_flds_info[sib].mask; b199dddbd39953 Qi Zhang 2021-03-09 573 break; b199dddbd39953 Qi Zhang 2021-03-09 574 case ICE_FLOW_FIELD_IDX_IPV6_TTL: b199dddbd39953 Qi Zhang 2021-03-09 575 case ICE_FLOW_FIELD_IDX_IPV6_PROT: b199dddbd39953 Qi Zhang 2021-03-09 576 prot_id = seg == 0 ? ICE_PROT_IPV6_OF_OR_S : ICE_PROT_IPV6_IL; b199dddbd39953 Qi Zhang 2021-03-09 577 b199dddbd39953 Qi Zhang 2021-03-09 578 /* TTL and PROT share the same extraction seq. entry. b199dddbd39953 Qi Zhang 2021-03-09 579 * Each is considered a sibling to the other in terms of sharing b199dddbd39953 Qi Zhang 2021-03-09 580 * the same extraction sequence entry. b199dddbd39953 Qi Zhang 2021-03-09 581 */ b199dddbd39953 Qi Zhang 2021-03-09 582 if (fld == ICE_FLOW_FIELD_IDX_IPV6_TTL) b199dddbd39953 Qi Zhang 2021-03-09 583 sib = ICE_FLOW_FIELD_IDX_IPV6_PROT; b199dddbd39953 Qi Zhang 2021-03-09 584 else if (fld == ICE_FLOW_FIELD_IDX_IPV6_PROT) b199dddbd39953 Qi Zhang 2021-03-09 585 sib = ICE_FLOW_FIELD_IDX_IPV6_TTL; b199dddbd39953 Qi Zhang 2021-03-09 586 b199dddbd39953 Qi Zhang 2021-03-09 587 /* If the sibling field is also included, that field's b199dddbd39953 Qi Zhang 2021-03-09 588 * mask needs to be included. b199dddbd39953 Qi Zhang 2021-03-09 589 */ b199dddbd39953 Qi Zhang 2021-03-09 590 if (match & BIT(sib)) b199dddbd39953 Qi Zhang 2021-03-09 591 sib_mask = ice_flds_info[sib].mask; b199dddbd39953 Qi Zhang 2021-03-09 592 break; 31ad4e4ee1e4e2 Tony Nguyen 2020-01-17 593 case ICE_FLOW_FIELD_IDX_IPV4_SA: 31ad4e4ee1e4e2 Tony Nguyen 2020-01-17 594 case ICE_FLOW_FIELD_IDX_IPV4_DA: 31ad4e4ee1e4e2 Tony Nguyen 2020-01-17 595 prot_id = seg == 0 ? ICE_PROT_IPV4_OF_OR_S : ICE_PROT_IPV4_IL; 31ad4e4ee1e4e2 Tony Nguyen 2020-01-17 596 break; 31ad4e4ee1e4e2 Tony Nguyen 2020-01-17 597 case ICE_FLOW_FIELD_IDX_IPV6_SA: 31ad4e4ee1e4e2 Tony Nguyen 2020-01-17 598 case ICE_FLOW_FIELD_IDX_IPV6_DA: 31ad4e4ee1e4e2 Tony Nguyen 2020-01-17 599 prot_id = seg == 0 ? ICE_PROT_IPV6_OF_OR_S : ICE_PROT_IPV6_IL; 31ad4e4ee1e4e2 Tony Nguyen 2020-01-17 600 break; 31ad4e4ee1e4e2 Tony Nguyen 2020-01-17 601 case ICE_FLOW_FIELD_IDX_TCP_SRC_PORT: 31ad4e4ee1e4e2 Tony Nguyen 2020-01-17 602 case ICE_FLOW_FIELD_IDX_TCP_DST_PORT: 390bd141808d50 Qi Zhang 2021-03-09 603 case ICE_FLOW_FIELD_IDX_TCP_FLAGS: 31ad4e4ee1e4e2 Tony Nguyen 2020-01-17 604 prot_id = ICE_PROT_TCP_IL; 31ad4e4ee1e4e2 Tony Nguyen 2020-01-17 605 break; 31ad4e4ee1e4e2 Tony Nguyen 2020-01-17 606 case ICE_FLOW_FIELD_IDX_UDP_SRC_PORT: 31ad4e4ee1e4e2 Tony Nguyen 2020-01-17 607 case ICE_FLOW_FIELD_IDX_UDP_DST_PORT: 31ad4e4ee1e4e2 Tony Nguyen 2020-01-17 608 prot_id = ICE_PROT_UDP_IL_OR_S; 31ad4e4ee1e4e2 Tony Nguyen 2020-01-17 609 break; 1c01c8c6c969a9 Md Fahad Iqbal Polash 2020-01-17 610 case ICE_FLOW_FIELD_IDX_SCTP_SRC_PORT: 1c01c8c6c969a9 Md Fahad Iqbal Polash 2020-01-17 611 case ICE_FLOW_FIELD_IDX_SCTP_DST_PORT: 1c01c8c6c969a9 Md Fahad Iqbal Polash 2020-01-17 612 prot_id = ICE_PROT_SCTP_IL; 1c01c8c6c969a9 Md Fahad Iqbal Polash 2020-01-17 613 break; 390bd141808d50 Qi Zhang 2021-03-09 614 case ICE_FLOW_FIELD_IDX_ARP_SIP: 390bd141808d50 Qi Zhang 2021-03-09 615 case ICE_FLOW_FIELD_IDX_ARP_DIP: 390bd141808d50 Qi Zhang 2021-03-09 616 case ICE_FLOW_FIELD_IDX_ARP_SHA: 390bd141808d50 Qi Zhang 2021-03-09 617 case ICE_FLOW_FIELD_IDX_ARP_DHA: 390bd141808d50 Qi Zhang 2021-03-09 618 case ICE_FLOW_FIELD_IDX_ARP_OP: 390bd141808d50 Qi Zhang 2021-03-09 619 prot_id = ICE_PROT_ARP_OF; 390bd141808d50 Qi Zhang 2021-03-09 620 break; 390bd141808d50 Qi Zhang 2021-03-09 621 case ICE_FLOW_FIELD_IDX_ICMP_TYPE: 390bd141808d50 Qi Zhang 2021-03-09 622 case ICE_FLOW_FIELD_IDX_ICMP_CODE: 390bd141808d50 Qi Zhang 2021-03-09 623 /* ICMP type and code share the same extraction seq. entry */ 390bd141808d50 Qi Zhang 2021-03-09 624 prot_id = (params->prof->segs[seg].hdrs & ICE_FLOW_SEG_HDR_IPV4) ? 390bd141808d50 Qi Zhang 2021-03-09 625 ICE_PROT_ICMP_IL : ICE_PROT_ICMPV6_IL; b199dddbd39953 Qi Zhang 2021-03-09 626 sib = fld == ICE_FLOW_FIELD_IDX_ICMP_TYPE ? b199dddbd39953 Qi Zhang 2021-03-09 627 ICE_FLOW_FIELD_IDX_ICMP_CODE : b199dddbd39953 Qi Zhang 2021-03-09 628 ICE_FLOW_FIELD_IDX_ICMP_TYPE; 390bd141808d50 Qi Zhang 2021-03-09 629 break; a4e82a81f57387 Tony Nguyen 2020-05-06 630 case ICE_FLOW_FIELD_IDX_GRE_KEYID: a4e82a81f57387 Tony Nguyen 2020-05-06 631 prot_id = ICE_PROT_GRE_OF; a4e82a81f57387 Tony Nguyen 2020-05-06 632 break; 31ad4e4ee1e4e2 Tony Nguyen 2020-01-17 633 default: 31ad4e4ee1e4e2 Tony Nguyen 2020-01-17 634 return ICE_ERR_NOT_IMPL; 31ad4e4ee1e4e2 Tony Nguyen 2020-01-17 635 } 31ad4e4ee1e4e2 Tony Nguyen 2020-01-17 636 31ad4e4ee1e4e2 Tony Nguyen 2020-01-17 637 /* Each extraction sequence entry is a word in size, and extracts a 31ad4e4ee1e4e2 Tony Nguyen 2020-01-17 638 * word-aligned offset from a protocol header. 31ad4e4ee1e4e2 Tony Nguyen 2020-01-17 639 */ 31ad4e4ee1e4e2 Tony Nguyen 2020-01-17 640 ese_bits = ICE_FLOW_FV_EXTRACT_SZ * BITS_PER_BYTE; 31ad4e4ee1e4e2 Tony Nguyen 2020-01-17 641 31ad4e4ee1e4e2 Tony Nguyen 2020-01-17 642 flds[fld].xtrct.prot_id = prot_id; 31ad4e4ee1e4e2 Tony Nguyen 2020-01-17 643 flds[fld].xtrct.off = (ice_flds_info[fld].off / ese_bits) * 31ad4e4ee1e4e2 Tony Nguyen 2020-01-17 644 ICE_FLOW_FV_EXTRACT_SZ; 31ad4e4ee1e4e2 Tony Nguyen 2020-01-17 645 flds[fld].xtrct.disp = (u8)(ice_flds_info[fld].off % ese_bits); 31ad4e4ee1e4e2 Tony Nguyen 2020-01-17 646 flds[fld].xtrct.idx = params->es_cnt; b199dddbd39953 Qi Zhang 2021-03-09 647 flds[fld].xtrct.mask = ice_flds_info[fld].mask; 31ad4e4ee1e4e2 Tony Nguyen 2020-01-17 648 31ad4e4ee1e4e2 Tony Nguyen 2020-01-17 649 /* Adjust the next field-entry index after accommodating the number of 31ad4e4ee1e4e2 Tony Nguyen 2020-01-17 650 * entries this field consumes 31ad4e4ee1e4e2 Tony Nguyen 2020-01-17 651 */ 31ad4e4ee1e4e2 Tony Nguyen 2020-01-17 652 cnt = DIV_ROUND_UP(flds[fld].xtrct.disp + ice_flds_info[fld].size, 31ad4e4ee1e4e2 Tony Nguyen 2020-01-17 653 ese_bits); 31ad4e4ee1e4e2 Tony Nguyen 2020-01-17 654 31ad4e4ee1e4e2 Tony Nguyen 2020-01-17 655 /* Fill in the extraction sequence entries needed for this field */ 31ad4e4ee1e4e2 Tony Nguyen 2020-01-17 656 off = flds[fld].xtrct.off; b199dddbd39953 Qi Zhang 2021-03-09 657 mask = flds[fld].xtrct.mask; 31ad4e4ee1e4e2 Tony Nguyen 2020-01-17 658 for (i = 0; i < cnt; i++) { b199dddbd39953 Qi Zhang 2021-03-09 659 /* Only consume an extraction sequence entry if there is no b199dddbd39953 Qi Zhang 2021-03-09 660 * sibling field associated with this field or the sibling entry b199dddbd39953 Qi Zhang 2021-03-09 661 * already extracts the word shared with this field. b199dddbd39953 Qi Zhang 2021-03-09 662 */ b199dddbd39953 Qi Zhang 2021-03-09 @663 if (sib == ICE_FLOW_FIELD_IDX_MAX || b199dddbd39953 Qi Zhang 2021-03-09 664 flds[sib].xtrct.prot_id == ICE_PROT_ID_INVAL || b199dddbd39953 Qi Zhang 2021-03-09 665 flds[sib].xtrct.off != off) { 31ad4e4ee1e4e2 Tony Nguyen 2020-01-17 666 u8 idx; 31ad4e4ee1e4e2 Tony Nguyen 2020-01-17 667 31ad4e4ee1e4e2 Tony Nguyen 2020-01-17 668 /* Make sure the number of extraction sequence required 31ad4e4ee1e4e2 Tony Nguyen 2020-01-17 669 * does not exceed the block's capability 31ad4e4ee1e4e2 Tony Nguyen 2020-01-17 670 */ 31ad4e4ee1e4e2 Tony Nguyen 2020-01-17 671 if (params->es_cnt >= fv_words) 31ad4e4ee1e4e2 Tony Nguyen 2020-01-17 672 return ICE_ERR_MAX_LIMIT; 31ad4e4ee1e4e2 Tony Nguyen 2020-01-17 673 31ad4e4ee1e4e2 Tony Nguyen 2020-01-17 674 /* some blocks require a reversed field vector layout */ 31ad4e4ee1e4e2 Tony Nguyen 2020-01-17 675 if (hw->blk[params->blk].es.reverse) 31ad4e4ee1e4e2 Tony Nguyen 2020-01-17 676 idx = fv_words - params->es_cnt - 1; 31ad4e4ee1e4e2 Tony Nguyen 2020-01-17 677 else 31ad4e4ee1e4e2 Tony Nguyen 2020-01-17 678 idx = params->es_cnt; 31ad4e4ee1e4e2 Tony Nguyen 2020-01-17 679 31ad4e4ee1e4e2 Tony Nguyen 2020-01-17 680 params->es[idx].prot_id = prot_id; 31ad4e4ee1e4e2 Tony Nguyen 2020-01-17 681 params->es[idx].off = off; b199dddbd39953 Qi Zhang 2021-03-09 682 params->mask[idx] = mask | sib_mask; 31ad4e4ee1e4e2 Tony Nguyen 2020-01-17 683 params->es_cnt++; b199dddbd39953 Qi Zhang 2021-03-09 684 } 31ad4e4ee1e4e2 Tony Nguyen 2020-01-17 685 31ad4e4ee1e4e2 Tony Nguyen 2020-01-17 686 off += ICE_FLOW_FV_EXTRACT_SZ; 31ad4e4ee1e4e2 Tony Nguyen 2020-01-17 687 } 31ad4e4ee1e4e2 Tony Nguyen 2020-01-17 688 31ad4e4ee1e4e2 Tony Nguyen 2020-01-17 689 return 0; 31ad4e4ee1e4e2 Tony Nguyen 2020-01-17 690 } 31ad4e4ee1e4e2 Tony Nguyen 2020-01-17 691 --- 0-DAY CI Kernel Test Service https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org