diff options
| -rw-r--r-- | drivers/infiniband/hw/mlx4/mad.c | 3 | ||||
| -rw-r--r-- | drivers/infiniband/hw/mlx4/main.c | 11 |
2 files changed, 14 insertions, 0 deletions
diff --git a/drivers/infiniband/hw/mlx4/mad.c b/drivers/infiniband/hw/mlx4/mad.c index 658a622791fb..21a794152d15 100644 --- a/drivers/infiniband/hw/mlx4/mad.c +++ b/drivers/infiniband/hw/mlx4/mad.c | |||
| @@ -1652,6 +1652,9 @@ static int create_pv_resources(struct ib_device *ibdev, int slave, int port, | |||
| 1652 | { | 1652 | { |
| 1653 | int ret, cq_size; | 1653 | int ret, cq_size; |
| 1654 | 1654 | ||
| 1655 | if (ctx->state != DEMUX_PV_STATE_DOWN) | ||
| 1656 | return -EEXIST; | ||
| 1657 | |||
| 1655 | ctx->state = DEMUX_PV_STATE_STARTING; | 1658 | ctx->state = DEMUX_PV_STATE_STARTING; |
| 1656 | /* have QP0 only on port owner, and only if link layer is IB */ | 1659 | /* have QP0 only on port owner, and only if link layer is IB */ |
| 1657 | if (ctx->slave == mlx4_master_func_num(to_mdev(ctx->ib_dev)->dev) && | 1660 | if (ctx->slave == mlx4_master_func_num(to_mdev(ctx->ib_dev)->dev) && |
diff --git a/drivers/infiniband/hw/mlx4/main.c b/drivers/infiniband/hw/mlx4/main.c index e849347ef99a..718ec6b2bad2 100644 --- a/drivers/infiniband/hw/mlx4/main.c +++ b/drivers/infiniband/hw/mlx4/main.c | |||
| @@ -74,6 +74,8 @@ struct update_gid_work { | |||
| 74 | int port; | 74 | int port; |
| 75 | }; | 75 | }; |
| 76 | 76 | ||
| 77 | static void do_slave_init(struct mlx4_ib_dev *ibdev, int slave, int do_init); | ||
| 78 | |||
| 77 | static struct workqueue_struct *wq; | 79 | static struct workqueue_struct *wq; |
| 78 | 80 | ||
| 79 | static void init_query_mad(struct ib_smp *mad) | 81 | static void init_query_mad(struct ib_smp *mad) |
| @@ -1470,6 +1472,15 @@ static void *mlx4_ib_add(struct mlx4_dev *dev) | |||
| 1470 | if (mlx4_is_mfunc(ibdev->dev)) | 1472 | if (mlx4_is_mfunc(ibdev->dev)) |
| 1471 | init_pkeys(ibdev); | 1473 | init_pkeys(ibdev); |
| 1472 | 1474 | ||
| 1475 | /* create paravirt contexts for any VFs which are active */ | ||
| 1476 | if (mlx4_is_master(ibdev->dev)) { | ||
| 1477 | for (j = 0; j < MLX4_MFUNC_MAX; j++) { | ||
| 1478 | if (j == mlx4_master_func_num(ibdev->dev)) | ||
| 1479 | continue; | ||
| 1480 | if (mlx4_is_slave_active(ibdev->dev, j)) | ||
| 1481 | do_slave_init(ibdev, j, 1); | ||
| 1482 | } | ||
| 1483 | } | ||
| 1473 | return ibdev; | 1484 | return ibdev; |
| 1474 | 1485 | ||
| 1475 | err_notif: | 1486 | err_notif: |
