diff options
author | Matan Barak <matanb@mellanox.com> | 2016-04-17 16:08:41 +0200 |
---|---|---|
committer | Doug Ledford <dledford@redhat.com> | 2016-05-18 16:45:49 +0200 |
commit | c16d2750a08c8ccaf98d65f287a8aec91bb9610d (patch) | |
tree | 21fbe727b8a95609dbad0d4a7e6ac2e94fe78177 /drivers/infiniband | |
parent | net/mlx5_core: Use tasklet for user-space CQ completion events (diff) | |
download | linux-c16d2750a08c8ccaf98d65f287a8aec91bb9610d.tar.xz linux-c16d2750a08c8ccaf98d65f287a8aec91bb9610d.zip |
IB/mlx5: Fire the CQ completion handler from tasklet
Previously, mlx5_ib_cq_comp was executed from interrupt context.
Under heavy load, this could cause the CPU core to be in an interrupt
context too long.
Instead of executing the handler from the interrupt context we
execute it from a much friendly tasklet context.
Signed-off-by: Matan Barak <matanb@mellanox.com>
Signed-off-by: Doug Ledford <dledford@redhat.com>
Diffstat (limited to 'drivers/infiniband')
-rw-r--r-- | drivers/infiniband/hw/mlx5/cq.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/drivers/infiniband/hw/mlx5/cq.c b/drivers/infiniband/hw/mlx5/cq.c index a00ba4418de9..dabcc65bd65e 100644 --- a/drivers/infiniband/hw/mlx5/cq.c +++ b/drivers/infiniband/hw/mlx5/cq.c @@ -879,7 +879,10 @@ struct ib_cq *mlx5_ib_create_cq(struct ib_device *ibdev, mlx5_ib_dbg(dev, "cqn 0x%x\n", cq->mcq.cqn); cq->mcq.irqn = irqn; - cq->mcq.comp = mlx5_ib_cq_comp; + if (context) + cq->mcq.tasklet_ctx.comp = mlx5_ib_cq_comp; + else + cq->mcq.comp = mlx5_ib_cq_comp; cq->mcq.event = mlx5_ib_cq_event; INIT_LIST_HEAD(&cq->wc_list); |