return be32_to_cpu(qpc->srqn) & 0x1ffffff;
}
+static u32 qp_get_st(struct mlx4_qp_context *qpc)
+{
+ return (be32_to_cpu(qpc->flags) >> 16) & 0xff;
+}
+
static void adjust_proxy_tun_qkey(struct mlx4_dev *dev, struct mlx4_vhcr *vhcr,
struct mlx4_qp_context *context)
{
int use_srq = (qp_get_srqn(qpc) >> 24) & 1;
struct res_srq *srq;
int local_qpn = be32_to_cpu(qpc->local_qpn) & 0xffffff;
+ int st = qp_get_st(qpc);
+
+ if ((slave != mlx4_master_func_num(dev)) && (st == MLX4_QP_ST_MLX))
+ return -EPERM;
err = qp_res_start_move_to(dev, slave, qpn, RES_QP_HW, &qp, 0);
if (err)