Hi Ujjal, kernel test robot noticed the following build warnings:
[auto build test WARNING on net-next/main] [also build test WARNING on net/main klassert-ipsec/master linus/master v7.0-rc5 next-20260326] [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/Ujjal-Roy/ipv4-igmp-get-rid-of-IGMPV3_-QQIC-MRC-and-simplify-calculation/20260327-083159 base: net-next/main patch link: https://lore.kernel.org/r/20260326150742.50289-3-royujjal%40gmail.com patch subject: [PATCH 2/4] ipv6: mld: rename mldv2_mrc() and add mldv2_qqi() config: x86_64-randconfig-121-20260327 (https://download.01.org/0day-ci/archive/20260327/[email protected]/config) compiler: gcc-14 (Debian 14.2.0-19) 14.2.0 sparse: v0.6.5-rc1 reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260327/[email protected]/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 <[email protected]> | Closes: https://lore.kernel.org/oe-kbuild-all/[email protected]/ sparse warnings: (new ones prefixed by >>) net/ipv6/mcast.c: note: in included file: include/net/mld.h:32:43: sparse: sparse: array of flexible structures >> include/net/mld.h:147:30: sparse: sparse: cast to restricted __be16 vim +147 include/net/mld.h 29 30 struct mld2_report { 31 struct icmp6hdr mld2r_hdr; > 32 struct mld2_grec mld2r_grec[]; 33 }; 34 35 #define mld2r_type mld2r_hdr.icmp6_type 36 #define mld2r_resv1 mld2r_hdr.icmp6_code 37 #define mld2r_cksum mld2r_hdr.icmp6_cksum 38 #define mld2r_resv2 mld2r_hdr.icmp6_dataun.un_data16[0] 39 #define mld2r_ngrec mld2r_hdr.icmp6_dataun.un_data16[1] 40 41 /* MLDv2 Query */ 42 struct mld2_query { 43 struct icmp6hdr mld2q_hdr; 44 struct in6_addr mld2q_mca; 45 #if defined(__LITTLE_ENDIAN_BITFIELD) 46 __u8 mld2q_qrv:3, 47 mld2q_suppress:1, 48 mld2q_resv2:4; 49 #elif defined(__BIG_ENDIAN_BITFIELD) 50 __u8 mld2q_resv2:4, 51 mld2q_suppress:1, 52 mld2q_qrv:3; 53 #else 54 #error "Please fix <asm/byteorder.h>" 55 #endif 56 __u8 mld2q_qqic; 57 __be16 mld2q_nsrcs; 58 struct in6_addr mld2q_srcs[]; 59 }; 60 61 #define mld2q_type mld2q_hdr.icmp6_type 62 #define mld2q_code mld2q_hdr.icmp6_code 63 #define mld2q_cksum mld2q_hdr.icmp6_cksum 64 #define mld2q_mrc mld2q_hdr.icmp6_maxdelay 65 #define mld2q_resv1 mld2q_hdr.icmp6_dataun.un_data16[1] 66 67 /* RFC3810, 5.1.3. Maximum Response Code: 68 * 69 * If Maximum Response Code >= 32768, Maximum Response Code represents a 70 * floating-point value as follows: 71 * 72 * 0 1 2 3 4 5 6 7 8 9 A B C D E F 73 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 74 * |1| exp | mant | 75 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 76 */ 77 #define MLDV2_MRC_EXP(value) (((value) >> 12) & 0x0007) 78 #define MLDV2_MRC_MAN(value) ((value) & 0x0fff) 79 80 /* RFC3810, 5.1.9. QQIC (Querier's Query Interval Code): 81 * 82 * If QQIC >= 128, QQIC represents a floating-point value as follows: 83 * 84 * 0 1 2 3 4 5 6 7 85 * +-+-+-+-+-+-+-+-+ 86 * |1| exp | mant | 87 * +-+-+-+-+-+-+-+-+ 88 */ 89 #define MLDV2_QQIC_EXP(value) (((value) >> 4) & 0x07) 90 #define MLDV2_QQIC_MAN(value) ((value) & 0x0f) 91 92 #define MLD_QQIC_MIN_THRESHOLD 128 93 #define MLD_MRC_MIN_THRESHOLD 32768UL 94 #define MLDV1_MRD_MAX_COMPAT (MLD_MRC_MIN_THRESHOLD - 1) 95 96 #define MLD_MAX_QUEUE 8 97 #define MLD_MAX_SKBS 32 98 99 /* V2 exponential field decoding */ 100 101 /* Calculate Maximum Response Delay from Maximum Response Code 102 * 103 * RFC3810, 5.1.3. defines the decoding formula: 104 * 0 1 2 3 4 5 6 7 8 9 A B C D E F 105 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 106 * |1| exp | mant | 107 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 108 * Maximum Response Delay = (mant | 0x1000) << (exp+3) 109 */ 110 static inline unsigned long mldv2_mrd(const struct mld2_query *mlh2) 111 { 112 /* RFC3810, relevant sections: 113 * - 5.1.3. Maximum Response Code 114 * - 9.3. Query Response Interval 115 */ 116 unsigned long mc_mrc = ntohs(mlh2->mld2q_mrc); 117 118 if (mc_mrc < MLD_MRC_MIN_THRESHOLD) { 119 return mc_mrc; 120 } else { 121 unsigned long mc_man, mc_exp; 122 123 mc_exp = MLDV2_MRC_EXP(mc_mrc); 124 mc_man = MLDV2_MRC_MAN(mc_mrc); 125 126 return ((mc_man | 0x1000) << (mc_exp + 3)); 127 } 128 } 129 130 /* Calculate Querier's Query Interval from Querier's Query Interval Code 131 * 132 * RFC3810, 5.1.9. defines the decoding formula: 133 * 0 1 2 3 4 5 6 7 134 * +-+-+-+-+-+-+-+-+ 135 * |1| exp | mant | 136 * +-+-+-+-+-+-+-+-+ 137 * QQI = (mant | 0x10) << (exp + 3) 138 */ 139 static inline unsigned long mldv2_qqi(const struct mld2_query *mlh2) 140 { 141 /* RFC3810, relevant sections: 142 * - 5.1.9. QQIC (Querier's Query Interval Code) 143 * - 9.2. Query Interval 144 * - 9.12. Older Version Querier Present Timeout 145 * (the [Query Interval] in the last Query received) 146 */ > 147 unsigned long qqic = ntohs(mlh2->mld2q_qqic); 148 149 if (qqic < MLD_QQIC_MIN_THRESHOLD) { 150 return qqic; 151 } else { 152 unsigned long mc_man, mc_exp; 153 154 mc_exp = MLDV2_QQIC_EXP(qqic); 155 mc_man = MLDV2_QQIC_MAN(qqic); 156 157 return ((mc_man | 0x10) << (mc_exp + 3)); 158 } 159 } 160 -- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests/wiki

