Lines Matching refs:virtvdev
151 virtiovf_pci_alloc_obj_id(struct virtiovf_pci_core_device *virtvdev, u8 type, in virtiovf_pci_alloc_obj_id() argument
154 return virtio_pci_admin_obj_create(virtvdev->core_device.pdev, in virtiovf_pci_alloc_obj_id()
159 virtiovf_pci_free_obj_id(struct virtiovf_pci_core_device *virtvdev, u32 obj_id) in virtiovf_pci_free_obj_id() argument
161 virtio_pci_admin_obj_destroy(virtvdev->core_device.pdev, in virtiovf_pci_free_obj_id()
223 virtiovf_pci_free_obj_id(migf->virtvdev, migf->obj_id); in virtiovf_clean_migf_resources()
234 static void virtiovf_disable_fds(struct virtiovf_pci_core_device *virtvdev) in virtiovf_disable_fds() argument
236 if (virtvdev->resuming_migf) { in virtiovf_disable_fds()
237 virtiovf_disable_fd(virtvdev->resuming_migf); in virtiovf_disable_fds()
238 virtiovf_clean_migf_resources(virtvdev->resuming_migf); in virtiovf_disable_fds()
239 fput(virtvdev->resuming_migf->filp); in virtiovf_disable_fds()
240 virtvdev->resuming_migf = NULL; in virtiovf_disable_fds()
242 if (virtvdev->saving_migf) { in virtiovf_disable_fds()
243 virtiovf_disable_fd(virtvdev->saving_migf); in virtiovf_disable_fds()
244 virtiovf_clean_migf_resources(virtvdev->saving_migf); in virtiovf_disable_fds()
245 fput(virtvdev->saving_migf->filp); in virtiovf_disable_fds()
246 virtvdev->saving_migf = NULL; in virtiovf_disable_fds()
254 static void virtiovf_state_mutex_unlock(struct virtiovf_pci_core_device *virtvdev) in virtiovf_state_mutex_unlock() argument
257 spin_lock(&virtvdev->reset_lock); in virtiovf_state_mutex_unlock()
258 if (virtvdev->deferred_reset) { in virtiovf_state_mutex_unlock()
259 virtvdev->deferred_reset = false; in virtiovf_state_mutex_unlock()
260 spin_unlock(&virtvdev->reset_lock); in virtiovf_state_mutex_unlock()
261 virtvdev->mig_state = VFIO_DEVICE_STATE_RUNNING; in virtiovf_state_mutex_unlock()
262 virtiovf_disable_fds(virtvdev); in virtiovf_state_mutex_unlock()
265 mutex_unlock(&virtvdev->state_mutex); in virtiovf_state_mutex_unlock()
266 spin_unlock(&virtvdev->reset_lock); in virtiovf_state_mutex_unlock()
271 struct virtiovf_pci_core_device *virtvdev = dev_get_drvdata(&pdev->dev); in virtiovf_migration_reset_done() local
273 if (!virtvdev->migrate_cap) in virtiovf_migration_reset_done()
283 spin_lock(&virtvdev->reset_lock); in virtiovf_migration_reset_done()
284 virtvdev->deferred_reset = true; in virtiovf_migration_reset_done()
285 if (!mutex_trylock(&virtvdev->state_mutex)) { in virtiovf_migration_reset_done()
286 spin_unlock(&virtvdev->reset_lock); in virtiovf_migration_reset_done()
289 spin_unlock(&virtvdev->reset_lock); in virtiovf_migration_reset_done()
290 virtiovf_state_mutex_unlock(virtvdev); in virtiovf_migration_reset_done()
442 struct virtiovf_pci_core_device *virtvdev = migf->virtvdev; in virtiovf_precopy_ioctl() local
460 mutex_lock(&virtvdev->state_mutex); in virtiovf_precopy_ioctl()
461 if (virtvdev->mig_state != VFIO_DEVICE_STATE_PRE_COPY && in virtiovf_precopy_ioctl()
462 virtvdev->mig_state != VFIO_DEVICE_STATE_PRE_COPY_P2P) { in virtiovf_precopy_ioctl()
474 ret = virtio_pci_admin_dev_parts_metadata_get(virtvdev->core_device.pdev, in virtiovf_precopy_ioctl()
516 virtiovf_state_mutex_unlock(virtvdev); in virtiovf_precopy_ioctl()
524 virtiovf_state_mutex_unlock(virtvdev); in virtiovf_precopy_ioctl()
599 ret = virtio_pci_admin_dev_parts_get(migf->virtvdev->core_device.pdev, in virtiovf_read_device_context_chunk()
637 virtiovf_pci_save_device_final_data(struct virtiovf_pci_core_device *virtvdev) in virtiovf_pci_save_device_final_data() argument
639 struct virtiovf_migration_file *migf = virtvdev->saving_migf; in virtiovf_pci_save_device_final_data()
646 ret = virtio_pci_admin_dev_parts_metadata_get(virtvdev->core_device.pdev, in virtiovf_pci_save_device_final_data()
671 virtiovf_pci_save_device_data(struct virtiovf_pci_core_device *virtvdev, in virtiovf_pci_save_device_data() argument
696 migf->virtvdev = virtvdev; in virtiovf_pci_save_device_data()
698 lockdep_assert_held(&virtvdev->state_mutex); in virtiovf_pci_save_device_data()
699 ret = virtiovf_pci_alloc_obj_id(virtvdev, VIRTIO_RESOURCE_OBJ_DEV_PARTS_TYPE_GET, in virtiovf_pci_save_device_data()
707 ret = virtio_pci_admin_dev_parts_metadata_get(virtvdev->core_device.pdev, in virtiovf_pci_save_device_data()
956 mutex_lock(&migf->virtvdev->state_mutex); in virtiovf_resume_write()
1031 ret = virtio_pci_admin_dev_parts_set(migf->virtvdev->core_device.pdev, in virtiovf_resume_write()
1051 virtiovf_state_mutex_unlock(migf->virtvdev); in virtiovf_resume_write()
1062 virtiovf_pci_resume_device_data(struct virtiovf_pci_core_device *virtvdev) in virtiovf_pci_resume_device_data() argument
1105 migf->virtvdev = virtvdev; in virtiovf_pci_resume_device_data()
1106 ret = virtiovf_pci_alloc_obj_id(virtvdev, VIRTIO_RESOURCE_OBJ_DEV_PARTS_TYPE_SET, in virtiovf_pci_resume_device_data()
1128 virtiovf_pci_step_device_state_locked(struct virtiovf_pci_core_device *virtvdev, in virtiovf_pci_step_device_state_locked() argument
1131 u32 cur = virtvdev->mig_state; in virtiovf_pci_step_device_state_locked()
1146 ret = virtio_pci_admin_mode_set(virtvdev->core_device.pdev, in virtiovf_pci_step_device_state_locked()
1155 ret = virtio_pci_admin_mode_set(virtvdev->core_device.pdev, 0); in virtiovf_pci_step_device_state_locked()
1164 migf = virtiovf_pci_save_device_data(virtvdev, false); in virtiovf_pci_step_device_state_locked()
1168 virtvdev->saving_migf = migf; in virtiovf_pci_step_device_state_locked()
1175 virtiovf_disable_fds(virtvdev); in virtiovf_pci_step_device_state_locked()
1182 migf = virtiovf_pci_resume_device_data(virtvdev); in virtiovf_pci_step_device_state_locked()
1186 virtvdev->resuming_migf = migf; in virtiovf_pci_step_device_state_locked()
1191 virtiovf_disable_fds(virtvdev); in virtiovf_pci_step_device_state_locked()
1200 migf = virtiovf_pci_save_device_data(virtvdev, true); in virtiovf_pci_step_device_state_locked()
1204 virtvdev->saving_migf = migf; in virtiovf_pci_step_device_state_locked()
1209 ret = virtiovf_pci_save_device_final_data(virtvdev); in virtiovf_pci_step_device_state_locked()
1224 struct virtiovf_pci_core_device *virtvdev = container_of( in virtiovf_pci_set_device_state() local
1230 mutex_lock(&virtvdev->state_mutex); in virtiovf_pci_set_device_state()
1231 while (new_state != virtvdev->mig_state) { in virtiovf_pci_set_device_state()
1232 ret = vfio_mig_get_next_state(vdev, virtvdev->mig_state, in virtiovf_pci_set_device_state()
1238 res = virtiovf_pci_step_device_state_locked(virtvdev, next_state); in virtiovf_pci_set_device_state()
1241 virtvdev->mig_state = next_state; in virtiovf_pci_set_device_state()
1242 if (WARN_ON(res && new_state != virtvdev->mig_state)) { in virtiovf_pci_set_device_state()
1248 virtiovf_state_mutex_unlock(virtvdev); in virtiovf_pci_set_device_state()
1255 struct virtiovf_pci_core_device *virtvdev = container_of( in virtiovf_pci_get_device_state() local
1258 mutex_lock(&virtvdev->state_mutex); in virtiovf_pci_get_device_state()
1259 *curr_state = virtvdev->mig_state; in virtiovf_pci_get_device_state()
1260 virtiovf_state_mutex_unlock(virtvdev); in virtiovf_pci_get_device_state()
1267 struct virtiovf_pci_core_device *virtvdev = container_of( in virtiovf_pci_get_data_size() local
1274 mutex_lock(&virtvdev->state_mutex); in virtiovf_pci_get_data_size()
1275 obj_id_exists = virtvdev->saving_migf && virtvdev->saving_migf->has_obj_id; in virtiovf_pci_get_data_size()
1277 ret = virtiovf_pci_alloc_obj_id(virtvdev, in virtiovf_pci_get_data_size()
1283 obj_id = virtvdev->saving_migf->obj_id; in virtiovf_pci_get_data_size()
1286 ret = virtio_pci_admin_dev_parts_metadata_get(virtvdev->core_device.pdev, in virtiovf_pci_get_data_size()
1298 virtiovf_pci_free_obj_id(virtvdev, obj_id); in virtiovf_pci_get_data_size()
1300 virtiovf_state_mutex_unlock(virtvdev); in virtiovf_pci_get_data_size()
1310 void virtiovf_set_migratable(struct virtiovf_pci_core_device *virtvdev) in virtiovf_set_migratable() argument
1312 virtvdev->migrate_cap = 1; in virtiovf_set_migratable()
1313 mutex_init(&virtvdev->state_mutex); in virtiovf_set_migratable()
1314 spin_lock_init(&virtvdev->reset_lock); in virtiovf_set_migratable()
1315 virtvdev->core_device.vdev.migration_flags = in virtiovf_set_migratable()
1319 virtvdev->core_device.vdev.mig_ops = &virtvdev_pci_mig_ops; in virtiovf_set_migratable()
1322 void virtiovf_open_migration(struct virtiovf_pci_core_device *virtvdev) in virtiovf_open_migration() argument
1324 if (!virtvdev->migrate_cap) in virtiovf_open_migration()
1327 virtvdev->mig_state = VFIO_DEVICE_STATE_RUNNING; in virtiovf_open_migration()
1330 void virtiovf_close_migration(struct virtiovf_pci_core_device *virtvdev) in virtiovf_close_migration() argument
1332 if (!virtvdev->migrate_cap) in virtiovf_close_migration()
1335 virtiovf_disable_fds(virtvdev); in virtiovf_close_migration()