[PATCH V3 for-rc] RDMA/hns: Bugfix for mapping user db

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

 



when the maximum send wr delivered by the user is zero,
qp does not have sq.

When allocating the sq db buffer to store the user sq pi pointer
and map it to the kernel mode, max_send_wr is used as the
trigger condition, while the kernel does not consider the
max_send_wr trigger condition when mapmping db. it will
cause sq record doorbell map fail and create qp fail.
The failed print information as follows:
...
...
[100271.504204] hns3 0000:7d:00.1: Send cmd: tail - 418, opcode - 0x8504, flag - 0x0011, retval - 0x0000
[100271.514826] hns3 0000:7d:00.1: Send cmd: 0xe59dc000 0x00000000 0x00000000 0x00000000 0x00000116 0x0000ffff
[100271.619589] hns3 0000:7d:00.1: sq record doorbell map failed!
[100271.628559] hns3 0000:7d:00.1: Create RC QP failed

Fixes: 0425e3e6e0c7 ("RDMA/hns: Support flush cqe for hip08 in kernel space")
Signed-off-by: Lijun Ou <oulijun@xxxxxxxxxx>
---
V2->V3:
1. Add a paragraph to describe what bad result it will have.

V1->V2:
1. Split it from the patchset("[PATCH for-rc 0/8] Some hns bugfixes for 5.0-rc3")
2. Add necessary note for fixing: line
---
 drivers/infiniband/hw/hns/hns_roce_qp.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/infiniband/hw/hns/hns_roce_qp.c b/drivers/infiniband/hw/hns/hns_roce_qp.c
index 66cdf62..60cf9f0 100644
--- a/drivers/infiniband/hw/hns/hns_roce_qp.c
+++ b/drivers/infiniband/hw/hns/hns_roce_qp.c
@@ -533,7 +533,7 @@ static int hns_roce_set_kernel_sq_size(struct hns_roce_dev *hr_dev,
 
 static int hns_roce_qp_has_sq(struct ib_qp_init_attr *attr)
 {
-	if (attr->qp_type == IB_QPT_XRC_TGT)
+	if (attr->qp_type == IB_QPT_XRC_TGT || !attr->cap.max_send_wr)
 		return 0;
 
 	return 1;
-- 
1.9.1




[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