atomic_inc(&devr->p0->usecnt);
        atomic_set(&devr->s0->usecnt, 0);
 
+       memset(&attr, 0, sizeof(attr));
+       attr.attr.max_sge = 1;
+       attr.attr.max_wr = 1;
+       attr.srq_type = IB_SRQT_BASIC;
+       devr->s1 = mlx5_ib_create_srq(devr->p0, &attr, NULL);
+       if (IS_ERR(devr->s1)) {
+               ret = PTR_ERR(devr->s1);
+               goto error5;
+       }
+       devr->s1->device        = &dev->ib_dev;
+       devr->s1->pd            = devr->p0;
+       devr->s1->uobject       = NULL;
+       devr->s1->event_handler = NULL;
+       devr->s1->srq_context   = NULL;
+       devr->s1->srq_type      = IB_SRQT_BASIC;
+       devr->s1->ext.xrc.cq    = devr->c0;
+       atomic_inc(&devr->p0->usecnt);
+       atomic_set(&devr->s0->usecnt, 0);
+
        return 0;
 
+error5:
+       mlx5_ib_destroy_srq(devr->s0);
 error4:
        mlx5_ib_dealloc_xrcd(devr->x1);
 error3:
 
 static void destroy_dev_resources(struct mlx5_ib_resources *devr)
 {
+       mlx5_ib_destroy_srq(devr->s1);
        mlx5_ib_destroy_srq(devr->s0);
        mlx5_ib_dealloc_xrcd(devr->x0);
        mlx5_ib_dealloc_xrcd(devr->x1);
 
                        in->ctx.rq_type_srqn |= cpu_to_be32(to_msrq(init_attr->srq)->msrq.srqn);
                } else {
                        in->ctx.xrcd = cpu_to_be32(to_mxrcd(devr->x1)->xrcdn);
-                       in->ctx.rq_type_srqn |= cpu_to_be32(to_msrq(devr->s0)->msrq.srqn);
+                       in->ctx.rq_type_srqn |=
+                               cpu_to_be32(to_msrq(devr->s1)->msrq.srqn);
                }
        }
 
 
        struct mlx5_destroy_qp_mbox_in din;
        struct mlx5_destroy_qp_mbox_out dout;
        int err;
+       void *qpc;
 
        memset(&out, 0, sizeof(out));
        in->hdr.opcode = cpu_to_be16(MLX5_CMD_OP_CREATE_QP);
 
+       if (dev->issi) {
+               qpc = MLX5_ADDR_OF(create_qp_in, in, qpc);
+               /* 0xffffff means we ask to work with cqe version 0 */
+               MLX5_SET(qpc, qpc, user_index, 0xffffff);
+       }
+
        err = mlx5_cmd_exec(dev, in, inlen, &out, sizeof(out));
        if (err) {
                mlx5_core_warn(dev, "ret %d\n", err);