Lines Matching defs:mdev
10 static int mlx5vf_is_migratable(struct mlx5_core_dev *mdev, u16 func_id)
20 ret = mlx5_vport_get_other_func_cap(mdev, func_id, query_cap,
33 static int mlx5vf_cmd_get_vhca_id(struct mlx5_core_dev *mdev, u16 function_id,
65 err = mlx5_cmd_exec_inout(mvdev->mdev, suspend_vhca, in, out);
85 return mlx5_cmd_exec_inout(mvdev->mdev, resume_vhca, in, out);
132 ret = mlx5_cmd_exec_inout(mvdev->mdev, query_vhca_migration_state, in,
195 mlx5_sriov_blocking_notifier_unregister(mvdev->mdev, mvdev->vf_id,
210 mvdev->mdev = mlx5_vf_get_core_dev(pdev);
211 if (!mvdev->mdev)
214 if (!MLX5_CAP_GEN(mvdev->mdev, migration))
221 ret = mlx5vf_is_migratable(mvdev->mdev, mvdev->vf_id + 1);
225 if (mlx5vf_cmd_get_vhca_id(mvdev->mdev, mvdev->vf_id + 1,
236 ret = mlx5_sriov_blocking_notifier_register(mvdev->mdev, mvdev->vf_id,
249 if (MLX5_CAP_GEN(mvdev->mdev, adv_virtualization))
252 if (MLX5_CAP_GEN_2(mvdev->mdev, migration_multi_load) &&
253 MLX5_CAP_GEN_2(mvdev->mdev, migration_tracking_state))
258 mlx5_vf_put_core_dev(mvdev->mdev);
261 static int mlx5vf_cmd_get_vhca_id(struct mlx5_core_dev *mdev, u16 function_id,
281 ret = mlx5_cmd_exec_inout(mdev, query_hca_cap, in, out);
293 static int _create_mkey(struct mlx5_core_dev *mdev, u32 pdn,
340 err = mlx5_core_create_mkey(mdev, mkey, in, inlen);
348 struct mlx5_core_dev *mdev = mvdev->mdev;
358 ret = dma_map_sgtable(mdev->device, &buf->table.sgt, buf->dma_dir, 0);
362 ret = _create_mkey(mdev, buf->migf->pdn, buf, NULL, &buf->mkey);
370 dma_unmap_sgtable(mdev->device, &buf->table.sgt, buf->dma_dir, 0);
383 mlx5_core_destroy_mkey(migf->mvdev->mdev, buf->mkey);
384 dma_unmap_sgtable(migf->mvdev->mdev->device, &buf->table.sgt,
683 return mlx5_cmd_exec_inout(mvdev->mdev, load_vhca_state, in, out);
694 err = mlx5_core_alloc_pd(migf->mvdev->mdev, &migf->pdn);
704 mlx5_core_dealloc_pd(migf->mvdev->mdev, migf->pdn);
735 static int mlx5vf_create_tracker(struct mlx5_core_dev *mdev,
740 MLX5_CAP_ADV_VIRTUALIZATION(mdev, pg_track_max_num_range);
799 (MLX5_CAP_ADV_VIRTUALIZATION(mdev, pg_track_log_min_addr_space)) ||
801 (MLX5_CAP_ADV_VIRTUALIZATION(mdev, pg_track_log_max_addr_space))) {
808 err = mlx5_cmd_exec(mdev, in, inlen, out, sizeof(out));
818 static int mlx5vf_cmd_destroy_tracker(struct mlx5_core_dev *mdev,
828 return mlx5_cmd_exec(mdev, in, sizeof(in), out, sizeof(out));
831 static int mlx5vf_cmd_modify_tracker(struct mlx5_core_dev *mdev,
851 return mlx5_cmd_exec(mdev, in, sizeof(in), out, sizeof(out));
854 static int alloc_cq_frag_buf(struct mlx5_core_dev *mdev,
863 err = mlx5_frag_buf_alloc_node(mdev, nent * cqe_size, frag_buf,
864 mdev->priv.numa_node);
887 static void mlx5vf_destroy_cq(struct mlx5_core_dev *mdev,
890 mlx5_core_destroy_cq(mdev, &cq->mcq);
891 mlx5_frag_buf_free(mdev, &cq->buf.frag_buf);
892 mlx5_db_free(mdev, &cq->db);
946 static int mlx5vf_create_cq(struct mlx5_core_dev *mdev,
960 err = mlx5_db_alloc_node(mdev, &cq->db, mdev->priv.numa_node);
968 err = alloc_cq_frag_buf(mdev, &cq->buf, ncqe, cqe_size);
982 vector = raw_smp_processor_id() % mlx5_comp_vectors_max(mdev);
983 err = mlx5_comp_eqn_get(mdev, vector, &eqn);
998 err = mlx5_core_create_cq(mdev, &cq->mcq, in, inlen, out, sizeof(out));
1010 mlx5_frag_buf_free(mdev, &cq->buf.frag_buf);
1012 mlx5_db_free(mdev, &cq->db);
1017 mlx5vf_create_rc_qp(struct mlx5_core_dev *mdev,
1033 err = mlx5_db_alloc_node(mdev, &qp->db, mdev->priv.numa_node);
1041 err = mlx5_frag_buf_alloc_node(mdev,
1043 &qp->buf, mdev->priv.numa_node);
1066 MLX5_SET(qpc, qpc, ts_format, mlx5_get_qp_default_ts(mdev));
1067 if (MLX5_CAP_GEN(mdev, cqe_version) == 1)
1084 err = mlx5_cmd_exec(mdev, in, inlen, out, sizeof(out));
1094 mlx5_frag_buf_free(mdev, &qp->buf);
1096 mlx5_db_free(mdev, &qp->db);
1119 static int mlx5vf_activate_qp(struct mlx5_core_dev *mdev,
1137 ret = mlx5_cmd_exec_in(mdev, rst2init_qp, init_in);
1155 MLX5_SET(qpc, qpc, log_msg_max, MLX5_CAP_GEN(mdev, log_max_msg));
1162 ret = mlx5_cmd_exec_in(mdev, init2rtr_qp, rtr_in);
1175 return mlx5_cmd_exec_in(mdev, rtr2rts_qp, rts_in);
1178 static void mlx5vf_destroy_qp(struct mlx5_core_dev *mdev,
1185 mlx5_cmd_exec_in(mdev, destroy_qp, in);
1187 mlx5_frag_buf_free(mdev, &qp->buf);
1188 mlx5_db_free(mdev, &qp->db);
1239 static int register_dma_recv_pages(struct mlx5_core_dev *mdev,
1251 recv_buf->dma_addrs[i] = dma_map_page(mdev->device,
1255 if (dma_mapping_error(mdev->device, recv_buf->dma_addrs[i]))
1262 dma_unmap_single(mdev->device, recv_buf->dma_addrs[j],
1269 static void unregister_dma_recv_pages(struct mlx5_core_dev *mdev,
1275 dma_unmap_single(mdev->device, recv_buf->dma_addrs[i],
1281 static void mlx5vf_free_qp_recv_resources(struct mlx5_core_dev *mdev,
1286 mlx5_core_destroy_mkey(mdev, recv_buf->mkey);
1287 unregister_dma_recv_pages(mdev, recv_buf);
1291 static int mlx5vf_alloc_qp_recv_resources(struct mlx5_core_dev *mdev,
1303 err = register_dma_recv_pages(mdev, recv_buf);
1307 err = _create_mkey(mdev, pdn, NULL, recv_buf, &recv_buf->mkey);
1314 unregister_dma_recv_pages(mdev, recv_buf);
1324 struct mlx5_core_dev *mdev = mvdev->mdev;
1333 mlx5_eq_notifier_unregister(mdev, &tracker->nb);
1334 mlx5vf_cmd_destroy_tracker(mdev, tracker->id);
1335 mlx5vf_destroy_qp(mdev, tracker->fw_qp);
1336 mlx5vf_free_qp_recv_resources(mdev, tracker->host_qp);
1337 mlx5vf_destroy_qp(mdev, tracker->host_qp);
1338 mlx5vf_destroy_cq(mdev, &tracker->cq);
1339 mlx5_core_dealloc_pd(mdev, tracker->pdn);
1340 mlx5_put_uars_page(mdev, tracker->uar);
1370 struct mlx5_core_dev *mdev;
1387 mdev = mvdev->mdev;
1389 tracker->uar = mlx5_get_uars_page(mdev);
1395 err = mlx5_core_alloc_pd(mdev, &tracker->pdn);
1400 err = mlx5vf_create_cq(mdev, tracker, max_recv_wr);
1404 host_qp = mlx5vf_create_rc_qp(mdev, tracker, max_recv_wr);
1411 if (log_tracked_page < MLX5_CAP_ADV_VIRTUALIZATION(mdev,
1413 log_tracked_page = MLX5_CAP_ADV_VIRTUALIZATION(mdev,
1415 } else if (log_tracked_page > MLX5_CAP_ADV_VIRTUALIZATION(mdev,
1417 log_tracked_page = MLX5_CAP_ADV_VIRTUALIZATION(mdev,
1422 err = mlx5vf_alloc_qp_recv_resources(mdev, host_qp, tracker->pdn,
1427 fw_qp = mlx5vf_create_rc_qp(mdev, tracker, 0);
1433 err = mlx5vf_activate_qp(mdev, host_qp, fw_qp->qpn, true);
1437 err = mlx5vf_activate_qp(mdev, fw_qp, host_qp->qpn, false);
1443 err = mlx5vf_create_tracker(mdev, mvdev, ranges, nnodes);
1448 mlx5_eq_notifier_register(mdev, &tracker->nb);
1455 mlx5vf_destroy_qp(mdev, fw_qp);
1457 mlx5vf_free_qp_recv_resources(mdev, host_qp);
1459 mlx5vf_destroy_qp(mdev, host_qp);
1461 mlx5vf_destroy_cq(mdev, &tracker->cq);
1463 mlx5_core_dealloc_pd(mdev, tracker->pdn);
1465 mlx5_put_uars_page(mdev, tracker->uar);
1574 struct mlx5_core_dev *mdev;
1588 mdev = mvdev->mdev;
1589 err = mlx5vf_cmd_modify_tracker(mdev, tracker->id, iova, length,