diff mbox series

[v2,for-rc] RDMA/qedr: iWARP invalid(zero) doorbell address fix.

Message ID 20201127163251.14533-1-palok@marvell.com (mailing list archive)
State Accepted
Delegated to: Jason Gunthorpe
Headers show
Series [v2,for-rc] RDMA/qedr: iWARP invalid(zero) doorbell address fix. | expand

Commit Message

Alok Prasad Nov. 27, 2020, 4:32 p.m. UTC
This patch fixes issue introduced by a previous commit
where iWARP doorbell address wasn't initialized, causing
call trace when any RDMA application wants to use this
interface.

Below call trace is generated which using rping with the
iWARP interface.

==========================================================
[  325.698218] Illegal doorbell address: 0000000000000000. Legal range for doorbell addresses is [0000000011431e08..00000000ec3799d3]
[  325.752691] WARNING: CPU: 11 PID: 11990 at drivers/net/ethernet/qlogic/qed/qed_dev.c:93 qed_db_rec_sanity.isra.12+0x48/0x70 [qed]
....
[  325.807824]  hpsa scsi_transport_sas [last unloaded: crc8]
[  326.263195] CPU: 11 PID: 11990 Comm: rping Tainted: G S                5.10.0-rc1 #29
[  326.299616] Hardware name: HP ProLiant DL380 Gen9/ProLiant DL380 Gen9, BIOS P89 01/22/2018
[  326.337657] RIP: 0010:qed_db_rec_sanity.isra.12+0x48/0x70 [qed]
...
[  326.451186] RSP: 0018:ffffafc28458fa88 EFLAGS: 00010286
[  326.475309] RAX: 0000000000000000 RBX: ffff8d0d4c620000 RCX: 0000000000000000
[  326.508079] RDX: ffff8d10afde7d50 RSI: ffff8d10afdd8b40 RDI: ffff8d10afdd8b40
[  326.540849] RBP: ffffafc28458fe38 R08: 0000000000000003 R09: 0000000000007fff
[  326.573671] R10: 0000000000000001 R11: ffffafc28458f888 R12: 0000000000000000
[  326.606521] R13: 0000000000000000 R14: ffff8d0d43ccbbd0 R15: ffff8d0d48dae9c0
[  326.639406] FS:  00007fbd5267e740(0000) GS:ffff8d10afdc0000(0000) knlGS:0000000000000000
[  326.677896] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[  326.704634] CR2: 00007fbd4f258fb8 CR3: 0000000108d96003 CR4: 00000000001706e0
[  326.737465] Call Trace:
[  326.748839]  qed_db_recovery_add+0x6d/0x1f0 [qed]
[  326.770705]  qedr_create_user_qp+0x57e/0xd30 [qedr]
[  326.793350]  qedr_create_qp+0x5f3/0xab0 [qedr]
[  326.813750]  ? lookup_get_idr_uobject.part.12+0x45/0x90 [ib_uverbs]
[  326.842565]  create_qp+0x45d/0xb30 [ib_uverbs]
[  326.862998]  ? ib_uverbs_cq_event_handler+0x30/0x30 [ib_uverbs]
[  326.890237]  ib_uverbs_create_qp+0xb9/0xe0 [ib_uverbs]
[  326.913855]  ib_uverbs_write+0x3f9/0x570 [ib_uverbs]
[  326.936679]  ? security_mmap_file+0x62/0xe0
[  326.955889]  vfs_write+0xb7/0x200
[  326.971088]  ksys_write+0xaf/0xd0
[  326.986314]  ? syscall_trace_enter.isra.25+0x152/0x200
[  327.009948]  do_syscall_64+0x2d/0x40
[  327.026752]  entry_SYSCALL_64_after_hwframe+0x44/0xa9
==============================================================

Fixes: 06e8d1df46ed ("RDMA/qedr: Add support for user mode XRC-SRQ's")
Signed-off-by: Michal Kalderon <mkalderon@marvell.com>
Signed-off-by: Igor Russkikh <irusskikh@marvell.com>
Signed-off-by: Alok Prasad <palok@marvell.com>
---
v2 (from [1]):
 - Added call trace in commit message.
[1] https://patchwork.kernel.org/project/linux-rdma/patch/20201127090832.11191-1-palok@marvell.com/
---
 drivers/infiniband/hw/qedr/verbs.c | 9 +++++++++
 1 file changed, 9 insertions(+)

Comments

