Merge tag 'mlx5-fixes-2017-11-08' of git://git.kernel.org/pub/scm/linux/kernel/git/saeed/linux

Saeed Mahameed says:

====================
Mellanox, mlx5 fixes 2017-11-08

The following series includes some fixes for mlx5 core and etherent
driver.

Sorry for the late submission but as you can see i have some very
critical fixes below that i would like them merged into this RC.

Please pull and let me know if there is any problem.

For -stable:
('net/mlx5e: Set page to null in case dma mapping fails') kernels >= 4.13
('net/mlx5: FPGA, return -EINVAL if size is zero') kernels >= 4.13
('net/mlx5: Cancel health poll before sending panic teardown command') kernels >= 4.13

V1->V2:
- Fix Reviewed-by tag of the 2nd patch.
- Drop the FPGA 0 size fix, it needs some more change log info.
====================

Signed-off-by: David S. Miller <davem@davemloft.net>

Changed files
+20 -13
drivers
net
ethernet
mellanox
+1 -1
drivers/net/ethernet/mellanox/mlx5/core/dev.c
··· 93 93 list_splice_init(&priv->waiting_events_list, &temp); 94 94 if (!dev_ctx->context) 95 95 goto out; 96 - list_for_each_entry_safe(de, n, &priv->waiting_events_list, list) 96 + list_for_each_entry_safe(de, n, &temp, list) 97 97 dev_ctx->intf->event(dev, dev_ctx->context, de->event, de->param); 98 98 99 99 out:
+1 -1
drivers/net/ethernet/mellanox/mlx5/core/en.h
··· 67 67 #define MLX5E_PARAMS_DEFAULT_LOG_RQ_SIZE 0xa 68 68 #define MLX5E_PARAMS_MAXIMUM_LOG_RQ_SIZE 0xd 69 69 70 - #define MLX5E_PARAMS_MINIMUM_LOG_RQ_SIZE_MPW 0x1 70 + #define MLX5E_PARAMS_MINIMUM_LOG_RQ_SIZE_MPW 0x2 71 71 #define MLX5E_PARAMS_DEFAULT_LOG_RQ_SIZE_MPW 0x3 72 72 #define MLX5E_PARAMS_MAXIMUM_LOG_RQ_SIZE_MPW 0x6 73 73
+5 -7
drivers/net/ethernet/mellanox/mlx5/core/en_rx.c
··· 215 215 static inline int mlx5e_page_alloc_mapped(struct mlx5e_rq *rq, 216 216 struct mlx5e_dma_info *dma_info) 217 217 { 218 - struct page *page; 219 - 220 218 if (mlx5e_rx_cache_get(rq, dma_info)) 221 219 return 0; 222 220 223 - page = dev_alloc_pages(rq->buff.page_order); 224 - if (unlikely(!page)) 221 + dma_info->page = dev_alloc_pages(rq->buff.page_order); 222 + if (unlikely(!dma_info->page)) 225 223 return -ENOMEM; 226 224 227 - dma_info->addr = dma_map_page(rq->pdev, page, 0, 225 + dma_info->addr = dma_map_page(rq->pdev, dma_info->page, 0, 228 226 RQ_PAGE_SIZE(rq), rq->buff.map_dir); 229 227 if (unlikely(dma_mapping_error(rq->pdev, dma_info->addr))) { 230 - put_page(page); 228 + put_page(dma_info->page); 229 + dma_info->page = NULL; 231 230 return -ENOMEM; 232 231 } 233 - dma_info->page = page; 234 232 235 233 return 0; 236 234 }
+6 -4
drivers/net/ethernet/mellanox/mlx5/core/en_txrx.c
··· 49 49 struct mlx5e_channel *c = container_of(napi, struct mlx5e_channel, 50 50 napi); 51 51 bool busy = false; 52 - int work_done; 52 + int work_done = 0; 53 53 int i; 54 54 55 55 for (i = 0; i < c->num_tc; i++) ··· 58 58 if (c->xdp) 59 59 busy |= mlx5e_poll_xdpsq_cq(&c->rq.xdpsq.cq); 60 60 61 - work_done = mlx5e_poll_rx_cq(&c->rq.cq, budget); 62 - busy |= work_done == budget; 61 + if (likely(budget)) { /* budget=0 means: don't poll rx rings */ 62 + work_done = mlx5e_poll_rx_cq(&c->rq.cq, budget); 63 + busy |= work_done == budget; 64 + } 63 65 64 66 busy |= c->rq.post_wqes(&c->rq); 65 67 66 68 if (busy) { 67 69 if (likely(mlx5e_channel_no_affinity_change(c))) 68 70 return budget; 69 - if (work_done == budget) 71 + if (budget && work_done == budget) 70 72 work_done--; 71 73 } 72 74
+7
drivers/net/ethernet/mellanox/mlx5/core/main.c
··· 1482 1482 return -EAGAIN; 1483 1483 } 1484 1484 1485 + /* Panic tear down fw command will stop the PCI bus communication 1486 + * with the HCA, so the health polll is no longer needed. 1487 + */ 1488 + mlx5_drain_health_wq(dev); 1489 + mlx5_stop_health_poll(dev); 1490 + 1485 1491 ret = mlx5_cmd_force_teardown_hca(dev); 1486 1492 if (ret) { 1487 1493 mlx5_core_dbg(dev, "Firmware couldn't do fast unload error: %d\n", ret); 1494 + mlx5_start_health_poll(dev); 1488 1495 return ret; 1489 1496 } 1490 1497