Hi Maxim, Thank you for the patch! Perhaps something to improve:
[auto build test WARNING on net-next/master] url: https://github.com/0day-ci/linux/commits/Maxim-Mikityanskiy/HTB-offload/20201210-000703 base: https://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next.git afae3cc2da100ead3cd6ef4bb1fb8bc9d4b817c5 config: x86_64-randconfig-s021-20201210 (attached as .config) compiler: gcc-9 (Debian 9.3.0-15) 9.3.0 reproduce: # apt-get install sparse # sparse version: v0.6.3-179-ga00755aa-dirty # https://github.com/0day-ci/linux/commit/2b06403da63c880ec87d0bcee80b8936116935c6 git remote add linux-review https://github.com/0day-ci/linux git fetch --no-tags linux-review Maxim-Mikityanskiy/HTB-offload/20201210-000703 git checkout 2b06403da63c880ec87d0bcee80b8936116935c6 # save the attached .config to linux build tree make W=1 C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' ARCH=x86_64 If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <l...@intel.com> "sparse warnings: (new ones prefixed by >>)" >> drivers/net/ethernet/mellanox/mlx5/core/en_txrx.c:135:17: sparse: sparse: >> incorrect type in assignment (different address spaces) @@ expected >> struct mlx5e_txqsq **qos_sqs @@ got struct mlx5e_txqsq [noderef] __rcu >> ** @@ drivers/net/ethernet/mellanox/mlx5/core/en_txrx.c:135:17: sparse: expected struct mlx5e_txqsq **qos_sqs drivers/net/ethernet/mellanox/mlx5/core/en_txrx.c:135:17: sparse: got struct mlx5e_txqsq [noderef] __rcu ** >> drivers/net/ethernet/mellanox/mlx5/core/en_txrx.c:149:50: sparse: sparse: >> incompatible types in comparison expression (different address spaces): >> drivers/net/ethernet/mellanox/mlx5/core/en_txrx.c:149:50: sparse: struct >> mlx5e_txqsq [noderef] __rcu * >> drivers/net/ethernet/mellanox/mlx5/core/en_txrx.c:149:50: sparse: struct >> mlx5e_txqsq * drivers/net/ethernet/mellanox/mlx5/core/en_txrx.c:211:50: sparse: sparse: incompatible types in comparison expression (different address spaces): drivers/net/ethernet/mellanox/mlx5/core/en_txrx.c:211:50: sparse: struct mlx5e_txqsq [noderef] __rcu * drivers/net/ethernet/mellanox/mlx5/core/en_txrx.c:211:50: sparse: struct mlx5e_txqsq * -- >> drivers/net/ethernet/mellanox/mlx5/core/en/qos.c:174:17: sparse: sparse: >> incorrect type in assignment (different address spaces) @@ expected >> struct mlx5e_txqsq **qos_sqs @@ got struct mlx5e_txqsq [noderef] __rcu >> ** @@ drivers/net/ethernet/mellanox/mlx5/core/en/qos.c:174:17: sparse: expected struct mlx5e_txqsq **qos_sqs drivers/net/ethernet/mellanox/mlx5/core/en/qos.c:174:17: sparse: got struct mlx5e_txqsq [noderef] __rcu ** >> drivers/net/ethernet/mellanox/mlx5/core/en/qos.c:175:16: sparse: sparse: >> incompatible types in comparison expression (different address spaces): >> drivers/net/ethernet/mellanox/mlx5/core/en/qos.c:175:16: sparse: struct >> mlx5e_txqsq [noderef] __rcu * >> drivers/net/ethernet/mellanox/mlx5/core/en/qos.c:175:16: sparse: struct >> mlx5e_txqsq * drivers/net/ethernet/mellanox/mlx5/core/en/qos.c:225:17: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct mlx5e_txqsq **qos_sqs @@ got struct mlx5e_txqsq [noderef] __rcu ** @@ drivers/net/ethernet/mellanox/mlx5/core/en/qos.c:225:17: sparse: expected struct mlx5e_txqsq **qos_sqs drivers/net/ethernet/mellanox/mlx5/core/en/qos.c:225:17: sparse: got struct mlx5e_txqsq [noderef] __rcu ** drivers/net/ethernet/mellanox/mlx5/core/en/qos.c:245:9: sparse: sparse: incompatible types in comparison expression (different address spaces): drivers/net/ethernet/mellanox/mlx5/core/en/qos.c:245:9: sparse: struct mlx5e_txqsq [noderef] __rcu * drivers/net/ethernet/mellanox/mlx5/core/en/qos.c:245:9: sparse: struct mlx5e_txqsq * drivers/net/ethernet/mellanox/mlx5/core/en/qos.c:301:17: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct mlx5e_txqsq **qos_sqs @@ got struct mlx5e_txqsq [noderef] __rcu ** @@ drivers/net/ethernet/mellanox/mlx5/core/en/qos.c:302:14: sparse: sparse: incompatible types in comparison expression (different address spaces): drivers/net/ethernet/mellanox/mlx5/core/en/qos.c:302:14: sparse: struct mlx5e_txqsq [noderef] __rcu * drivers/net/ethernet/mellanox/mlx5/core/en/qos.c:302:14: sparse: struct mlx5e_txqsq * drivers/net/ethernet/mellanox/mlx5/core/en/qos.c:302:14: sparse: sparse: incompatible types in comparison expression (different address spaces): drivers/net/ethernet/mellanox/mlx5/core/en/qos.c:302:14: sparse: struct mlx5e_txqsq [noderef] __rcu * drivers/net/ethernet/mellanox/mlx5/core/en/qos.c:302:14: sparse: struct mlx5e_txqsq * drivers/net/ethernet/mellanox/mlx5/core/en/qos.c:326:22: sparse: sparse: incompatible types in comparison expression (different address spaces): drivers/net/ethernet/mellanox/mlx5/core/en/qos.c:326:22: sparse: struct mlx5e_txqsq [noderef] __rcu * drivers/net/ethernet/mellanox/mlx5/core/en/qos.c:326:22: sparse: struct mlx5e_txqsq * drivers/net/ethernet/mellanox/mlx5/core/en/qos.c:423:17: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct mlx5e_txqsq **qos_sqs @@ got struct mlx5e_txqsq [noderef] __rcu ** @@ drivers/net/ethernet/mellanox/mlx5/core/en/qos.c:423:17: sparse: expected struct mlx5e_txqsq **qos_sqs drivers/net/ethernet/mellanox/mlx5/core/en/qos.c:423:17: sparse: got struct mlx5e_txqsq [noderef] __rcu ** drivers/net/ethernet/mellanox/mlx5/core/en/qos.c:431:22: sparse: sparse: incompatible types in comparison expression (different address spaces): drivers/net/ethernet/mellanox/mlx5/core/en/qos.c:431:22: sparse: struct mlx5e_txqsq [noderef] __rcu * drivers/net/ethernet/mellanox/mlx5/core/en/qos.c:431:22: sparse: struct mlx5e_txqsq * vim +135 drivers/net/ethernet/mellanox/mlx5/core/en_txrx.c 115 116 int mlx5e_napi_poll(struct napi_struct *napi, int budget) 117 { 118 struct mlx5e_channel *c = container_of(napi, struct mlx5e_channel, 119 napi); 120 struct mlx5e_ch_stats *ch_stats = c->stats; 121 struct mlx5e_xdpsq *xsksq = &c->xsksq; 122 struct mlx5e_rq *xskrq = &c->xskrq; 123 struct mlx5e_rq *rq = &c->rq; 124 struct mlx5e_txqsq **qos_sqs; 125 bool aff_change = false; 126 bool busy_xsk = false; 127 bool busy = false; 128 int work_done = 0; 129 u16 qos_sqs_size; 130 bool xsk_open; 131 int i; 132 133 rcu_read_lock(); 134 > 135 qos_sqs = rcu_dereference(c->qos_sqs); 136 137 xsk_open = test_bit(MLX5E_CHANNEL_STATE_XSK, c->state); 138 139 ch_stats->poll++; 140 141 for (i = 0; i < c->num_tc; i++) 142 busy |= mlx5e_poll_tx_cq(&c->sq[i].cq, budget); 143 144 if (unlikely(qos_sqs)) { 145 smp_rmb(); /* Pairs with mlx5e_qos_alloc_queues. */ 146 qos_sqs_size = READ_ONCE(c->qos_sqs_size); 147 148 for (i = 0; i < qos_sqs_size; i++) { > 149 struct mlx5e_txqsq *sq = > rcu_dereference(qos_sqs[i]); 150 151 if (sq) 152 busy |= mlx5e_poll_tx_cq(&sq->cq, budget); 153 } 154 } 155 156 busy |= mlx5e_poll_xdpsq_cq(&c->xdpsq.cq); 157 158 if (c->xdp) 159 busy |= mlx5e_poll_xdpsq_cq(&c->rq_xdpsq.cq); 160 161 if (likely(budget)) { /* budget=0 means: don't poll rx rings */ 162 if (xsk_open) 163 work_done = mlx5e_poll_rx_cq(&xskrq->cq, budget); 164 165 if (likely(budget - work_done)) 166 work_done += mlx5e_poll_rx_cq(&rq->cq, budget - work_done); 167 168 busy |= work_done == budget; 169 } 170 171 mlx5e_poll_ico_cq(&c->icosq.cq); 172 if (mlx5e_poll_ico_cq(&c->async_icosq.cq)) 173 /* Don't clear the flag if nothing was polled to prevent 174 * queueing more WQEs and overflowing the async ICOSQ. 175 */ 176 clear_bit(MLX5E_SQ_STATE_PENDING_XSK_TX, &c->async_icosq.state); 177 178 busy |= INDIRECT_CALL_2(rq->post_wqes, 179 mlx5e_post_rx_mpwqes, 180 mlx5e_post_rx_wqes, 181 rq); 182 if (xsk_open) { 183 busy |= mlx5e_poll_xdpsq_cq(&xsksq->cq); 184 busy_xsk |= mlx5e_napi_xsk_post(xsksq, xskrq); 185 } 186 187 busy |= busy_xsk; 188 189 if (busy) { 190 if (likely(mlx5e_channel_no_affinity_change(c))) { 191 work_done = budget; 192 goto out; 193 } 194 ch_stats->aff_change++; 195 aff_change = true; 196 if (budget && work_done == budget) 197 work_done--; 198 } 199 200 if (unlikely(!napi_complete_done(napi, work_done))) 201 goto out; 202 203 ch_stats->arm++; 204 205 for (i = 0; i < c->num_tc; i++) { 206 mlx5e_handle_tx_dim(&c->sq[i]); 207 mlx5e_cq_arm(&c->sq[i].cq); 208 } 209 if (unlikely(qos_sqs)) { 210 for (i = 0; i < qos_sqs_size; i++) { 211 struct mlx5e_txqsq *sq = rcu_dereference(qos_sqs[i]); 212 213 if (sq) { 214 mlx5e_handle_tx_dim(sq); 215 mlx5e_cq_arm(&sq->cq); 216 } 217 } 218 } 219 220 mlx5e_handle_rx_dim(rq); 221 222 mlx5e_cq_arm(&rq->cq); 223 mlx5e_cq_arm(&c->icosq.cq); 224 mlx5e_cq_arm(&c->async_icosq.cq); 225 mlx5e_cq_arm(&c->xdpsq.cq); 226 227 if (xsk_open) { 228 mlx5e_handle_rx_dim(xskrq); 229 mlx5e_cq_arm(&xsksq->cq); 230 mlx5e_cq_arm(&xskrq->cq); 231 } 232 233 if (unlikely(aff_change && busy_xsk)) { 234 mlx5e_trigger_irq(&c->icosq); 235 ch_stats->force_irq++; 236 } 237 238 out: 239 rcu_read_unlock(); 240 241 return work_done; 242 } 243 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-...@lists.01.org
.config.gz
Description: application/gzip