Lines Matching refs:mvdev

13 _mlx5vf_free_page_tracker_resources(struct mlx5vf_pci_core_device *mvdev);
15 int mlx5vf_cmd_suspend_vhca(struct mlx5vf_pci_core_device *mvdev, u16 op_mod) in mlx5vf_cmd_suspend_vhca() argument
20 lockdep_assert_held(&mvdev->state_mutex); in mlx5vf_cmd_suspend_vhca()
21 if (mvdev->mdev_detach) in mlx5vf_cmd_suspend_vhca()
25 MLX5_SET(suspend_vhca_in, in, vhca_id, mvdev->vhca_id); in mlx5vf_cmd_suspend_vhca()
28 return mlx5_cmd_exec_inout(mvdev->mdev, suspend_vhca, in, out); in mlx5vf_cmd_suspend_vhca()
31 int mlx5vf_cmd_resume_vhca(struct mlx5vf_pci_core_device *mvdev, u16 op_mod) in mlx5vf_cmd_resume_vhca() argument
36 lockdep_assert_held(&mvdev->state_mutex); in mlx5vf_cmd_resume_vhca()
37 if (mvdev->mdev_detach) in mlx5vf_cmd_resume_vhca()
41 MLX5_SET(resume_vhca_in, in, vhca_id, mvdev->vhca_id); in mlx5vf_cmd_resume_vhca()
44 return mlx5_cmd_exec_inout(mvdev->mdev, resume_vhca, in, out); in mlx5vf_cmd_resume_vhca()
47 int mlx5vf_cmd_query_vhca_migration_state(struct mlx5vf_pci_core_device *mvdev, in mlx5vf_cmd_query_vhca_migration_state() argument
54 lockdep_assert_held(&mvdev->state_mutex); in mlx5vf_cmd_query_vhca_migration_state()
55 if (mvdev->mdev_detach) in mlx5vf_cmd_query_vhca_migration_state()
60 MLX5_SET(query_vhca_migration_state_in, in, vhca_id, mvdev->vhca_id); in mlx5vf_cmd_query_vhca_migration_state()
63 ret = mlx5_cmd_exec_inout(mvdev->mdev, query_vhca_migration_state, in, in mlx5vf_cmd_query_vhca_migration_state()
73 static void set_tracker_error(struct mlx5vf_pci_core_device *mvdev) in set_tracker_error() argument
76 mvdev->tracker.is_err = true; in set_tracker_error()
77 complete(&mvdev->tracker_comp); in set_tracker_error()
83 struct mlx5vf_pci_core_device *mvdev = in mlx5fv_vf_event() local
88 mutex_lock(&mvdev->state_mutex); in mlx5fv_vf_event()
89 mvdev->mdev_detach = false; in mlx5fv_vf_event()
90 mlx5vf_state_mutex_unlock(mvdev); in mlx5fv_vf_event()
93 mlx5vf_cmd_close_migratable(mvdev); in mlx5fv_vf_event()
94 mutex_lock(&mvdev->state_mutex); in mlx5fv_vf_event()
95 mvdev->mdev_detach = true; in mlx5fv_vf_event()
96 mlx5vf_state_mutex_unlock(mvdev); in mlx5fv_vf_event()
105 void mlx5vf_cmd_close_migratable(struct mlx5vf_pci_core_device *mvdev) in mlx5vf_cmd_close_migratable() argument
107 if (!mvdev->migrate_cap) in mlx5vf_cmd_close_migratable()
111 set_tracker_error(mvdev); in mlx5vf_cmd_close_migratable()
112 mutex_lock(&mvdev->state_mutex); in mlx5vf_cmd_close_migratable()
113 mlx5vf_disable_fds(mvdev); in mlx5vf_cmd_close_migratable()
114 _mlx5vf_free_page_tracker_resources(mvdev); in mlx5vf_cmd_close_migratable()
115 mlx5vf_state_mutex_unlock(mvdev); in mlx5vf_cmd_close_migratable()
118 void mlx5vf_cmd_remove_migratable(struct mlx5vf_pci_core_device *mvdev) in mlx5vf_cmd_remove_migratable() argument
120 if (!mvdev->migrate_cap) in mlx5vf_cmd_remove_migratable()
123 mlx5_sriov_blocking_notifier_unregister(mvdev->mdev, mvdev->vf_id, in mlx5vf_cmd_remove_migratable()
124 &mvdev->nb); in mlx5vf_cmd_remove_migratable()
125 destroy_workqueue(mvdev->cb_wq); in mlx5vf_cmd_remove_migratable()
128 void mlx5vf_cmd_set_migratable(struct mlx5vf_pci_core_device *mvdev, in mlx5vf_cmd_set_migratable() argument
132 struct pci_dev *pdev = mvdev->core_device.pdev; in mlx5vf_cmd_set_migratable()
138 mvdev->mdev = mlx5_vf_get_core_dev(pdev); in mlx5vf_cmd_set_migratable()
139 if (!mvdev->mdev) in mlx5vf_cmd_set_migratable()
142 if (!MLX5_CAP_GEN(mvdev->mdev, migration)) in mlx5vf_cmd_set_migratable()
145 mvdev->vf_id = pci_iov_vf_id(pdev); in mlx5vf_cmd_set_migratable()
146 if (mvdev->vf_id < 0) in mlx5vf_cmd_set_migratable()
149 if (mlx5vf_cmd_get_vhca_id(mvdev->mdev, mvdev->vf_id + 1, in mlx5vf_cmd_set_migratable()
150 &mvdev->vhca_id)) in mlx5vf_cmd_set_migratable()
153 mvdev->cb_wq = alloc_ordered_workqueue("mlx5vf_wq", 0); in mlx5vf_cmd_set_migratable()
154 if (!mvdev->cb_wq) in mlx5vf_cmd_set_migratable()
157 mutex_init(&mvdev->state_mutex); in mlx5vf_cmd_set_migratable()
158 spin_lock_init(&mvdev->reset_lock); in mlx5vf_cmd_set_migratable()
159 mvdev->nb.notifier_call = mlx5fv_vf_event; in mlx5vf_cmd_set_migratable()
160 ret = mlx5_sriov_blocking_notifier_register(mvdev->mdev, mvdev->vf_id, in mlx5vf_cmd_set_migratable()
161 &mvdev->nb); in mlx5vf_cmd_set_migratable()
163 destroy_workqueue(mvdev->cb_wq); in mlx5vf_cmd_set_migratable()
167 mvdev->migrate_cap = 1; in mlx5vf_cmd_set_migratable()
168 mvdev->core_device.vdev.migration_flags = in mlx5vf_cmd_set_migratable()
171 mvdev->core_device.vdev.mig_ops = mig_ops; in mlx5vf_cmd_set_migratable()
172 init_completion(&mvdev->tracker_comp); in mlx5vf_cmd_set_migratable()
173 if (MLX5_CAP_GEN(mvdev->mdev, adv_virtualization)) in mlx5vf_cmd_set_migratable()
174 mvdev->core_device.vdev.log_ops = log_ops; in mlx5vf_cmd_set_migratable()
177 mlx5_vf_put_core_dev(mvdev->mdev); in mlx5vf_cmd_set_migratable()
271 struct mlx5_core_dev *mdev = migf->mvdev->mdev; in mlx5vf_mig_file_cleanup_cb()
306 queue_work(migf->mvdev->cb_wq, &async_data->work); in mlx5vf_save_callback()
309 int mlx5vf_cmd_save_vhca_state(struct mlx5vf_pci_core_device *mvdev, in mlx5vf_cmd_save_vhca_state() argument
319 lockdep_assert_held(&mvdev->state_mutex); in mlx5vf_cmd_save_vhca_state()
320 if (mvdev->mdev_detach) in mlx5vf_cmd_save_vhca_state()
323 mdev = mvdev->mdev; in mlx5vf_cmd_save_vhca_state()
340 MLX5_SET(save_vhca_state_in, in, vhca_id, mvdev->vhca_id); in mlx5vf_cmd_save_vhca_state()
377 int mlx5vf_cmd_load_vhca_state(struct mlx5vf_pci_core_device *mvdev, in mlx5vf_cmd_load_vhca_state() argument
386 lockdep_assert_held(&mvdev->state_mutex); in mlx5vf_cmd_load_vhca_state()
387 if (mvdev->mdev_detach) in mlx5vf_cmd_load_vhca_state()
396 mdev = mvdev->mdev; in mlx5vf_cmd_load_vhca_state()
412 MLX5_SET(load_vhca_state_in, in, vhca_id, mvdev->vhca_id); in mlx5vf_cmd_load_vhca_state()
475 struct mlx5vf_pci_core_device *mvdev, in mlx5vf_create_tracker() argument
480 struct mlx5_vhca_page_tracker *tracker = &mvdev->tracker; in mlx5vf_create_tracker()
513 MLX5_SET(page_track, obj_context, vhca_id, mvdev->vhca_id); in mlx5vf_create_tracker()
648 struct mlx5vf_pci_core_device *mvdev = container_of( in mlx5vf_event_notifier() local
666 set_tracker_error(mvdev); in mlx5vf_event_notifier()
678 struct mlx5vf_pci_core_device *mvdev = in mlx5vf_cq_complete() local
682 complete(&mvdev->tracker_comp); in mlx5vf_cq_complete()
1059 _mlx5vf_free_page_tracker_resources(struct mlx5vf_pci_core_device *mvdev) in _mlx5vf_free_page_tracker_resources() argument
1061 struct mlx5_vhca_page_tracker *tracker = &mvdev->tracker; in _mlx5vf_free_page_tracker_resources()
1062 struct mlx5_core_dev *mdev = mvdev->mdev; in _mlx5vf_free_page_tracker_resources()
1064 lockdep_assert_held(&mvdev->state_mutex); in _mlx5vf_free_page_tracker_resources()
1066 if (!mvdev->log_active) in _mlx5vf_free_page_tracker_resources()
1069 WARN_ON(mvdev->mdev_detach); in _mlx5vf_free_page_tracker_resources()
1079 mvdev->log_active = false; in _mlx5vf_free_page_tracker_resources()
1084 struct mlx5vf_pci_core_device *mvdev = container_of( in mlx5vf_stop_page_tracker() local
1087 mutex_lock(&mvdev->state_mutex); in mlx5vf_stop_page_tracker()
1088 if (!mvdev->log_active) in mlx5vf_stop_page_tracker()
1091 _mlx5vf_free_page_tracker_resources(mvdev); in mlx5vf_stop_page_tracker()
1092 mvdev->log_active = false; in mlx5vf_stop_page_tracker()
1094 mlx5vf_state_mutex_unlock(mvdev); in mlx5vf_stop_page_tracker()
1102 struct mlx5vf_pci_core_device *mvdev = container_of( in mlx5vf_start_page_tracker() local
1104 struct mlx5_vhca_page_tracker *tracker = &mvdev->tracker; in mlx5vf_start_page_tracker()
1114 mutex_lock(&mvdev->state_mutex); in mlx5vf_start_page_tracker()
1115 if (mvdev->mdev_detach) { in mlx5vf_start_page_tracker()
1120 if (mvdev->log_active) { in mlx5vf_start_page_tracker()
1125 mdev = mvdev->mdev; in mlx5vf_start_page_tracker()
1181 err = mlx5vf_create_tracker(mdev, mvdev, ranges, nnodes); in mlx5vf_start_page_tracker()
1188 mvdev->log_active = true; in mlx5vf_start_page_tracker()
1189 mlx5vf_state_mutex_unlock(mvdev); in mlx5vf_start_page_tracker()
1205 mlx5vf_state_mutex_unlock(mvdev); in mlx5vf_start_page_tracker()
1308 struct mlx5vf_pci_core_device *mvdev = container_of( in mlx5vf_tracker_read_and_clear() local
1310 struct mlx5_vhca_page_tracker *tracker = &mvdev->tracker; in mlx5vf_tracker_read_and_clear()
1315 mutex_lock(&mvdev->state_mutex); in mlx5vf_tracker_read_and_clear()
1316 if (!mvdev->log_active) { in mlx5vf_tracker_read_and_clear()
1321 if (mvdev->mdev_detach) { in mlx5vf_tracker_read_and_clear()
1326 mdev = mvdev->mdev; in mlx5vf_tracker_read_and_clear()
1343 wait_for_completion(&mvdev->tracker_comp); in mlx5vf_tracker_read_and_clear()
1360 mlx5vf_state_mutex_unlock(mvdev); in mlx5vf_tracker_read_and_clear()