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>
This commit is contained in:
@@ -93,7 +93,7 @@ static void delayed_event_release(struct mlx5_device_context *dev_ctx,
|
|||||||
list_splice_init(&priv->waiting_events_list, &temp);
|
list_splice_init(&priv->waiting_events_list, &temp);
|
||||||
if (!dev_ctx->context)
|
if (!dev_ctx->context)
|
||||||
goto out;
|
goto out;
|
||||||
list_for_each_entry_safe(de, n, &priv->waiting_events_list, list)
|
list_for_each_entry_safe(de, n, &temp, list)
|
||||||
dev_ctx->intf->event(dev, dev_ctx->context, de->event, de->param);
|
dev_ctx->intf->event(dev, dev_ctx->context, de->event, de->param);
|
||||||
|
|
||||||
out:
|
out:
|
||||||
|
|||||||
@@ -67,7 +67,7 @@
|
|||||||
#define MLX5E_PARAMS_DEFAULT_LOG_RQ_SIZE 0xa
|
#define MLX5E_PARAMS_DEFAULT_LOG_RQ_SIZE 0xa
|
||||||
#define MLX5E_PARAMS_MAXIMUM_LOG_RQ_SIZE 0xd
|
#define MLX5E_PARAMS_MAXIMUM_LOG_RQ_SIZE 0xd
|
||||||
|
|
||||||
#define MLX5E_PARAMS_MINIMUM_LOG_RQ_SIZE_MPW 0x1
|
#define MLX5E_PARAMS_MINIMUM_LOG_RQ_SIZE_MPW 0x2
|
||||||
#define MLX5E_PARAMS_DEFAULT_LOG_RQ_SIZE_MPW 0x3
|
#define MLX5E_PARAMS_DEFAULT_LOG_RQ_SIZE_MPW 0x3
|
||||||
#define MLX5E_PARAMS_MAXIMUM_LOG_RQ_SIZE_MPW 0x6
|
#define MLX5E_PARAMS_MAXIMUM_LOG_RQ_SIZE_MPW 0x6
|
||||||
|
|
||||||
|
|||||||
@@ -215,22 +215,20 @@ static inline bool mlx5e_rx_cache_get(struct mlx5e_rq *rq,
|
|||||||
static inline int mlx5e_page_alloc_mapped(struct mlx5e_rq *rq,
|
static inline int mlx5e_page_alloc_mapped(struct mlx5e_rq *rq,
|
||||||
struct mlx5e_dma_info *dma_info)
|
struct mlx5e_dma_info *dma_info)
|
||||||
{
|
{
|
||||||
struct page *page;
|
|
||||||
|
|
||||||
if (mlx5e_rx_cache_get(rq, dma_info))
|
if (mlx5e_rx_cache_get(rq, dma_info))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
page = dev_alloc_pages(rq->buff.page_order);
|
dma_info->page = dev_alloc_pages(rq->buff.page_order);
|
||||||
if (unlikely(!page))
|
if (unlikely(!dma_info->page))
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
dma_info->addr = dma_map_page(rq->pdev, page, 0,
|
dma_info->addr = dma_map_page(rq->pdev, dma_info->page, 0,
|
||||||
RQ_PAGE_SIZE(rq), rq->buff.map_dir);
|
RQ_PAGE_SIZE(rq), rq->buff.map_dir);
|
||||||
if (unlikely(dma_mapping_error(rq->pdev, dma_info->addr))) {
|
if (unlikely(dma_mapping_error(rq->pdev, dma_info->addr))) {
|
||||||
put_page(page);
|
put_page(dma_info->page);
|
||||||
|
dma_info->page = NULL;
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
}
|
}
|
||||||
dma_info->page = page;
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -49,7 +49,7 @@ int mlx5e_napi_poll(struct napi_struct *napi, int budget)
|
|||||||
struct mlx5e_channel *c = container_of(napi, struct mlx5e_channel,
|
struct mlx5e_channel *c = container_of(napi, struct mlx5e_channel,
|
||||||
napi);
|
napi);
|
||||||
bool busy = false;
|
bool busy = false;
|
||||||
int work_done;
|
int work_done = 0;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
for (i = 0; i < c->num_tc; i++)
|
for (i = 0; i < c->num_tc; i++)
|
||||||
@@ -58,15 +58,17 @@ int mlx5e_napi_poll(struct napi_struct *napi, int budget)
|
|||||||
if (c->xdp)
|
if (c->xdp)
|
||||||
busy |= mlx5e_poll_xdpsq_cq(&c->rq.xdpsq.cq);
|
busy |= mlx5e_poll_xdpsq_cq(&c->rq.xdpsq.cq);
|
||||||
|
|
||||||
|
if (likely(budget)) { /* budget=0 means: don't poll rx rings */
|
||||||
work_done = mlx5e_poll_rx_cq(&c->rq.cq, budget);
|
work_done = mlx5e_poll_rx_cq(&c->rq.cq, budget);
|
||||||
busy |= work_done == budget;
|
busy |= work_done == budget;
|
||||||
|
}
|
||||||
|
|
||||||
busy |= c->rq.post_wqes(&c->rq);
|
busy |= c->rq.post_wqes(&c->rq);
|
||||||
|
|
||||||
if (busy) {
|
if (busy) {
|
||||||
if (likely(mlx5e_channel_no_affinity_change(c)))
|
if (likely(mlx5e_channel_no_affinity_change(c)))
|
||||||
return budget;
|
return budget;
|
||||||
if (work_done == budget)
|
if (budget && work_done == budget)
|
||||||
work_done--;
|
work_done--;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1482,9 +1482,16 @@ static int mlx5_try_fast_unload(struct mlx5_core_dev *dev)
|
|||||||
return -EAGAIN;
|
return -EAGAIN;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Panic tear down fw command will stop the PCI bus communication
|
||||||
|
* with the HCA, so the health polll is no longer needed.
|
||||||
|
*/
|
||||||
|
mlx5_drain_health_wq(dev);
|
||||||
|
mlx5_stop_health_poll(dev);
|
||||||
|
|
||||||
ret = mlx5_cmd_force_teardown_hca(dev);
|
ret = mlx5_cmd_force_teardown_hca(dev);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
mlx5_core_dbg(dev, "Firmware couldn't do fast unload error: %d\n", ret);
|
mlx5_core_dbg(dev, "Firmware couldn't do fast unload error: %d\n", ret);
|
||||||
|
mlx5_start_health_poll(dev);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user