X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;ds=sidebyside;f=drivers%2Fnet%2Fmlx4%2Fmlx4_intr.c;h=d56009c4184522c48c25100537de2201d838de7e;hb=8089aa75c513e76a0afc029389a52e545786a9d1;hp=4f335267556530b4257fd3a67523170b60fb3dc2;hpb=099c2c5376131b3d352d70f8904e586c0e84651e;p=dpdk.git diff --git a/drivers/net/mlx4/mlx4_intr.c b/drivers/net/mlx4/mlx4_intr.c index 4f33526755..d56009c418 100644 --- a/drivers/net/mlx4/mlx4_intr.c +++ b/drivers/net/mlx4/mlx4_intr.c @@ -8,7 +8,6 @@ * Interrupts handling for mlx4 driver. */ -#include #include #include #include @@ -24,7 +23,7 @@ #include #include -#include +#include #include #include @@ -122,12 +121,12 @@ mlx4_link_status_alarm(struct mlx4_priv *priv) const struct rte_intr_conf *const intr_conf = Ð_DEV(priv)->data->dev_conf.intr_conf; - assert(priv->intr_alarm == 1); + MLX4_ASSERT(priv->intr_alarm == 1); priv->intr_alarm = 0; if (intr_conf->lsc && !mlx4_link_status_check(priv)) - _rte_eth_dev_callback_process(ETH_DEV(priv), - RTE_ETH_EVENT_INTR_LSC, - NULL); + rte_eth_dev_callback_process(ETH_DEV(priv), + RTE_ETH_EVENT_INTR_LSC, + NULL); } /** @@ -208,8 +207,8 @@ mlx4_interrupt_handler(struct mlx4_priv *priv) } for (i = 0; i != RTE_DIM(caught); ++i) if (caught[i]) - _rte_eth_dev_callback_process(ETH_DEV(priv), type[i], - NULL); + rte_eth_dev_callback_process(ETH_DEV(priv), type[i], + NULL); } /** @@ -327,13 +326,20 @@ mlx4_rx_intr_disable(struct rte_eth_dev *dev, uint16_t idx) } else { ret = mlx4_glue->get_cq_event(rxq->cq->channel, &ev_cq, &ev_ctx); - if (ret || ev_cq != rxq->cq) + /** For non-zero ret save the errno (may be EAGAIN + * which means the get_cq_event function was called before + * receiving one). + */ + if (ret) + ret = errno; + else if (ev_cq != rxq->cq) ret = EINVAL; } if (ret) { rte_errno = ret; - WARN("unable to disable interrupt on rx queue %d", - idx); + if (ret != EAGAIN) + WARN("unable to disable interrupt on rx queue %d", + idx); } else { rxq->mcq.arm_sn++; mlx4_glue->ack_cq_events(rxq->cq, 1);