tree: https://git.kernel.org/pub/scm/linux/kernel/git/saeed/linux.git net-next-mlx5 head: efb97448db0214e087358988a953fe3bdc065e58 commit: 1cd0121b3dbd6b1a18341f1e1dd39aff96507985 [68/77] net/mlx5e: Add trap entity to ETH driver config: i386-randconfig-m021-20201227 (attached as .config) compiler: gcc-9 (Debian 9.3.0-15) 9.3.0 If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot smatch warnings: drivers/net/ethernet/mellanox/mlx5/core/en/trap.c:177 mlx5e_open_trap_rq() warn: inconsistent indenting drivers/net/ethernet/mellanox/mlx5/core/en/trap.c:362 mlx5e_handle_action_trap() error: we previously assumed 'priv->en_trap' could be null (see line 351) vim +177 drivers/net/ethernet/mellanox/mlx5/core/en/trap.c 148 149 static int mlx5e_open_trap_rq(struct mlx5e_priv *priv, struct napi_struct *napi, 150 struct mlx5e_rq_stats *stats, struct mlx5e_params *params, 151 struct mlx5e_rq_param *rq_param, 152 struct mlx5e_ch_stats *ch_stats, 153 struct mlx5e_rq *rq) 154 { 155 struct mlx5_core_dev *mdev = priv->mdev; 156 struct mlx5e_create_cq_param ccp = {}; 157 struct dim_cq_moder trap_moder = {}; 158 struct mlx5e_cq *cq = &rq->cq; 159 int err; 160 161 ccp.node = dev_to_node(mdev->device); 162 ccp.ch_stats = ch_stats; 163 ccp.napi = napi; 164 ccp.ix = 0; 165 err = mlx5e_open_cq(priv, trap_moder, &rq_param->cqp, &ccp, cq); 166 if (err) 167 return err; 168 169 err = mlx5e_alloc_trap_rq(priv, rq_param, stats, params, ch_stats, rq); 170 if (err) 171 goto err_destroy_cq; 172 173 err = mlx5e_create_rq(rq, rq_param); 174 if (err) 175 goto err_free_rq; 176 > 177 err = mlx5e_modify_rq_state(rq, MLX5_RQC_STATE_RST, MLX5_RQC_STATE_RDY); 178 if (err) 179 goto err_destroy_rq; 180 181 return 0; 182 183 err_destroy_rq: 184 mlx5e_destroy_rq(rq); 185 mlx5e_free_rx_descs(rq); 186 err_free_rq: 187 mlx5e_free_trap_rq(rq); 188 err_destroy_cq: 189 mlx5e_close_cq(cq); 190 191 return err; 192 } 193 194 static void mlx5e_close_trap_rq(struct mlx5e_rq *rq) 195 { 196 mlx5e_destroy_rq(rq); 197 mlx5e_free_rx_descs(rq); 198 mlx5e_free_trap_rq(rq); 199 mlx5e_close_cq(&rq->cq); 200 } 201 202 static int mlx5e_create_trap_direct_rq_tir(struct mlx5_core_dev *mdev, struct mlx5e_tir *tir, 203 u32 rqn) 204 { 205 void *tirc; 206 int inlen; 207 u32 *in; 208 int err; 209 210 inlen = MLX5_ST_SZ_BYTES(create_tir_in); 211 in = kvzalloc(inlen, GFP_KERNEL); 212 if (!in) 213 return -ENOMEM; 214 215 tirc = MLX5_ADDR_OF(create_tir_in, in, ctx); 216 MLX5_SET(tirc, tirc, transport_domain, mdev->mlx5e_res.td.tdn); 217 MLX5_SET(tirc, tirc, rx_hash_fn, MLX5_RX_HASH_FN_NONE); 218 MLX5_SET(tirc, tirc, disp_type, MLX5_TIRC_DISP_TYPE_DIRECT); 219 MLX5_SET(tirc, tirc, inline_rqn, rqn); 220 err = mlx5e_create_tir(mdev, tir, in); 221 kvfree(in); 222 223 return err; 224 } 225 226 static void mlx5e_destroy_trap_direct_rq_tir(struct mlx5_core_dev *mdev, struct mlx5e_tir *tir) 227 { 228 mlx5e_destroy_tir(mdev, tir); 229 } 230 231 static void mlx5e_activate_trap_rq(struct mlx5e_rq *rq) 232 { 233 set_bit(MLX5E_RQ_STATE_ENABLED, &rq->state); 234 } 235 236 static void mlx5e_deactivate_trap_rq(struct mlx5e_rq *rq) 237 { 238 clear_bit(MLX5E_RQ_STATE_ENABLED, &rq->state); 239 } 240 241 static void mlx5e_build_trap_params(struct mlx5e_priv *priv, struct mlx5e_trap *t) 242 { 243 struct mlx5e_params *params = &t->params; 244 245 params->rq_wq_type = MLX5_WQ_TYPE_CYCLIC; 246 mlx5e_init_rq_type_params(priv->mdev, params); 247 params->sw_mtu = priv->netdev->max_mtu; 248 mlx5e_build_rq_param(priv, params, NULL, &t->rq_param); 249 } 250 251 static int mlx5e_open_trap(struct mlx5e_priv *priv) 252 { 253 int cpu = cpumask_first(mlx5_comp_irq_get_affinity_mask(priv->mdev, 0)); 254 struct net_device *netdev = priv->netdev; 255 struct mlx5e_trap *t; 256 int err; 257 258 t = kvzalloc_node(sizeof(*t), GFP_KERNEL, cpu_to_node(cpu)); 259 if (!t) 260 return -ENOMEM; 261 262 mlx5e_build_trap_params(priv, t); 263 264 t->priv = priv; 265 t->mdev = priv->mdev; 266 t->tstamp = &priv->tstamp; 267 t->pdev = mlx5_core_dma_dev(priv->mdev); 268 t->netdev = priv->netdev; 269 t->mkey_be = cpu_to_be32(priv->mdev->mlx5e_res.mkey.key); 270 t->stats = &priv->trap_stats.ch; 271 272 netif_napi_add(netdev, &t->napi, mlx5e_trap_napi_poll, 64); 273 274 err = mlx5e_open_trap_rq(priv, &t->napi, 275 &priv->trap_stats.rq, 276 &t->params, &t->rq_param, 277 &priv->trap_stats.ch, 278 &t->rq); 279 if (unlikely(err)) 280 goto err_napi_del; 281 282 err = mlx5e_create_trap_direct_rq_tir(t->mdev, &t->tir, t->rq.rqn); 283 if (err) 284 goto err_close_trap_rq; 285 286 priv->en_trap = t; 287 return 0; 288 289 err_close_trap_rq: 290 mlx5e_close_trap_rq(&t->rq); 291 err_napi_del: 292 netif_napi_del(&t->napi); 293 kvfree(t); 294 return err; 295 } 296 297 void mlx5e_close_trap(struct mlx5e_priv *priv) 298 { 299 struct mlx5e_trap *trap = priv->en_trap; 300 301 mlx5e_destroy_trap_direct_rq_tir(trap->mdev, &trap->tir); 302 mlx5e_close_trap_rq(&trap->rq); 303 netif_napi_del(&trap->napi); 304 305 kvfree(trap); 306 priv->en_trap = NULL; 307 } 308 309 static void mlx5e_activate_trap(struct mlx5e_priv *priv) 310 { 311 struct mlx5e_trap *trap = priv->en_trap; 312 313 napi_enable(&trap->napi); 314 mlx5e_activate_trap_rq(&trap->rq); 315 napi_schedule(&trap->napi); 316 } 317 318 void mlx5e_deactivate_trap(struct mlx5e_priv *priv) 319 { 320 struct mlx5e_trap *trap = priv->en_trap; 321 322 mlx5e_deactivate_trap_rq(&trap->rq); 323 napi_disable(&trap->napi); 324 } 325 326 static int mlx5e_add_trap_queue(struct mlx5e_priv *priv) 327 { 328 int err; 329 330 err = mlx5e_open_trap(priv); 331 if (err) 332 return err; 333 334 mlx5e_activate_trap(priv); 335 return 0; 336 } 337 338 static void mlx5e_del_trap_queue(struct mlx5e_priv *priv) 339 { 340 mlx5e_deactivate_trap(priv); 341 mlx5e_close_trap(priv); 342 } 343 344 static int mlx5e_trap_get_tirn(struct mlx5e_trap *en_trap) 345 { 346 return en_trap->tir.tirn; 347 } 348 349 static int mlx5e_handle_action_trap(struct mlx5e_priv *priv, int trap_id) 350 { > 351 bool open_queue = !priv->en_trap; 352 int err; 353 354 if (open_queue) { 355 err = mlx5e_add_trap_queue(priv); 356 if (err) 357 return err; 358 } 359 360 switch (trap_id) { 361 case DEVLINK_TRAP_GENERIC_ID_INGRESS_VLAN_FILTER: > 362 err = mlx5e_add_vlan_trap(priv, trap_id, mlx5e_trap_get_tirn(priv->en_trap)); 363 if (err) 364 goto err_out; 365 break; 366 default: 367 netdev_warn(priv->netdev, "%s: Unknown trap id %d\n", __func__, trap_id); 368 err = -EINVAL; 369 goto err_out; 370 } 371 return 0; 372 373 err_out: 374 if (open_queue) 375 mlx5e_del_trap_queue(priv); 376 return err; 377 } 378 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org