Commit 4e0e2ea1 authored by Yishai Hadas's avatar Yishai Hadas Committed by Leon Romanovsky

net/mlx5: Report EQE data upon CQ completion

Report EQE data upon CQ completion to let upper layers use this data.
Signed-off-by: default avatarYishai Hadas <yishaih@mellanox.com>
Acked-by: default avatarSaeed Mahameed <saeedm@mellanox.com>
Signed-off-by: default avatarLeon Romanovsky <leonro@mellanox.com>
parent 70a43d3f
...@@ -37,7 +37,7 @@ ...@@ -37,7 +37,7 @@
#include "mlx5_ib.h" #include "mlx5_ib.h"
#include "srq.h" #include "srq.h"
static void mlx5_ib_cq_comp(struct mlx5_core_cq *cq) static void mlx5_ib_cq_comp(struct mlx5_core_cq *cq, struct mlx5_eqe *eqe)
{ {
struct ib_cq *ibcq = &to_mibcq(cq)->ibcq; struct ib_cq *ibcq = &to_mibcq(cq)->ibcq;
......
...@@ -4492,7 +4492,7 @@ static void mlx5_ib_handle_internal_error(struct mlx5_ib_dev *ibdev) ...@@ -4492,7 +4492,7 @@ static void mlx5_ib_handle_internal_error(struct mlx5_ib_dev *ibdev)
* lock/unlock above locks Now need to arm all involved CQs. * lock/unlock above locks Now need to arm all involved CQs.
*/ */
list_for_each_entry(mcq, &cq_armed_list, reset_notify) { list_for_each_entry(mcq, &cq_armed_list, reset_notify) {
mcq->comp(mcq); mcq->comp(mcq, NULL);
} }
spin_unlock_irqrestore(&ibdev->reset_flow_resource_lock, flags); spin_unlock_irqrestore(&ibdev->reset_flow_resource_lock, flags);
} }
......
...@@ -6297,7 +6297,7 @@ static void handle_drain_completion(struct ib_cq *cq, ...@@ -6297,7 +6297,7 @@ static void handle_drain_completion(struct ib_cq *cq,
/* Run the CQ handler - this makes sure that the drain WR will /* Run the CQ handler - this makes sure that the drain WR will
* be processed if wasn't processed yet. * be processed if wasn't processed yet.
*/ */
mcq->mcq.comp(&mcq->mcq); mcq->mcq.comp(&mcq->mcq, NULL);
} }
wait_for_completion(&sdrain->done); wait_for_completion(&sdrain->done);
......
...@@ -58,7 +58,7 @@ void mlx5_cq_tasklet_cb(unsigned long data) ...@@ -58,7 +58,7 @@ void mlx5_cq_tasklet_cb(unsigned long data)
list_for_each_entry_safe(mcq, temp, &ctx->process_list, list_for_each_entry_safe(mcq, temp, &ctx->process_list,
tasklet_ctx.list) { tasklet_ctx.list) {
list_del_init(&mcq->tasklet_ctx.list); list_del_init(&mcq->tasklet_ctx.list);
mcq->tasklet_ctx.comp(mcq); mcq->tasklet_ctx.comp(mcq, NULL);
mlx5_cq_put(mcq); mlx5_cq_put(mcq);
if (time_after(jiffies, end)) if (time_after(jiffies, end))
break; break;
...@@ -68,7 +68,8 @@ void mlx5_cq_tasklet_cb(unsigned long data) ...@@ -68,7 +68,8 @@ void mlx5_cq_tasklet_cb(unsigned long data)
tasklet_schedule(&ctx->task); tasklet_schedule(&ctx->task);
} }
static void mlx5_add_cq_to_tasklet(struct mlx5_core_cq *cq) static void mlx5_add_cq_to_tasklet(struct mlx5_core_cq *cq,
struct mlx5_eqe *eqe)
{ {
unsigned long flags; unsigned long flags;
struct mlx5_eq_tasklet *tasklet_ctx = cq->tasklet_ctx.priv; struct mlx5_eq_tasklet *tasklet_ctx = cq->tasklet_ctx.priv;
......
...@@ -780,7 +780,7 @@ netdev_tx_t mlx5e_sq_xmit(struct mlx5e_txqsq *sq, struct sk_buff *skb, ...@@ -780,7 +780,7 @@ netdev_tx_t mlx5e_sq_xmit(struct mlx5e_txqsq *sq, struct sk_buff *skb,
struct mlx5e_tx_wqe *wqe, u16 pi, bool xmit_more); struct mlx5e_tx_wqe *wqe, u16 pi, bool xmit_more);
void mlx5e_trigger_irq(struct mlx5e_icosq *sq); void mlx5e_trigger_irq(struct mlx5e_icosq *sq);
void mlx5e_completion_event(struct mlx5_core_cq *mcq); void mlx5e_completion_event(struct mlx5_core_cq *mcq, struct mlx5_eqe *eqe);
void mlx5e_cq_error_event(struct mlx5_core_cq *mcq, enum mlx5_event event); void mlx5e_cq_error_event(struct mlx5_core_cq *mcq, enum mlx5_event event);
int mlx5e_napi_poll(struct napi_struct *napi, int budget); int mlx5e_napi_poll(struct napi_struct *napi, int budget);
bool mlx5e_poll_tx_cq(struct mlx5e_cq *cq, int napi_budget); bool mlx5e_poll_tx_cq(struct mlx5e_cq *cq, int napi_budget);
......
...@@ -136,7 +136,7 @@ int mlx5e_napi_poll(struct napi_struct *napi, int budget) ...@@ -136,7 +136,7 @@ int mlx5e_napi_poll(struct napi_struct *napi, int budget)
return work_done; return work_done;
} }
void mlx5e_completion_event(struct mlx5_core_cq *mcq) void mlx5e_completion_event(struct mlx5_core_cq *mcq, struct mlx5_eqe *eqe)
{ {
struct mlx5e_cq *cq = container_of(mcq, struct mlx5e_cq, mcq); struct mlx5e_cq *cq = container_of(mcq, struct mlx5e_cq, mcq);
......
...@@ -153,7 +153,7 @@ static int mlx5_eq_comp_int(struct notifier_block *nb, ...@@ -153,7 +153,7 @@ static int mlx5_eq_comp_int(struct notifier_block *nb,
cq = mlx5_eq_cq_get(eq, cqn); cq = mlx5_eq_cq_get(eq, cqn);
if (likely(cq)) { if (likely(cq)) {
++cq->arm_sn; ++cq->arm_sn;
cq->comp(cq); cq->comp(cq, eqe);
mlx5_cq_put(cq); mlx5_cq_put(cq);
} else { } else {
mlx5_core_warn(eq->dev, "Completion event for bogus CQ 0x%x\n", cqn); mlx5_core_warn(eq->dev, "Completion event for bogus CQ 0x%x\n", cqn);
......
...@@ -414,7 +414,8 @@ static void mlx5_fpga_conn_cq_tasklet(unsigned long data) ...@@ -414,7 +414,8 @@ static void mlx5_fpga_conn_cq_tasklet(unsigned long data)
mlx5_fpga_conn_cqes(conn, MLX5_FPGA_CQ_BUDGET); mlx5_fpga_conn_cqes(conn, MLX5_FPGA_CQ_BUDGET);
} }
static void mlx5_fpga_conn_cq_complete(struct mlx5_core_cq *mcq) static void mlx5_fpga_conn_cq_complete(struct mlx5_core_cq *mcq,
struct mlx5_eqe *eqe)
{ {
struct mlx5_fpga_conn *conn; struct mlx5_fpga_conn *conn;
......
...@@ -47,7 +47,7 @@ struct mlx5_core_cq { ...@@ -47,7 +47,7 @@ struct mlx5_core_cq {
struct completion free; struct completion free;
unsigned vector; unsigned vector;
unsigned int irqn; unsigned int irqn;
void (*comp) (struct mlx5_core_cq *); void (*comp)(struct mlx5_core_cq *cq, struct mlx5_eqe *eqe);
void (*event) (struct mlx5_core_cq *, enum mlx5_event); void (*event) (struct mlx5_core_cq *, enum mlx5_event);
u32 cons_index; u32 cons_index;
unsigned arm_sn; unsigned arm_sn;
...@@ -55,7 +55,7 @@ struct mlx5_core_cq { ...@@ -55,7 +55,7 @@ struct mlx5_core_cq {
int pid; int pid;
struct { struct {
struct list_head list; struct list_head list;
void (*comp)(struct mlx5_core_cq *); void (*comp)(struct mlx5_core_cq *cq, struct mlx5_eqe *eqe);
void *priv; void *priv;
} tasklet_ctx; } tasklet_ctx;
int reset_notify_added; int reset_notify_added;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment