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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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@xxxxxxxxxxx>
Signed-off-by: Igor Russkikh <irusskikh@xxxxxxxxxxx>
Signed-off-by: Alok Prasad <palok@xxxxxxxxxxx>
---
v2 (from [1]):
 - Added call trace in commit message.
[1] https://patchwork.kernel.org/project/linux-rdma/patch/20201127090832.11191-1-palok@xxxxxxxxxxx/
---
 drivers/infiniband/hw/qedr/verbs.c | 9 +++++++++
 1 file changed, 9 insertions(+)

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,
-- 
2.27.0




[Index of Archives]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Photo]     [Yosemite News]     [Yosemite Photos]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux