在 2017/11/1 18:06, Leon Romanovsky 写道: > On Wed, Nov 01, 2017 at 06:00:39PM +0800, Lijun Ou wrote: >> The cmd_sn field of CQ doorbell should be 1 for the first >> db rung. It inits for 0. It should be increment on each >> first db rung after a complemention Event. >> >> Signed-off-by: Lijun Ou <oulijun@xxxxxxxxxx> >> --- >> providers/hns/hns_roce_u_hw_v2.c | 4 +++- >> providers/hns/hns_roce_u_hw_v2.h | 2 ++ >> 2 files changed, 5 insertions(+), 1 deletion(-) >> >> diff --git a/providers/hns/hns_roce_u_hw_v2.c b/providers/hns/hns_roce_u_hw_v2.c >> index 900387c..7777e75 100644 >> --- a/providers/hns/hns_roce_u_hw_v2.c >> +++ b/providers/hns/hns_roce_u_hw_v2.c >> @@ -444,11 +444,13 @@ static int hns_roce_u_v2_poll_cq(struct ibv_cq *ibvcq, int ne, >> static int hns_roce_u_v2_arm_cq(struct ibv_cq *ibvcq, int solicited) >> { >> uint32_t ci; >> + uint32_t cmd_sn; >> uint32_t solicited_flag; >> struct hns_roce_v2_cq_db cq_db; >> struct hns_roce_cq *cq = to_hr_cq(ibvcq); >> >> ci = cq->cons_index & ((cq->cq_depth << 1) - 1); >> + cmd_sn = cq->arm_sn & HNS_ROCE_CMDSN_MASK; > > I didn't understand it from you commit message, so I'll ask it here. > cmd_en will be 1,2 and 3 now, is it ok? > > Thanks > Yes, the cmd_sn field of cq db hardware structure is defined 2 bit. the cmd_sn be only used when cq db type is cq doorbell notify. when notify completion event, cmd_sn is valid, the first notify, cmd_sn is 1; the user notify completion event a time, cmd_sn will be increment. if the value of cmd_sn when two notify doorbell continuously, the hardware will take it as the same notify request and update the notify type according to the protocol. Thanks >> solicited_flag = solicited ? HNS_ROCE_V2_CQ_DB_REQ_SOL : >> HNS_ROCE_V2_CQ_DB_REQ_NEXT; >> >> @@ -462,7 +464,7 @@ static int hns_roce_u_v2_arm_cq(struct ibv_cq *ibvcq, int solicited) >> CQ_DB_PARAMETER_CQ_CONSUMER_IDX_S, ci); >> >> roce_set_field(cq_db.parameter, CQ_DB_PARAMETER_CMD_SN_M, >> - CQ_DB_PARAMETER_CMD_SN_S, 1); >> + CQ_DB_PARAMETER_CMD_SN_S, cmd_sn); >> roce_set_bit(cq_db.parameter, CQ_DB_PARAMETER_NOTIFY_S, solicited_flag); >> >> hns_roce_write64((uint32_t *)&cq_db, to_hr_ctx(ibvcq->context), >> diff --git a/providers/hns/hns_roce_u_hw_v2.h b/providers/hns/hns_roce_u_hw_v2.h >> index 28aab60..196ba4e 100644 >> --- a/providers/hns/hns_roce_u_hw_v2.h >> +++ b/providers/hns/hns_roce_u_hw_v2.h >> @@ -38,6 +38,8 @@ >> #define HNS_ROCE_V2_CQ_DB_REQ_SOL 1 >> #define HNS_ROCE_V2_CQ_DB_REQ_NEXT 0 >> >> +#define HNS_ROCE_CMDSN_MASK 0x3 >> + >> /* V2 REG DEFINITION */ >> #define ROCEE_VF_DB_CFG0_OFFSET 0x0230 >> >> -- >> 1.9.1 >> -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html