return tx_affinity;
 }
 
+static int __mlx5_ib_qp_set_raw_qp_counter(struct mlx5_ib_qp *qp, u32 set_id,
+                                          struct mlx5_core_dev *mdev)
+{
+       struct mlx5_ib_raw_packet_qp *raw_packet_qp = &qp->raw_packet_qp;
+       struct mlx5_ib_rq *rq = &raw_packet_qp->rq;
+       u32 in[MLX5_ST_SZ_DW(modify_rq_in)] = {};
+       void *rqc;
+
+       if (!qp->rq.wqe_cnt)
+               return 0;
+
+       MLX5_SET(modify_rq_in, in, rq_state, rq->state);
+       MLX5_SET(modify_rq_in, in, uid, to_mpd(qp->ibqp.pd)->uid);
+
+       rqc = MLX5_ADDR_OF(modify_rq_in, in, ctx);
+       MLX5_SET(rqc, rqc, state, MLX5_RQC_STATE_RDY);
+
+       MLX5_SET64(modify_rq_in, in, modify_bitmask,
+                  MLX5_MODIFY_RQ_IN_MODIFY_BITMASK_RQ_COUNTER_SET_ID);
+       MLX5_SET(rqc, rqc, counter_set_id, set_id);
+
+       return mlx5_core_modify_rq(mdev, rq->base.mqp.qpn, in);
+}
+
 static int __mlx5_ib_qp_set_counter(struct ib_qp *qp,
                                    struct rdma_counter *counter)
 {
        else
                set_id = mlx5_ib_get_counters_id(dev, mqp->port - 1);
 
+       if (mqp->type == IB_QPT_RAW_PACKET)
+               return __mlx5_ib_qp_set_raw_qp_counter(mqp, set_id, dev->mdev);
+
        base = &mqp->trans_qp.base;
        MLX5_SET(rts2rts_qp_in, in, opcode, MLX5_CMD_OP_RTS2RTS_QP);
        MLX5_SET(rts2rts_qp_in, in, qpn, base->mqp.qpn);