| .. | .. |
|---|
| 154 | 154 | V2_RC_SEND_WQE_BYTE_16_SGE_NUM_S, valid_num_sge); |
|---|
| 155 | 155 | } |
|---|
| 156 | 156 | |
|---|
| 157 | +static unsigned int get_std_sge_num(struct hns_roce_qp *qp) |
|---|
| 158 | +{ |
|---|
| 159 | + if (qp->ibqp.qp_type == IB_QPT_GSI || qp->ibqp.qp_type == IB_QPT_UD) |
|---|
| 160 | + return 0; |
|---|
| 161 | + |
|---|
| 162 | + return HNS_ROCE_SGE_IN_WQE; |
|---|
| 163 | +} |
|---|
| 164 | + |
|---|
| 157 | 165 | static int fill_ext_sge_inl_data(struct hns_roce_qp *qp, |
|---|
| 158 | 166 | const struct ib_send_wr *wr, |
|---|
| 159 | 167 | unsigned int *sge_idx, u32 msg_len) |
|---|
| 160 | 168 | { |
|---|
| 161 | 169 | struct ib_device *ibdev = &(to_hr_dev(qp->ibqp.device))->ib_dev; |
|---|
| 162 | | - unsigned int dseg_len = sizeof(struct hns_roce_v2_wqe_data_seg); |
|---|
| 163 | | - unsigned int ext_sge_sz = qp->sq.max_gs * dseg_len; |
|---|
| 164 | 170 | unsigned int left_len_in_pg; |
|---|
| 165 | 171 | unsigned int idx = *sge_idx; |
|---|
| 172 | + unsigned int std_sge_num; |
|---|
| 166 | 173 | unsigned int i = 0; |
|---|
| 167 | 174 | unsigned int len; |
|---|
| 168 | 175 | void *addr; |
|---|
| 169 | 176 | void *dseg; |
|---|
| 170 | 177 | |
|---|
| 171 | | - if (msg_len > ext_sge_sz) { |
|---|
| 178 | + std_sge_num = get_std_sge_num(qp); |
|---|
| 179 | + if (msg_len > (qp->sq.max_gs - std_sge_num) * HNS_ROCE_SGE_SIZE) { |
|---|
| 172 | 180 | ibdev_err(ibdev, |
|---|
| 173 | 181 | "no enough extended sge space for inline data.\n"); |
|---|
| 174 | 182 | return -EINVAL; |
|---|
| .. | .. |
|---|
| 188 | 196 | if (len <= left_len_in_pg) { |
|---|
| 189 | 197 | memcpy(dseg, addr, len); |
|---|
| 190 | 198 | |
|---|
| 191 | | - idx += len / dseg_len; |
|---|
| 199 | + idx += len / HNS_ROCE_SGE_SIZE; |
|---|
| 192 | 200 | |
|---|
| 193 | 201 | i++; |
|---|
| 194 | 202 | if (i >= wr->num_sge) |
|---|
| .. | .. |
|---|
| 203 | 211 | |
|---|
| 204 | 212 | len -= left_len_in_pg; |
|---|
| 205 | 213 | addr += left_len_in_pg; |
|---|
| 206 | | - idx += left_len_in_pg / dseg_len; |
|---|
| 214 | + idx += left_len_in_pg / HNS_ROCE_SGE_SIZE; |
|---|
| 207 | 215 | dseg = hns_roce_get_extend_sge(qp, |
|---|
| 208 | 216 | idx & (qp->sge.sge_cnt - 1)); |
|---|
| 209 | 217 | left_len_in_pg = 1 << HNS_HW_PAGE_SHIFT; |
|---|
| .. | .. |
|---|
| 1020 | 1028 | struct hns_roce_v2_priv *priv = hr_dev->priv; |
|---|
| 1021 | 1029 | struct hnae3_handle *handle = priv->handle; |
|---|
| 1022 | 1030 | const struct hnae3_ae_ops *ops = handle->ae_algo->ops; |
|---|
| 1023 | | - unsigned long instance_stage; /* the current instance stage */ |
|---|
| 1024 | | - unsigned long reset_stage; /* the current reset stage */ |
|---|
| 1031 | + unsigned long instance_stage; /* the current instance stage */ |
|---|
| 1032 | + unsigned long reset_stage; /* the current reset stage */ |
|---|
| 1025 | 1033 | unsigned long reset_cnt; |
|---|
| 1026 | 1034 | bool sw_resetting; |
|---|
| 1027 | 1035 | bool hw_resetting; |
|---|
| .. | .. |
|---|
| 2158 | 2166 | calc_pg_sz(caps->num_idx_segs, caps->idx_entry_sz, caps->idx_hop_num, |
|---|
| 2159 | 2167 | 1, &caps->idx_buf_pg_sz, &caps->idx_ba_pg_sz, HEM_TYPE_IDX); |
|---|
| 2160 | 2168 | |
|---|
| 2169 | + if (!(caps->page_size_cap & PAGE_SIZE)) |
|---|
| 2170 | + caps->page_size_cap = HNS_ROCE_V2_PAGE_SIZE_SUPPORTED; |
|---|
| 2171 | + |
|---|
| 2161 | 2172 | return 0; |
|---|
| 2162 | 2173 | } |
|---|
| 2163 | 2174 | |
|---|
| .. | .. |
|---|
| 2423 | 2434 | if (i < (pg_num - 1)) |
|---|
| 2424 | 2435 | entry[i].blk_ba1_nxt_ptr |= |
|---|
| 2425 | 2436 | (i + 1) << HNS_ROCE_LINK_TABLE_NXT_PTR_S; |
|---|
| 2426 | | - |
|---|
| 2427 | 2437 | } |
|---|
| 2428 | 2438 | link_tbl->npages = pg_num; |
|---|
| 2429 | 2439 | link_tbl->pg_sz = buf_chk_sz; |
|---|
| .. | .. |
|---|
| 2730 | 2740 | int i, count; |
|---|
| 2731 | 2741 | |
|---|
| 2732 | 2742 | count = hns_roce_mtr_find(hr_dev, &mr->pbl_mtr, 0, pages, |
|---|
| 2733 | | - ARRAY_SIZE(pages), &pbl_ba); |
|---|
| 2743 | + min_t(int, ARRAY_SIZE(pages), mr->npages), |
|---|
| 2744 | + &pbl_ba); |
|---|
| 2734 | 2745 | if (count < 1) { |
|---|
| 2735 | 2746 | ibdev_err(ibdev, "failed to find PBL mtr, count = %d.\n", |
|---|
| 2736 | 2747 | count); |
|---|
| .. | .. |
|---|
| 5528 | 5539 | case HNS_ROCE_EVENT_TYPE_CQ_OVERFLOW: |
|---|
| 5529 | 5540 | hns_roce_cq_event(hr_dev, cqn, event_type); |
|---|
| 5530 | 5541 | break; |
|---|
| 5531 | | - case HNS_ROCE_EVENT_TYPE_DB_OVERFLOW: |
|---|
| 5532 | | - break; |
|---|
| 5533 | 5542 | case HNS_ROCE_EVENT_TYPE_MB: |
|---|
| 5534 | 5543 | hns_roce_cmd_event(hr_dev, |
|---|
| 5535 | 5544 | le16_to_cpu(aeqe->event.cmd.token), |
|---|
| 5536 | 5545 | aeqe->event.cmd.status, |
|---|
| 5537 | 5546 | le64_to_cpu(aeqe->event.cmd.out_param)); |
|---|
| 5538 | 5547 | break; |
|---|
| 5548 | + case HNS_ROCE_EVENT_TYPE_DB_OVERFLOW: |
|---|
| 5539 | 5549 | case HNS_ROCE_EVENT_TYPE_CEQ_OVERFLOW: |
|---|
| 5540 | | - break; |
|---|
| 5541 | 5550 | case HNS_ROCE_EVENT_TYPE_FLR: |
|---|
| 5542 | 5551 | break; |
|---|
| 5543 | 5552 | default: |
|---|