• Lijun Ou's avatar
    RDMA/hns: Fix bug when wqe num is larger than 16K · 8d18ad83
    Lijun Ou authored
    hip08 can support up to 32768 wqes in one qp. currently if the wqe num
    is larger than 16384, the driver will lead a calltrace as follows.
    
    [21361.393725] Call trace:
    [21361.398605]  hns_roce_v2_modify_qp+0xbcc/0x1360 [hns_roce_hw_v2]
    [21361.410627]  hns_roce_modify_qp+0x1d8/0x2f8 [hns_roce]
    [21361.420906]  _ib_modify_qp+0x70/0x118
    [21361.428222]  ib_modify_qp+0x14/0x1c
    [21361.435193]  rt_ktest_modify_qp+0xb8/0x650 [rdma_test]
    [21361.445472]  exec_modify_qp_cmd+0x110/0x4d8 [rdma_test]
    [21361.455924]  rt_ktest_dispatch_cmd_3+0xa94/0x2edc [rdma_test]
    [21361.467422]  rt_ktest_dispatch_cmd_2+0x9c/0x108 [rdma_test]
    [21361.478570]  rt_ktest_dispatch_cmd+0x138/0x904 [rdma_test]
    [21361.489545]  rt_ktest_dev_write+0x328/0x4b0 [rdma_test]
    [21361.499998]  __vfs_write+0x38/0x15c
    [21361.506966]  vfs_write+0xa8/0x1a0
    [21361.513586]  ksys_write+0x50/0xb0
    [21361.520206]  sys_write+0xc/0x14
    [21361.526479]  el0_svc_naked+0x30/0x34
    [21361.533622] Code: 1ac10841 d37d7c22 0b000021 d37df021 (f86268c0)
    [21361.545815] ---[ end trace e2a1feb2c3d7f13c ]---
    
    When the wqe num is larger than 16384, hns_roce_table_find will return an
    invalid mtt, this will lead an kernel paging requet error if the driver try
    to access it. It's the mtt design defect which can't support up to the max
    wqe num of hip08.
    
    This patch fixs it by replacing mtt with mtr for wqe.
    
    Fixes: 926a01dc ("RDMA/hns: Add QP operations support for hip08 SoC")
    Signed-off-by: default avatarXi Wang <wangxi11@huawei.com>
    Signed-off-by: default avatarLijun Ou <oulijun@huawei.com>
    Signed-off-by: default avatarDoug Ledford <dledford@redhat.com>
    8d18ad83
hns_roce_qp.c 33.3 KB