Merge tag 'net-6.10-rc8-2' of git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net

Pull more networking fixes from Jakub Kicinski:
"A quick follow up to yesterday's pull. We got a regressions report for
the bnxt patch as soon as it got to your tree. The ethtool fix is also
good to have, although it's an older regression.

Current release - regressions:

- eth: bnxt_en: fix crash in bnxt_get_max_rss_ctx_ring() on older HW
when user tries to decrease the ring count

Previous releases - regressions:

- ethtool: fix RSS setting, accept "no change" setting if the driver
doesn't support the new features

- eth: i40e: remove needless retries of NVM update, don't wait 20min
when we know the firmware update won't succeed"

* tag 'net-6.10-rc8-2' of git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net:
bnxt_en: Fix crash in bnxt_get_max_rss_ctx_ring()
octeontx2-af: fix issue with IPv4 match for RSS
octeontx2-af: fix issue with IPv6 ext match for RSS
octeontx2-af: fix detection of IP layer
octeontx2-af: fix a issue with cpt_lf_alloc mailbox
octeontx2-af: replace cpt slot with lf id on reg write
i40e: fix: remove needless retries of NVM update
net: ethtool: Fix RSS setting

Changed files
+36 -19
drivers
net
ethernet
broadcom
bnxt
intel
marvell
net
ethtool
+3
drivers/net/ethernet/broadcom/bnxt/bnxt.c
··· 6151 6151 u16 i, tbl_size, max_ring = 0; 6152 6152 struct bnxt_rss_ctx *rss_ctx; 6153 6153 6154 + if (!BNXT_SUPPORTS_MULTI_RSS_CTX(bp)) 6155 + return 0; 6156 + 6154 6157 tbl_size = bnxt_get_rxfh_indir_size(bp->dev); 6155 6158 6156 6159 list_for_each_entry(rss_ctx, &bp->rss_ctx_list, list) {
-4
drivers/net/ethernet/intel/i40e/i40e_adminq.h
··· 109 109 -EFBIG, /* I40E_AQ_RC_EFBIG */ 110 110 }; 111 111 112 - /* aq_rc is invalid if AQ timed out */ 113 - if (aq_ret == -EIO) 114 - return -EAGAIN; 115 - 116 112 if (!((u32)aq_rc < (sizeof(aq_to_posix) / sizeof((aq_to_posix)[0])))) 117 113 return -ERANGE; 118 114
+1 -1
drivers/net/ethernet/marvell/octeontx2/af/mbox.h
··· 1745 1745 u16 nix_pf_func; 1746 1746 u16 sso_pf_func; 1747 1747 u16 eng_grpmsk; 1748 - int blkaddr; 1748 + u8 blkaddr; 1749 1749 u8 ctx_ilen_valid : 1; 1750 1750 u8 ctx_ilen : 7; 1751 1751 };
+6 -2
drivers/net/ethernet/marvell/octeontx2/af/npc.h
··· 63 63 NPC_LT_LB_CUSTOM1 = 0xF, 64 64 }; 65 65 66 + /* Don't modify ltypes up to IP6_EXT, otherwise length and checksum of IP 67 + * headers may not be checked correctly. IPv4 ltypes and IPv6 ltypes must 68 + * differ only at bit 0 so mask 0xE can be used to detect extended headers. 69 + */ 66 70 enum npc_kpu_lc_ltype { 67 - NPC_LT_LC_IP = 1, 71 + NPC_LT_LC_PTP = 1, 72 + NPC_LT_LC_IP, 68 73 NPC_LT_LC_IP_OPT, 69 74 NPC_LT_LC_IP6, 70 75 NPC_LT_LC_IP6_EXT, ··· 77 72 NPC_LT_LC_RARP, 78 73 NPC_LT_LC_MPLS, 79 74 NPC_LT_LC_NSH, 80 - NPC_LT_LC_PTP, 81 75 NPC_LT_LC_FCOE, 82 76 NPC_LT_LC_NGIO, 83 77 NPC_LT_LC_CUSTOM0 = 0xE,
+16 -7
drivers/net/ethernet/marvell/octeontx2/af/rvu_cpt.c
··· 696 696 struct cpt_rd_wr_reg_msg *req, 697 697 struct cpt_rd_wr_reg_msg *rsp) 698 698 { 699 - int blkaddr; 699 + u64 offset = req->reg_offset; 700 + int blkaddr, lf; 700 701 701 702 blkaddr = validate_and_get_cpt_blkaddr(req->blkaddr); 702 703 if (blkaddr < 0) ··· 708 707 !is_cpt_vf(rvu, req->hdr.pcifunc)) 709 708 return CPT_AF_ERR_ACCESS_DENIED; 710 709 711 - rsp->reg_offset = req->reg_offset; 712 - rsp->ret_val = req->ret_val; 713 - rsp->is_write = req->is_write; 714 - 715 710 if (!is_valid_offset(rvu, req)) 716 711 return CPT_AF_ERR_ACCESS_DENIED; 717 712 713 + /* Translate local LF used by VFs to global CPT LF */ 714 + lf = rvu_get_lf(rvu, &rvu->hw->block[blkaddr], req->hdr.pcifunc, 715 + (offset & 0xFFF) >> 3); 716 + 717 + /* Translate local LF's offset to global CPT LF's offset */ 718 + offset &= 0xFF000; 719 + offset += lf << 3; 720 + 721 + rsp->reg_offset = offset; 722 + rsp->ret_val = req->ret_val; 723 + rsp->is_write = req->is_write; 724 + 718 725 if (req->is_write) 719 - rvu_write64(rvu, blkaddr, req->reg_offset, req->val); 726 + rvu_write64(rvu, blkaddr, offset, req->val); 720 727 else 721 - rsp->val = rvu_read64(rvu, blkaddr, req->reg_offset); 728 + rsp->val = rvu_read64(rvu, blkaddr, offset); 722 729 723 730 return 0; 724 731 }
+8 -4
drivers/net/ethernet/marvell/octeontx2/af/rvu_nix.c
··· 3864 3864 return -ERANGE; 3865 3865 } 3866 3866 3867 + /* Mask to match ipv6(NPC_LT_LC_IP6) and ipv6 ext(NPC_LT_LC_IP6_EXT) */ 3868 + #define NPC_LT_LC_IP6_MATCH_MSK ((~(NPC_LT_LC_IP6 ^ NPC_LT_LC_IP6_EXT)) & 0xf) 3869 + /* Mask to match both ipv4(NPC_LT_LC_IP) and ipv4 ext(NPC_LT_LC_IP_OPT) */ 3870 + #define NPC_LT_LC_IP_MATCH_MSK ((~(NPC_LT_LC_IP ^ NPC_LT_LC_IP_OPT)) & 0xf) 3871 + 3867 3872 static int set_flowkey_fields(struct nix_rx_flowkey_alg *alg, u32 flow_cfg) 3868 3873 { 3869 3874 int idx, nr_field, key_off, field_marker, keyoff_marker; ··· 3938 3933 field->hdr_offset = 9; /* offset */ 3939 3934 field->bytesm1 = 0; /* 1 byte */ 3940 3935 field->ltype_match = NPC_LT_LC_IP; 3941 - field->ltype_mask = 0xF; 3936 + field->ltype_mask = NPC_LT_LC_IP_MATCH_MSK; 3942 3937 break; 3943 3938 case NIX_FLOW_KEY_TYPE_IPV4: 3944 3939 case NIX_FLOW_KEY_TYPE_INNR_IPV4: ··· 3965 3960 field->bytesm1 = 3; /* DIP, 4 bytes */ 3966 3961 } 3967 3962 } 3968 - 3969 - field->ltype_mask = 0xF; /* Match only IPv4 */ 3963 + field->ltype_mask = NPC_LT_LC_IP_MATCH_MSK; 3970 3964 keyoff_marker = false; 3971 3965 break; 3972 3966 case NIX_FLOW_KEY_TYPE_IPV6: ··· 3994 3990 field->bytesm1 = 15; /* DIP,16 bytes */ 3995 3991 } 3996 3992 } 3997 - field->ltype_mask = 0xF; /* Match only IPv6 */ 3993 + field->ltype_mask = NPC_LT_LC_IP6_MATCH_MSK; 3998 3994 break; 3999 3995 case NIX_FLOW_KEY_TYPE_TCP: 4000 3996 case NIX_FLOW_KEY_TYPE_UDP:
+2 -1
net/ethtool/ioctl.c
··· 1306 1306 if (rxfh.input_xfrm && rxfh.input_xfrm != RXH_XFRM_SYM_XOR && 1307 1307 rxfh.input_xfrm != RXH_XFRM_NO_CHANGE) 1308 1308 return -EINVAL; 1309 - if ((rxfh.input_xfrm & RXH_XFRM_SYM_XOR) && 1309 + if (rxfh.input_xfrm != RXH_XFRM_NO_CHANGE && 1310 + (rxfh.input_xfrm & RXH_XFRM_SYM_XOR) && 1310 1311 !ops->cap_rss_sym_xor_supported) 1311 1312 return -EOPNOTSUPP; 1312 1313