Patch "net/mlx5_core: Fix trimming down IRQ number" has been added to the 4.3-stable tree
Subsystems (6)
This is a note to let you know that I've just added the patch titled
net/mlx5_core: Fix trimming down IRQ number
to the 4.3-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
net-mlx5_core-fix-trimming-down-irq-number.patch
and it can be found in the queue-4.3 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From foo@baz Tue Jan 26 21:35:03 PST 2016
From: Doron Tsur <[email protected]>
Date: Sun, 17 Jan 2016 11:25:47 +0200
Subject: net/mlx5_core: Fix trimming down IRQ number
From: Doron Tsur <[email protected]>
[ Upstream commit 0b6e26ce89391327d955a756a7823272238eb867 ]
With several ConnectX-4 cards installed on a server, one may receive irqn > 255 from the kernel API, which we mistakenly trim to 8bit.
This causes EQ creation failure with the following stack trace:
[<ffffffff812a11f4>] dump_stack+0x48/0x64 [<ffffffff810ace21>] __setup_irq+0x3a1/0x4f0 [<ffffffff810ad7e0>] request_threaded_irq+0x120/0x180 [<ffffffffa0923660>] ? mlx5_eq_int+0x450/0x450 [mlx5_core] [<ffffffffa0922f64>] mlx5_create_map_eq+0x1e4/0x2b0 [mlx5_core] [<ffffffffa091de01>] alloc_comp_eqs+0xb1/0x180 [mlx5_core] [<ffffffffa091ea99>] mlx5_dev_init+0x5e9/0x6e0 [mlx5_core] [<ffffffffa091ec29>] init_one+0x99/0x1c0 [mlx5_core] [<ffffffff812e2afc>] local_pci_probe+0x4c/0xa0
Fixing it by changing of the irqn type from u8 to unsigned int to support values > 255
--- drivers/infiniband/hw/mlx5/cq.c | 2 +- drivers/net/ethernet/mellanox/mlx5/core/en_main.c | 6 +++--- drivers/net/ethernet/mellanox/mlx5/core/main.c | 3 ++- include/linux/mlx5/cq.h | 2 +- include/linux/mlx5/driver.h | 5 +++-- 5 files changed, 10 insertions(+), 8 deletions(-)
drivers/infiniband/hw/mlx5/cq.c +1 -1
@@ -756,7 +756,7 @@ struct ib_cq *mlx5_ib_create_cq(struct iint uninitialized_var (index );int uninitialized_var (inlen );int cqe_size; -int irqn; +unsigned int irqn;int eqn;int err;
drivers/net/ethernet/mellanox/mlx5/core/en_main.c +3 -3
@@ -746,7 +746,7 @@ static int mlx5e_create_cq(struct mlx5e_struct mlx5_core_dev *mdev = priv->mdev;struct mlx5_core_cq *mcq = &cq->mcq;int eqn_not_used; -int irqn; +unsigned int irqn;int err;u32 i;
@@ -800,7 +800,7 @@ static int mlx5e_enable_cq(struct mlx5e_void *in;void *cqc;int inlen; -int irqn_not_used; +unsigned int irqn_not_used;int eqn;int err;
@@ -1498,7 +1498,7 @@ static int mlx5e_create_drop_cq(struct mstruct mlx5_core_dev *mdev = priv->mdev;struct mlx5_core_cq *mcq = &cq->mcq;int eqn_not_used; -int irqn; +unsigned int irqn;int err; err = mlx5_cqwq_create(mdev, ¶m->wq, param->cqc, &cq->wq,
drivers/net/ethernet/mellanox/mlx5/core/main.c +2 -1
@@ -520,7 +520,8 @@ static void mlx5_irq_clear_affinity_hintmlx5_irq_clear_affinity_hint (mdev, i); } -int mlx5_vector2eqn (struct mlx5_core_dev *dev,int vector,int *eqn,int *irqn) +int mlx5_vector2eqn (struct mlx5_core_dev *dev,int vector,int *eqn, +unsigned int *irqn) {struct mlx5_eq_table *table = &dev->priv.eq_table;struct mlx5_eq *eq, *n;
include/linux/mlx5/cq.h +1 -1
@@ -45,7 +45,7 @@ struct mlx5_core_cq {atomic_t refcount;struct completion free;unsigned vector; -int irqn; +unsigned int irqn;void (*comp) (struct mlx5_core_cq *);void (*event) (struct mlx5_core_cq *,enum mlx5_event );struct mlx5_uar *uar;
include/linux/mlx5/driver.h +3 -2
@@ -303,7 +303,7 @@ struct mlx5_eq {u32 cons_index;struct mlx5_buf buf;int size; -u8 irqn; +unsigned int irqn;u8 eqn;int nent;u64 mask;
@@ -738,7 +738,8 @@ int mlx5_create_map_eq(struct mlx5_core_int mlx5_destroy_unmap_eq (struct mlx5_core_dev *dev,struct mlx5_eq *eq);int mlx5_start_eqs (struct mlx5_core_dev *dev);int mlx5_stop_eqs (struct mlx5_core_dev *dev); -int mlx5_vector2eqn (struct mlx5_core_dev *dev,int vector,int *eqn,int *irqn); +int mlx5_vector2eqn (struct mlx5_core_dev *dev,int vector,int *eqn, +unsigned int *irqn);int mlx5_core_attach_mcg (struct mlx5_core_dev *dev,union ib_gid *mgid,u32 qpn);int mlx5_core_detach_mcg (struct mlx5_core_dev *dev,union ib_gid *mgid,u32 qpn);
Patches currently in stable-queue which might be from [email protected] are
queue-4.3/net-mlx5_core-fix-trimming-down-irq-number.patch