Unverified Commit a1fd264a authored by openeuler-ci-bot's avatar openeuler-ci-bot Committed by Gitee
Browse files

!13860 [2024.12.2]bugfix rdma to OLK-5.10

Merge Pull Request from: @zhaojiahui111 
 
| commitID     | commit message                                                             | conflict |
|--------------|----------------------------------------------------------------------------|----|
| 571e4ab8a45e | RDMA/hns: Fix an AEQE overflow error caused by untimely update of eq_db_ci | NA  |
| 323275ac2ff1 | RDMA/hns: Fix cpu stuck caused by printings during reset                   | NA  |
 
 
Link:https://gitee.com/openeuler/kernel/pulls/13860

 

Reviewed-by: default avatarLi Nan <linan122@huawei.com>
Signed-off-by: default avatarLi Nan <linan122@huawei.com>
parents a2b4d661 80a0ecef
Loading
Loading
Loading
Loading
+2 −5
Original line number Diff line number Diff line
@@ -233,12 +233,9 @@ static void free_cqc(struct hns_roce_dev *hr_dev, struct hns_roce_cq *hr_cq)

	ret = hns_roce_destroy_hw_ctx(hr_dev, HNS_ROCE_CMD_DESTROY_CQC,
				      hr_cq->cqn);
	if (ret) {
		hr_cq->delayed_destroy_flag = true;
		dev_err_ratelimited(dev,
				    "DESTROY_CQ failed (%d) for CQN %06lx\n",
	if (ret)
		dev_err_ratelimited(dev, "DESTROY_CQ failed (%d) for CQN %06lx\n",
				    ret, hr_cq->cqn);
	}

	xa_erase_irq(&cq_table->array, hr_cq->cqn);

+1 −0
Original line number Diff line number Diff line
@@ -1538,6 +1538,7 @@ void hns_roce_cq_completion(struct hns_roce_dev *hr_dev, u32 cqn);
void hns_roce_cq_event(struct hns_roce_dev *hr_dev, u32 cqn, int event_type);
void flush_cqe(struct hns_roce_dev *dev, struct hns_roce_qp *qp);
void hns_roce_qp_event(struct hns_roce_dev *hr_dev, u32 qpn, int event_type);
void hns_roce_flush_cqe(struct hns_roce_dev *hr_dev, u32 qpn);
void hns_roce_srq_event(struct hns_roce_dev *hr_dev, u32 srqn, int event_type);
u8 hns_get_gid_index(struct hns_roce_dev *hr_dev, u8 port, int gid_index);
void hns_roce_handle_device_err(struct hns_roce_dev *hr_dev);
+2 −3
Original line number Diff line number Diff line
@@ -713,8 +713,7 @@ void hns_roce_table_put(struct hns_roce_dev *hr_dev,

	ret = hr_dev->hw->clear_hem(hr_dev, table, obj, HEM_HOP_STEP_DIRECT);
	if (ret)
		dev_warn_ratelimited(dev,
			"failed to clear HEM base address, ret = %d.\n",
		dev_warn_ratelimited(dev, "failed to clear HEM base address, ret = %d.\n",
				     ret);

	hns_roce_free_hem(hr_dev, table->hem[i]);
+28 −36
Original line number Diff line number Diff line
@@ -451,17 +451,10 @@ static int check_send_valid(struct hns_roce_dev *hr_dev,

	if (unlikely(hr_qp->state == IB_QPS_RESET ||
		     hr_qp->state == IB_QPS_INIT ||
		     hr_qp->state == IB_QPS_RTR)) {
		ibdev_err_ratelimited(ibdev,
				      "failed to post WQE, QP state %u!\n",
				      hr_qp->state);
		     hr_qp->state == IB_QPS_RTR))
		return -EINVAL;
	} else if (unlikely(hr_dev->state >= HNS_ROCE_DEVICE_STATE_RST_DOWN)) {
		ibdev_err_ratelimited(ibdev,
				      "failed to post WQE, dev state %d!\n",
				      hr_dev->state);
	else if (unlikely(hr_dev->state >= HNS_ROCE_DEVICE_STATE_RST_DOWN))
		return -EIO;
	}

	if (check_dca_attach_enable(hr_qp)) {
		ret = dca_attach_qp_buf(hr_dev, hr_qp);
@@ -3158,7 +3151,7 @@ static int free_mr_modify_rsv_qp(struct hns_roce_dev *hr_dev,
	ret = hr_dev->hw->modify_qp(&hr_qp->ibqp, attr, mask, IB_QPS_INIT,
				    IB_QPS_INIT, NULL);
	if (ret) {
		ibdev_err(ibdev, "failed to modify qp to init, ret = %d.\n",
		ibdev_err_ratelimited(ibdev, "failed to modify qp to init, ret = %d.\n",
				      ret);
		return ret;
	}
@@ -3848,8 +3841,7 @@ static int free_mr_post_send_lp_wqe(struct hns_roce_qp *hr_qp)

	ret = hns_roce_v2_post_send(&hr_qp->ibqp, send_wr, &bad_wr);
	if (ret) {
		ibdev_err_ratelimited(ibdev,
			"failed to post wqe for free mr, ret = %d.\n",
		ibdev_err_ratelimited(ibdev, "failed to post wqe for free mr, ret = %d.\n",
				      ret);
		return ret;
	}
@@ -5683,11 +5675,8 @@ static int hns_roce_v2_set_abs_fields(struct ib_qp *ibqp,
	struct hns_roce_dev *hr_dev = to_hr_dev(ibqp->device);
	int ret = 0;

	if (!check_qp_state(cur_state, new_state)) {
		ibdev_err_ratelimited(&hr_dev->ib_dev,
				      "Illegal state for QP!\n");
	if (!check_qp_state(cur_state, new_state))
		return -EINVAL;
	}

	if (cur_state == IB_QPS_RESET && new_state == IB_QPS_INIT) {
		memset(qpc_mask, 0, hr_dev->caps.qpc_sz);
@@ -6267,13 +6256,11 @@ int hns_roce_v2_destroy_qp_common(struct hns_roce_dev *hr_dev,
		/* Modify qp to reset before destroying qp */
		ret = hns_roce_v2_modify_qp(&hr_qp->ibqp, NULL, 0,
					    hr_qp->state, IB_QPS_RESET, udata);
		if (ret) {
			hr_qp->delayed_destroy_flag = true;
		if (ret)
			ibdev_err_ratelimited(ibdev,
					      "failed to modify QP to RST, ret = %d.\n",
					      ret);
	}
	}

	send_cq = hr_qp->ibqp.send_cq ? to_hr_cq(hr_qp->ibqp.send_cq) : NULL;
	recv_cq = hr_qp->ibqp.recv_cq ? to_hr_cq(hr_qp->ibqp.recv_cq) : NULL;
@@ -6780,7 +6767,12 @@ static void hns_roce_irq_work_handle(struct work_struct *work)
	case HNS_ROCE_EVENT_TYPE_PATH_MIG_FAILED:
	case HNS_ROCE_EVENT_TYPE_COMM_EST:
	case HNS_ROCE_EVENT_TYPE_SQ_DRAINED:
	case HNS_ROCE_EVENT_TYPE_WQ_CATAS_ERROR:
	case HNS_ROCE_EVENT_TYPE_SRQ_LAST_WQE_REACH:
	case HNS_ROCE_EVENT_TYPE_INV_REQ_LOCAL_WQ_ERROR:
	case HNS_ROCE_EVENT_TYPE_LOCAL_WQ_ACCESS_ERROR:
	case HNS_ROCE_EVENT_TYPE_XRCD_VIOLATION:
	case HNS_ROCE_EVENT_TYPE_INVALID_XRCETH:
		hns_roce_qp_event(hr_dev, queue_num, event_type);
		break;
	case HNS_ROCE_EVENT_TYPE_SRQ_LIMIT_REACH:
@@ -6879,7 +6871,7 @@ static irqreturn_t hns_roce_v2_aeq_int(struct hns_roce_dev *hr_dev,
		case HNS_ROCE_EVENT_TYPE_LOCAL_WQ_ACCESS_ERROR:
		case HNS_ROCE_EVENT_TYPE_XRCD_VIOLATION:
		case HNS_ROCE_EVENT_TYPE_INVALID_XRCETH:
			hns_roce_qp_event(hr_dev, queue_num, event_type);
			hns_roce_flush_cqe(hr_dev, queue_num);
			break;
		case HNS_ROCE_EVENT_TYPE_MB:
			hns_roce_cmd_event(hr_dev,
+2 −4
Original line number Diff line number Diff line
@@ -152,12 +152,10 @@ static void hns_roce_mr_free(struct hns_roce_dev *hr_dev, struct hns_roce_mr *mr
		ret = hns_roce_destroy_hw_ctx(hr_dev, HNS_ROCE_CMD_DESTROY_MPT,
					      key_to_hw_index(mr->key) &
					      (hr_dev->caps.num_mtpts - 1));
		if (ret) {
			mr->delayed_destroy_flag = true;
		if (ret)
			ibdev_warn_ratelimited(ibdev, "failed to destroy mpt, ret = %d.\n",
					       ret);
	}
	}

	free_mr_pbl(hr_dev, mr);
	free_mr_key(hr_dev, mr);
Loading