Hi Xiaoliang, Thank you for the patch! Perhaps something to improve: [auto build test WARNING on net-next/master] [also build test WARNING on next-20200529] [cannot apply to linus/master v5.7] [if your patch is applied to the wrong git tree, please drop us a note to help improve the system. BTW, we also suggest to use '--base' option to specify the base tree in git format-patch, please see https://stackoverflow.com/a/37406982] url: https://github.com/0day-ci/linux/commits/Xiaoliang-Yang/net-ocelot-VCAP-IS1-and-ES0-support/20200602-133658 base: https://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next.git 9a25c1df24a6fea9dc79eec950453c4e00f707fd config: mips-allyesconfig (attached as .config) compiler: mips-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 # save the attached .config to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=mips If you fix the issue, kindly add following tag as appropriate Reported-by: kbuild test robot All warnings (new ones prefixed by >>, old ones prefixed by <<): In file included from include/linux/bits.h:23, from include/linux/bitops.h:5, from include/linux/kernel.h:12, from include/linux/iopoll.h:9, from drivers/net/ethernet/mscc/ocelot_ace.c:6: drivers/net/ethernet/mscc/ocelot_ace.c: In function 'vcap_action2cache': include/linux/bits.h:26:28: warning: comparison of unsigned expression < 0 is always false [-Wtype-limits] 26 | __builtin_constant_p((l) > (h)), (l) > (h), 0))) | ^ include/linux/build_bug.h:16:62: note: in definition of macro 'BUILD_BUG_ON_ZERO' 16 | #define BUILD_BUG_ON_ZERO(e) ((int)(sizeof(struct { int:(-!!(e)); }))) | ^ include/linux/bits.h:39:3: note: in expansion of macro 'GENMASK_INPUT_CHECK' 39 | (GENMASK_INPUT_CHECK(h, l) + __GENMASK(h, l)) | ^~~~~~~~~~~~~~~~~~~ drivers/net/ethernet/mscc/ocelot_ace.c:133:10: note: in expansion of macro 'GENMASK' 133 | mask = GENMASK(width, 0); | ^~~~~~~ include/linux/bits.h:26:40: warning: comparison of unsigned expression < 0 is always false [-Wtype-limits] 26 | __builtin_constant_p((l) > (h)), (l) > (h), 0))) | ^ include/linux/build_bug.h:16:62: note: in definition of macro 'BUILD_BUG_ON_ZERO' 16 | #define BUILD_BUG_ON_ZERO(e) ((int)(sizeof(struct { int:(-!!(e)); }))) | ^ include/linux/bits.h:39:3: note: in expansion of macro 'GENMASK_INPUT_CHECK' 39 | (GENMASK_INPUT_CHECK(h, l) + __GENMASK(h, l)) | ^~~~~~~~~~~~~~~~~~~ drivers/net/ethernet/mscc/ocelot_ace.c:133:10: note: in expansion of macro 'GENMASK' 133 | mask = GENMASK(width, 0); | ^~~~~~~ drivers/net/ethernet/mscc/ocelot_ace.c: In function 'vcap_cache2action': include/linux/bits.h:26:28: warning: comparison of unsigned expression < 0 is always false [-Wtype-limits] 26 | __builtin_constant_p((l) > (h)), (l) > (h), 0))) | ^ include/linux/build_bug.h:16:62: note: in definition of macro 'BUILD_BUG_ON_ZERO' 16 | #define BUILD_BUG_ON_ZERO(e) ((int)(sizeof(struct { int:(-!!(e)); }))) | ^ include/linux/bits.h:39:3: note: in expansion of macro 'GENMASK_INPUT_CHECK' 39 | (GENMASK_INPUT_CHECK(h, l) + __GENMASK(h, l)) | ^~~~~~~~~~~~~~~~~~~ drivers/net/ethernet/mscc/ocelot_ace.c:168:43: note: in expansion of macro 'GENMASK' 168 | data->type = (width ? (data->action[0] & GENMASK(width, 0)) : 0); | ^~~~~~~ include/linux/bits.h:26:40: warning: comparison of unsigned expression < 0 is always false [-Wtype-limits] 26 | __builtin_constant_p((l) > (h)), (l) > (h), 0))) | ^ include/linux/build_bug.h:16:62: note: in definition of macro 'BUILD_BUG_ON_ZERO' 16 | #define BUILD_BUG_ON_ZERO(e) ((int)(sizeof(struct { int:(-!!(e)); }))) | ^ include/linux/bits.h:39:3: note: in expansion of macro 'GENMASK_INPUT_CHECK' 39 | (GENMASK_INPUT_CHECK(h, l) + __GENMASK(h, l)) | ^~~~~~~~~~~~~~~~~~~ drivers/net/ethernet/mscc/ocelot_ace.c:168:43: note: in expansion of macro 'GENMASK' 168 | data->type = (width ? (data->action[0] & GENMASK(width, 0)) : 0); | ^~~~~~~ drivers/net/ethernet/mscc/ocelot_ace.c: In function 'is1_entry_set': << from drivers/net/ethernet/mscc/ocelot_ace.c:6: >> drivers/net/ethernet/mscc/ocelot_ace.c:733:27: warning: variable 'ip_data' set but not used [-Wunused-but-set-variable] 733 | struct ocelot_vcap_u48 *ip_data; | ^~~~~~~ << from drivers/net/ethernet/mscc/ocelot_ace.c:6: >> drivers/net/ethernet/mscc/ocelot_ace.c:732:32: warning: variable 'ds' set but not used [-Wunused-but-set-variable] 732 | struct ocelot_vcap_u8 proto, ds; | ^~ << from drivers/net/ethernet/mscc/ocelot_ace.c:6: >> drivers/net/ethernet/mscc/ocelot_ace.c:727:51: warning: variable 'tcp_psh' set but not used [-Wunused-but-set-variable] 727 | enum ocelot_vcap_bit tcp_fin, tcp_syn, tcp_rst, tcp_psh; | ^~~~~~~ << from drivers/net/ethernet/mscc/ocelot_ace.c:6: >> drivers/net/ethernet/mscc/ocelot_ace.c:727:42: warning: variable 'tcp_rst' set but not used [-Wunused-but-set-variable] 727 | enum ocelot_vcap_bit tcp_fin, tcp_syn, tcp_rst, tcp_psh; | ^~~~~~~ << from drivers/net/ethernet/mscc/ocelot_ace.c:6: >> drivers/net/ethernet/mscc/ocelot_ace.c:727:33: warning: variable 'tcp_syn' set but not used [-Wunused-but-set-variable] 727 | enum ocelot_vcap_bit tcp_fin, tcp_syn, tcp_rst, tcp_psh; | ^~~~~~~ << from drivers/net/ethernet/mscc/ocelot_ace.c:6: >> drivers/net/ethernet/mscc/ocelot_ace.c:727:24: warning: variable 'tcp_fin' set but not used [-Wunused-but-set-variable] 727 | enum ocelot_vcap_bit tcp_fin, tcp_syn, tcp_rst, tcp_psh; | ^~~~~~~ << from drivers/net/ethernet/mscc/ocelot_ace.c:6: >> drivers/net/ethernet/mscc/ocelot_ace.c:726:33: warning: variable 'tcp_urg' set but not used [-Wunused-but-set-variable] 726 | enum ocelot_vcap_bit tcp_ack, tcp_urg; | ^~~~~~~ << from drivers/net/ethernet/mscc/ocelot_ace.c:6: >> drivers/net/ethernet/mscc/ocelot_ace.c:726:24: warning: variable 'tcp_ack' set but not used [-Wunused-but-set-variable] 726 | enum ocelot_vcap_bit tcp_ack, tcp_urg; | ^~~~~~~ << from drivers/net/ethernet/mscc/ocelot_ace.c:6: >> drivers/net/ethernet/mscc/ocelot_ace.c:725:24: warning: variable 'ttl' set but not used [-Wunused-but-set-variable] 725 | enum ocelot_vcap_bit ttl, fragment, options; | ^~~ << from drivers/net/ethernet/mscc/ocelot_ace.c:6: >> drivers/net/ethernet/mscc/ocelot_ace.c:724:24: warning: variable 'seq_zero' set but not used [-Wunused-but-set-variable] 724 | enum ocelot_vcap_bit seq_zero, tcp; | ^~~~~~~~ << from drivers/net/ethernet/mscc/ocelot_ace.c:6: >> drivers/net/ethernet/mscc/ocelot_ace.c:723:36: warning: variable 'sport_eq_dport' set but not used [-Wunused-but-set-variable] 723 | enum ocelot_vcap_bit sip_eq_dip, sport_eq_dport; | ^~~~~~~~~~~~~~ << from drivers/net/ethernet/mscc/ocelot_ace.c:6: >> drivers/net/ethernet/mscc/ocelot_ace.c:723:24: warning: variable 'sip_eq_dip' set but not used [-Wunused-but-set-variable] 723 | enum ocelot_vcap_bit sip_eq_dip, sport_eq_dport; | ^~~~~~~~~~ vim +/ip_data +733 drivers/net/ethernet/mscc/ocelot_ace.c 673 674 static void is1_entry_set(struct ocelot *ocelot, int ix, 675 struct ocelot_ace_rule *ace) 676 { 677 const struct vcap_props *vcap = &ocelot->vcap[VCAP_IS1]; 678 u32 val, msk, type, i; 679 struct ocelot_ace_vlan *tag = &ace->vlan; 680 struct ocelot_vcap_u64 payload; 681 struct vcap_data data; 682 int row = ix / 2; 683 684 memset(&payload, 0, sizeof(payload)); 685 memset(&data, 0, sizeof(data)); 686 687 /* Read row */ 688 vcap_row_cmd(ocelot, vcap, row, VCAP_CMD_READ, VCAP_SEL_ALL); 689 vcap_cache2entry(ocelot, vcap, &data); 690 vcap_cache2action(ocelot, vcap, &data); 691 692 data.tg_sw = VCAP_TG_HALF; 693 data.type = IS1_ACTION_TYPE_NORMAL; 694 vcap_data_offset_get(vcap, &data, ix); 695 data.tg = (data.tg & ~data.tg_mask); 696 if (ace->prio != 0) 697 data.tg |= data.tg_value; 698 699 vcap_key_set(vcap, &data, VCAP_IS1_HK_IGR_PORT_MASK, 0, 700 ~ace->ingress_port_mask); 701 vcap_key_bit_set(vcap, &data, VCAP_IS1_HK_L2_MC, ace->dmac_mc); 702 vcap_key_bit_set(vcap, &data, VCAP_IS1_HK_L2_BC, ace->dmac_bc); 703 vcap_key_bit_set(vcap, &data, VCAP_IS1_HK_VLAN_TAGGED, tag->tagged); 704 vcap_key_set(vcap, &data, VCAP_IS1_HK_VID, 705 tag->vid.value, tag->vid.mask); 706 vcap_key_set(vcap, &data, VCAP_IS1_HK_PCP, 707 tag->pcp.value[0], tag->pcp.mask[0]); 708 type = IS1_TYPE_S1_NORMAL; 709 710 switch (ace->type) { 711 case OCELOT_ACE_TYPE_ETYPE: { 712 struct ocelot_ace_frame_etype *etype = &ace->frame.etype; 713 714 type = IS1_TYPE_S1_NORMAL; 715 vcap_key_bytes_set(vcap, &data, VCAP_IS1_HK_L2_SMAC, 716 etype->smac.value, etype->smac.mask); 717 vcap_key_bytes_set(vcap, &data, VCAP_IS1_HK_ETYPE, 718 etype->etype.value, etype->etype.mask); 719 break; 720 } 721 case OCELOT_ACE_TYPE_IPV4: 722 case OCELOT_ACE_TYPE_IPV6: { > 723 enum ocelot_vcap_bit sip_eq_dip, sport_eq_dport; > 724 enum ocelot_vcap_bit seq_zero, tcp; > 725 enum ocelot_vcap_bit ttl, fragment, options; > 726 enum ocelot_vcap_bit tcp_ack, tcp_urg; > 727 enum ocelot_vcap_bit tcp_fin, tcp_syn, tcp_rst, tcp_psh; 728 struct ocelot_ace_frame_ipv4 *ipv4 = NULL; 729 struct ocelot_ace_frame_ipv6 *ipv6 = NULL; 730 struct ocelot_vcap_udp_tcp *sport, *dport; 731 struct ocelot_vcap_ipv4 sip, dip; > 732 struct ocelot_vcap_u8 proto, ds; > 733 struct ocelot_vcap_u48 *ip_data; 734 struct ocelot_vcap_u32 port; 735 736 type = IS1_TYPE_S1_5TUPLE_IP4; 737 if (ace->type == OCELOT_ACE_TYPE_IPV4) { 738 ipv4 = &ace->frame.ipv4; 739 ttl = ipv4->ttl; 740 fragment = ipv4->fragment; 741 options = ipv4->options; 742 proto = ipv4->proto; 743 ds = ipv4->ds; 744 ip_data = &ipv4->data; 745 sip = ipv4->sip; 746 dip = ipv4->dip; 747 sport = &ipv4->sport; 748 dport = &ipv4->dport; 749 tcp_fin = ipv4->tcp_fin; 750 tcp_syn = ipv4->tcp_syn; 751 tcp_rst = ipv4->tcp_rst; 752 tcp_psh = ipv4->tcp_psh; 753 tcp_ack = ipv4->tcp_ack; 754 tcp_urg = ipv4->tcp_urg; 755 sip_eq_dip = ipv4->sip_eq_dip; 756 sport_eq_dport = ipv4->sport_eq_dport; 757 seq_zero = ipv4->seq_zero; 758 } else { 759 ipv6 = &ace->frame.ipv6; 760 ttl = ipv6->ttl; 761 fragment = OCELOT_VCAP_BIT_ANY; 762 options = OCELOT_VCAP_BIT_ANY; 763 proto = ipv6->proto; 764 ds = ipv6->ds; 765 ip_data = &ipv6->data; 766 for (i = 0; i < 4; i++) { 767 dip.value.addr[i] = ipv6->dip.value[i]; 768 dip.mask.addr[i] = ipv6->dip.mask[i]; 769 sip.value.addr[i] = ipv6->sip.value[i]; 770 sip.mask.addr[i] = ipv6->sip.mask[i]; 771 } 772 sport = &ipv6->sport; 773 dport = &ipv6->dport; 774 tcp_fin = ipv6->tcp_fin; 775 tcp_syn = ipv6->tcp_syn; 776 tcp_rst = ipv6->tcp_rst; 777 tcp_psh = ipv6->tcp_psh; 778 tcp_ack = ipv6->tcp_ack; 779 tcp_urg = ipv6->tcp_urg; 780 sip_eq_dip = ipv6->sip_eq_dip; 781 sport_eq_dport = ipv6->sport_eq_dport; 782 seq_zero = ipv6->seq_zero; 783 } 784 785 vcap_key_bit_set(vcap, &data, VCAP_IS1_HK_IP4_IP4, 786 ipv4 ? OCELOT_VCAP_BIT_1 : OCELOT_VCAP_BIT_0); 787 vcap_key_bit_set(vcap, &data, VCAP_IS1_HK_IP4_L3_FRAGMENT, 788 fragment); 789 vcap_key_set(vcap, &data, VCAP_IS1_HK_IP4_L3_FRAG_OFS_GT0, 790 0, 0); 791 vcap_key_bit_set(vcap, &data, VCAP_IS1_HK_IP4_L3_OPTIONS, 792 options); 793 vcap_key_bytes_set(vcap, &data, VCAP_IS1_HK_IP4_L3_IP4_DIP, 794 dip.value.addr, dip.mask.addr); 795 vcap_key_bytes_set(vcap, &data, VCAP_IS1_HK_IP4_L3_IP4_SIP, 796 sip.value.addr, sip.mask.addr); 797 val = proto.value[0]; 798 msk = proto.mask[0]; 799 if (msk == 0xff && (val == 6 || val == 17)) { 800 /* UDP/TCP protocol match */ 801 tcp = (val == 6 ? 802 OCELOT_VCAP_BIT_1 : OCELOT_VCAP_BIT_0); 803 vcap_key_bit_set(vcap, &data, VCAP_IS1_HK_IP4_TCP, 804 tcp); 805 vcap_key_l4_port_set(vcap, &data, 806 VCAP_IS1_HK_L4_SPORT, sport); 807 vcap_key_set(vcap, &data, VCAP_IS1_HK_IP4_L4_RNG, 808 0, 0); 809 port.value[0] = sport->value & 0xFF; 810 port.value[1] = sport->value >> 8; 811 port.value[2] = dport->value & 0xFF; 812 port.value[3] = dport->value >> 8; 813 port.mask[0] = sport->mask & 0xFF; 814 port.mask[1] = sport->mask >> 8; 815 port.mask[2] = dport->mask & 0xFF; 816 port.mask[3] = dport->mask >> 8; 817 vcap_key_bytes_set(vcap, &data, 818 VCAP_IS1_HK_IP4_IP_PAYLOAD_S1_5TUPLE, 819 port.value, port.mask); 820 } 821 break; 822 } 823 default: 824 break; 825 } 826 vcap_key_bit_set(vcap, &data, VCAP_IS1_HK_TYPE, 827 type ? OCELOT_VCAP_BIT_1 : OCELOT_VCAP_BIT_0); 828 829 is1_action_set(ocelot, &data, ace); 830 vcap_data_set(data.counter, data.counter_offset, 831 vcap->counter_width, ace->stats.pkts); 832 833 /* Write row */ 834 vcap_entry2cache(ocelot, vcap, &data); 835 vcap_action2cache(ocelot, vcap, &data); 836 vcap_row_cmd(ocelot, vcap, row, VCAP_CMD_WRITE, VCAP_SEL_ALL); 837 } 838 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org