Jason Gunthorpe Dec. 2, 2020, 12:54 a.m. UTC | #1
On Fri, Nov 27, 2020 at 04:32:51PM +0000, Alok Prasad wrote:
> This patch fixes issue introduced by a previous commit
> where iWARP doorbell address wasn't initialized, causing
> call trace when any RDMA application wants to use this
> interface.
> 
> Below call trace is generated which using rping with the
> iWARP interface.
> 
> ==========================================================
> [  325.698218] Illegal doorbell address: 0000000000000000. Legal range for doorbell addresses is [0000000011431e08..00000000ec3799d3]
> [  325.752691] WARNING: CPU: 11 PID: 11990 at drivers/net/ethernet/qlogic/qed/qed_dev.c:93 qed_db_rec_sanity.isra.12+0x48/0x70 [qed]
> ....
> [  325.807824]  hpsa scsi_transport_sas [last unloaded: crc8]
> [  326.263195] CPU: 11 PID: 11990 Comm: rping Tainted: G S                5.10.0-rc1 #29
> [  326.299616] Hardware name: HP ProLiant DL380 Gen9/ProLiant DL380 Gen9, BIOS P89 01/22/2018
> [  326.337657] RIP: 0010:qed_db_rec_sanity.isra.12+0x48/0x70 [qed]
> ...
> [  326.451186] RSP: 0018:ffffafc28458fa88 EFLAGS: 00010286
> [  326.475309] RAX: 0000000000000000 RBX: ffff8d0d4c620000 RCX: 0000000000000000
> [  326.508079] RDX: ffff8d10afde7d50 RSI: ffff8d10afdd8b40 RDI: ffff8d10afdd8b40
> [  326.540849] RBP: ffffafc28458fe38 R08: 0000000000000003 R09: 0000000000007fff
> [  326.573671] R10: 0000000000000001 R11: ffffafc28458f888 R12: 0000000000000000
> [  326.606521] R13: 0000000000000000 R14: ffff8d0d43ccbbd0 R15: ffff8d0d48dae9c0
> [  326.639406] FS:  00007fbd5267e740(0000) GS:ffff8d10afdc0000(0000) knlGS:0000000000000000
> [  326.677896] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
> [  326.704634] CR2: 00007fbd4f258fb8 CR3: 0000000108d96003 CR4: 00000000001706e0
> [  326.737465] Call Trace:
> [  326.748839]  qed_db_recovery_add+0x6d/0x1f0 [qed]
> [  326.770705]  qedr_create_user_qp+0x57e/0xd30 [qedr]
> [  326.793350]  qedr_create_qp+0x5f3/0xab0 [qedr]
> [  326.813750]  ? lookup_get_idr_uobject.part.12+0x45/0x90 [ib_uverbs]
> [  326.842565]  create_qp+0x45d/0xb30 [ib_uverbs]
> [  326.862998]  ? ib_uverbs_cq_event_handler+0x30/0x30 [ib_uverbs]
> [  326.890237]  ib_uverbs_create_qp+0xb9/0xe0 [ib_uverbs]
> [  326.913855]  ib_uverbs_write+0x3f9/0x570 [ib_uverbs]
> [  326.936679]  ? security_mmap_file+0x62/0xe0
> [  326.955889]  vfs_write+0xb7/0x200
> [  326.971088]  ksys_write+0xaf/0xd0
> [  326.986314]  ? syscall_trace_enter.isra.25+0x152/0x200
> [  327.009948]  do_syscall_64+0x2d/0x40
> [  327.026752]  entry_SYSCALL_64_after_hwframe+0x44/0xa9
> ==============================================================
> 
> Fixes: 06e8d1df46ed ("RDMA/qedr: Add support for user mode XRC-SRQ's")
> Signed-off-by: Michal Kalderon <mkalderon@marvell.com>
> Signed-off-by: Igor Russkikh <irusskikh@marvell.com>
> Signed-off-by: Alok Prasad <palok@marvell.com>
> ---
> v2 (from [1]):
>  - Added call trace in commit message.
> [1] https://patchwork.kernel.org/project/linux-rdma/patch/20201127090832.11191-1-palok@marvell.com/
> ---
>  drivers/infiniband/hw/qedr/verbs.c | 9 +++++++++
>  1 file changed, 9 insertions(+)

Applied to for-rc, thanks

Jason
diff mbox series

Patch

diff --git a/drivers/infiniband/hw/qedr/verbs.c b/drivers/infiniband/hw/qedr/verbs.c
index 019642ff24a7..511c95bb3d01 100644
--- a/drivers/infiniband/hw/qedr/verbs.c
+++ b/drivers/infiniband/hw/qedr/verbs.c
@@ -1936,6 +1936,15 @@  static int qedr_create_user_qp(struct qedr_dev *dev,
 	}
 
 	if (rdma_protocol_iwarp(&dev->ibdev, 1)) {
+		qp->urq.db_rec_db2_addr = ctx->dpi_addr + uresp.rq_db2_offset;
+
+		/* calculate the db_rec_db2 data since it is constant so no
+		 * need to reflect from user
+		 */
+		qp->urq.db_rec_db2_data.data.icid = cpu_to_le16(qp->icid);
+		qp->urq.db_rec_db2_data.data.value =
+			cpu_to_le16(DQ_TCM_IWARP_POST_RQ_CF_CMD);
+
 		rc = qedr_db_recovery_add(dev, qp->urq.db_rec_db2_addr,
 					  &qp->urq.db_rec_db2_data,
 					  DB_REC_WIDTH_32B,