Re: [PATCH V3] octeontx2-pf: Add additional check for MCAM rules

From: kernel test robot
Date: Thu Jul 06 2023 - 10:49:43 EST


Hi Suman,

kernel test robot noticed the following build warnings:

[auto build test WARNING on linus/master]
[also build test WARNING on v6.4 next-20230706]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]

url: https://github.com/intel-lab-lkp/linux/commits/Suman-Ghosh/octeontx2-pf-Add-additional-check-for-MCAM-rules/20230704-010247
base: linus/master
patch link: https://lore.kernel.org/r/20230703170054.2152662-1-sumang%40marvell.com
patch subject: [PATCH V3] octeontx2-pf: Add additional check for MCAM rules
config: arm64-allmodconfig (https://download.01.org/0day-ci/archive/20230706/202307062220.o7LjIj48-lkp@xxxxxxxxx/config)
compiler: clang version 17.0.0 (https://github.com/llvm/llvm-project.git 4a5ac14ee968ff0ad5d2cc1ffa0299048db4c88a)
reproduce: (https://download.01.org/0day-ci/archive/20230706/202307062220.o7LjIj48-lkp@xxxxxxxxx/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@xxxxxxxxx>
| Closes: https://lore.kernel.org/oe-kbuild-all/202307062220.o7LjIj48-lkp@xxxxxxxxx/

All warnings (new ones prefixed by >>):

>> drivers/net/ethernet/marvell/octeontx2/nic/otx2_flows.c:877:8: warning: variable 'vlan_etype' is uninitialized when used here [-Wuninitialized]
877 | if (vlan_etype == ETH_P_8021Q && !fsp->m_ext.vlan_tci &&
| ^~~~~~~~~~
drivers/net/ethernet/marvell/octeontx2/nic/otx2_flows.c:867:17: note: initialize the variable 'vlan_etype' to silence this warning
867 | u16 vlan_etype;
| ^
| = 0
1 warning generated.


vim +/vlan_etype +877 drivers/net/ethernet/marvell/octeontx2/nic/otx2_flows.c

810
811 static int otx2_prepare_flow_request(struct ethtool_rx_flow_spec *fsp,
812 struct npc_install_flow_req *req)
813 {
814 struct ethhdr *eth_mask = &fsp->m_u.ether_spec;
815 struct ethhdr *eth_hdr = &fsp->h_u.ether_spec;
816 struct flow_msg *pmask = &req->mask;
817 struct flow_msg *pkt = &req->packet;
818 u32 flow_type;
819 int ret;
820
821 flow_type = fsp->flow_type & ~(FLOW_EXT | FLOW_MAC_EXT | FLOW_RSS);
822 switch (flow_type) {
823 /* bits not set in mask are don't care */
824 case ETHER_FLOW:
825 if (!is_zero_ether_addr(eth_mask->h_source)) {
826 ether_addr_copy(pkt->smac, eth_hdr->h_source);
827 ether_addr_copy(pmask->smac, eth_mask->h_source);
828 req->features |= BIT_ULL(NPC_SMAC);
829 }
830 if (!is_zero_ether_addr(eth_mask->h_dest)) {
831 ether_addr_copy(pkt->dmac, eth_hdr->h_dest);
832 ether_addr_copy(pmask->dmac, eth_mask->h_dest);
833 req->features |= BIT_ULL(NPC_DMAC);
834 }
835 if (eth_hdr->h_proto) {
836 memcpy(&pkt->etype, &eth_hdr->h_proto,
837 sizeof(pkt->etype));
838 memcpy(&pmask->etype, &eth_mask->h_proto,
839 sizeof(pmask->etype));
840 req->features |= BIT_ULL(NPC_ETYPE);
841 }
842 break;
843 case IP_USER_FLOW:
844 case TCP_V4_FLOW:
845 case UDP_V4_FLOW:
846 case SCTP_V4_FLOW:
847 case AH_V4_FLOW:
848 case ESP_V4_FLOW:
849 ret = otx2_prepare_ipv4_flow(fsp, req, flow_type);
850 if (ret)
851 return ret;
852 break;
853 case IPV6_USER_FLOW:
854 case TCP_V6_FLOW:
855 case UDP_V6_FLOW:
856 case SCTP_V6_FLOW:
857 case AH_V6_FLOW:
858 case ESP_V6_FLOW:
859 ret = otx2_prepare_ipv6_flow(fsp, req, flow_type);
860 if (ret)
861 return ret;
862 break;
863 default:
864 return -EOPNOTSUPP;
865 }
866 if (fsp->flow_type & FLOW_EXT) {
867 u16 vlan_etype;
868
869 if (fsp->m_ext.vlan_etype) {
870 /* Partial masks not supported */
871 if (be16_to_cpu(fsp->m_ext.vlan_etype) != 0xFFFF)
872 return -EINVAL;
873
874 /* Drop rule with vlan_etype == 802.1Q
875 * and vlan_id == 0 is not supported
876 */
> 877 if (vlan_etype == ETH_P_8021Q && !fsp->m_ext.vlan_tci &&
878 fsp->ring_cookie == RX_CLS_FLOW_DISC)
879 return -EINVAL;
880
881 vlan_etype = be16_to_cpu(fsp->h_ext.vlan_etype);
882 /* Only ETH_P_8021Q and ETH_P_802AD types supported */
883 if (vlan_etype != ETH_P_8021Q &&
884 vlan_etype != ETH_P_8021AD)
885 return -EINVAL;
886
887 memcpy(&pkt->vlan_etype, &fsp->h_ext.vlan_etype,
888 sizeof(pkt->vlan_etype));
889 memcpy(&pmask->vlan_etype, &fsp->m_ext.vlan_etype,
890 sizeof(pmask->vlan_etype));
891
892 if (vlan_etype == ETH_P_8021Q)
893 req->features |= BIT_ULL(NPC_VLAN_ETYPE_CTAG);
894 else
895 req->features |= BIT_ULL(NPC_VLAN_ETYPE_STAG);
896 }
897
898 if (fsp->m_ext.vlan_tci) {
899 memcpy(&pkt->vlan_tci, &fsp->h_ext.vlan_tci,
900 sizeof(pkt->vlan_tci));
901 memcpy(&pmask->vlan_tci, &fsp->m_ext.vlan_tci,
902 sizeof(pmask->vlan_tci));
903 req->features |= BIT_ULL(NPC_OUTER_VID);
904 }
905
906 if (fsp->m_ext.data[1]) {
907 if (flow_type == IP_USER_FLOW) {
908 if (be32_to_cpu(fsp->h_ext.data[1]) != IPV4_FLAG_MORE)
909 return -EINVAL;
910
911 pkt->ip_flag = be32_to_cpu(fsp->h_ext.data[1]);
912 pmask->ip_flag = be32_to_cpu(fsp->m_ext.data[1]);
913 req->features |= BIT_ULL(NPC_IPFRAG_IPV4);
914 } else if (fsp->h_ext.data[1] ==
915 cpu_to_be32(OTX2_DEFAULT_ACTION)) {
916 /* Not Drop/Direct to queue but use action
917 * in default entry
918 */
919 req->op = NIX_RX_ACTION_DEFAULT;
920 }
921 }
922 }
923
924 if (fsp->flow_type & FLOW_MAC_EXT &&
925 !is_zero_ether_addr(fsp->m_ext.h_dest)) {
926 ether_addr_copy(pkt->dmac, fsp->h_ext.h_dest);
927 ether_addr_copy(pmask->dmac, fsp->m_ext.h_dest);
928 req->features |= BIT_ULL(NPC_DMAC);
929 }
930
931 if (!req->features)
932 return -EOPNOTSUPP;
933
934 return 0;
935 }
936

--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki