Message ID | 1615602611-7963-1-git-send-email-liweihang@huawei.com (mailing list archive) |
---|---|
State | Accepted |
Delegated to: | Jason Gunthorpe |
Headers | show |
Series | [v2,for-rc] RDMA/hns: Fix bug during CMDQ initialization | expand |
On Sat, Mar 13, 2021 at 10:30:11AM +0800, Weihang Li wrote: > From: Lang Cheng <chenglang@huawei.com> > > When reloading driver, the head/tail pointer of CMDQ may be not at position > 0. Then during initialization of CMDQ, if head is reset first, the firmware > will start to handle CMDQ because the head is not equal to the tail. The > driver can reset tail first since the firmware will be triggerred only by > head. This bug is introduced by changing macros of head/tail register > without changing the order of initialization. > > Fixes: 292b3352bd5b ("RDMA/hns: Adjust fields and variables about CMDQ tail/head") > Signed-off-by: Lang Cheng <chenglang@huawei.com> > Signed-off-by: Weihang Li <liweihang@huawei.com> > --- > Changes since v1: > - Only retain the bugfix part for -rc branch. > - Link: https://patchwork.kernel.org/project/linux-rdma/patch/1615541933-35798-1-git-send-email-liweihang@huawei.com/ > > drivers/infiniband/hw/hns/hns_roce_hw_v2.c | 4 +++- > 1 file changed, 3 insertions(+), 1 deletion(-) Applied to for-rc, thanks Jason
diff --git a/drivers/infiniband/hw/hns/hns_roce_hw_v2.c b/drivers/infiniband/hw/hns/hns_roce_hw_v2.c index c3934ab..ce26f97 100644 --- a/drivers/infiniband/hw/hns/hns_roce_hw_v2.c +++ b/drivers/infiniband/hw/hns/hns_roce_hw_v2.c @@ -1194,8 +1194,10 @@ static void hns_roce_cmq_init_regs(struct hns_roce_dev *hr_dev, bool ring_type) upper_32_bits(dma)); roce_write(hr_dev, ROCEE_TX_CMQ_DEPTH_REG, (u32)ring->desc_num >> HNS_ROCE_CMQ_DESC_NUM_S); - roce_write(hr_dev, ROCEE_TX_CMQ_HEAD_REG, 0); + + /* Make sure to write tail first and then head */ roce_write(hr_dev, ROCEE_TX_CMQ_TAIL_REG, 0); + roce_write(hr_dev, ROCEE_TX_CMQ_HEAD_REG, 0); } else { roce_write(hr_dev, ROCEE_RX_CMQ_BASEADDR_L_REG, (u32)dma); roce_write(hr_dev, ROCEE_RX_CMQ_BASEADDR_H_REG,