@@ -699,6 +699,12 @@ static void *get_srq_wqe(struct hns_roce_srq *srq, int n)
699
699
return hns_roce_buf_offset (srq -> buf_mtr .kmem , n << srq -> wqe_shift );
700
700
}
701
701
702
+ static void * get_idx_buf (struct hns_roce_idx_que * idx_que , int n )
703
+ {
704
+ return hns_roce_buf_offset (idx_que -> mtr .kmem ,
705
+ n << idx_que -> entry_shift );
706
+ }
707
+
702
708
static void hns_roce_free_srq_wqe (struct hns_roce_srq * srq , int wqe_index )
703
709
{
704
710
/* always called with interrupts disabled. */
@@ -725,16 +731,6 @@ static int find_empty_entry(struct hns_roce_idx_que *idx_que,
725
731
return wqe_idx ;
726
732
}
727
733
728
- static void fill_idx_queue (struct hns_roce_idx_que * idx_que ,
729
- int cur_idx , int wqe_idx )
730
- {
731
- unsigned int * addr ;
732
-
733
- addr = (unsigned int * )hns_roce_buf_offset (idx_que -> mtr .kmem ,
734
- cur_idx * idx_que -> entry_sz );
735
- * addr = wqe_idx ;
736
- }
737
-
738
734
static int hns_roce_v2_post_srq_recv (struct ib_srq * ibsrq ,
739
735
const struct ib_recv_wr * wr ,
740
736
const struct ib_recv_wr * * bad_wr )
@@ -744,6 +740,7 @@ static int hns_roce_v2_post_srq_recv(struct ib_srq *ibsrq,
744
740
struct hns_roce_v2_wqe_data_seg * dseg ;
745
741
struct hns_roce_v2_db srq_db ;
746
742
unsigned long flags ;
743
+ __le32 * srq_idx ;
747
744
int ret = 0 ;
748
745
int wqe_idx ;
749
746
void * wqe ;
@@ -775,7 +772,6 @@ static int hns_roce_v2_post_srq_recv(struct ib_srq *ibsrq,
775
772
break ;
776
773
}
777
774
778
- fill_idx_queue (& srq -> idx_que , ind , wqe_idx );
779
775
wqe = get_srq_wqe (srq , wqe_idx );
780
776
dseg = (struct hns_roce_v2_wqe_data_seg * )wqe ;
781
777
@@ -791,6 +787,9 @@ static int hns_roce_v2_post_srq_recv(struct ib_srq *ibsrq,
791
787
dseg [i ].addr = 0 ;
792
788
}
793
789
790
+ srq_idx = get_idx_buf (& srq -> idx_que , ind );
791
+ * srq_idx = cpu_to_le32 (wqe_idx );
792
+
794
793
srq -> wrid [wqe_idx ] = wr -> wr_id ;
795
794
ind = (ind + 1 ) & (srq -> wqe_cnt - 1 );
796
795
}
@@ -4901,8 +4900,8 @@ static void hns_roce_v2_write_srqc(struct hns_roce_dev *hr_dev,
4901
4900
roce_set_field (srq_context -> byte_4_srqn_srqst ,
4902
4901
SRQC_BYTE_4_SRQ_WQE_HOP_NUM_M ,
4903
4902
SRQC_BYTE_4_SRQ_WQE_HOP_NUM_S ,
4904
- (hr_dev -> caps .srqwqe_hop_num == HNS_ROCE_HOP_NUM_0 ? 0 :
4905
- hr_dev -> caps . srqwqe_hop_num ));
4903
+ to_hr_hem_hopnum (hr_dev -> caps .srqwqe_hop_num ,
4904
+ srq -> wqe_cnt ));
4906
4905
roce_set_field (srq_context -> byte_4_srqn_srqst ,
4907
4906
SRQC_BYTE_4_SRQ_SHIFT_M , SRQC_BYTE_4_SRQ_SHIFT_S ,
4908
4907
ilog2 (srq -> wqe_cnt ));
@@ -4944,8 +4943,8 @@ static void hns_roce_v2_write_srqc(struct hns_roce_dev *hr_dev,
4944
4943
roce_set_field (srq_context -> byte_44_idxbufpgsz_addr ,
4945
4944
SRQC_BYTE_44_SRQ_IDX_HOP_NUM_M ,
4946
4945
SRQC_BYTE_44_SRQ_IDX_HOP_NUM_S ,
4947
- hr_dev -> caps .idx_hop_num == HNS_ROCE_HOP_NUM_0 ? 0 :
4948
- hr_dev -> caps . idx_hop_num );
4946
+ to_hr_hem_hopnum ( hr_dev -> caps .idx_hop_num ,
4947
+ srq -> wqe_cnt ) );
4949
4948
4950
4949
roce_set_field (srq_context -> byte_44_idxbufpgsz_addr ,
4951
4950
SRQC_BYTE_44_SRQ_IDX_BA_PG_SZ_M ,
0 commit comments