Lines Matching refs:virtvdev

152 virtiovf_pci_alloc_obj_id(struct virtiovf_pci_core_device *virtvdev, u8 type,  in virtiovf_pci_alloc_obj_id()  argument
155 return virtio_pci_admin_obj_create(virtvdev->core_device.pdev, in virtiovf_pci_alloc_obj_id()
160 virtiovf_pci_free_obj_id(struct virtiovf_pci_core_device *virtvdev, u32 obj_id) in virtiovf_pci_free_obj_id() argument
162 virtio_pci_admin_obj_destroy(virtvdev->core_device.pdev, in virtiovf_pci_free_obj_id()
224 virtiovf_pci_free_obj_id(migf->virtvdev, migf->obj_id); in virtiovf_clean_migf_resources()
235 static void virtiovf_disable_fds(struct virtiovf_pci_core_device *virtvdev) in virtiovf_disable_fds() argument
237 if (virtvdev->resuming_migf) { in virtiovf_disable_fds()
238 virtiovf_disable_fd(virtvdev->resuming_migf); in virtiovf_disable_fds()
239 virtiovf_clean_migf_resources(virtvdev->resuming_migf); in virtiovf_disable_fds()
240 fput(virtvdev->resuming_migf->filp); in virtiovf_disable_fds()
241 virtvdev->resuming_migf = NULL; in virtiovf_disable_fds()
243 if (virtvdev->saving_migf) { in virtiovf_disable_fds()
244 virtiovf_disable_fd(virtvdev->saving_migf); in virtiovf_disable_fds()
245 virtiovf_clean_migf_resources(virtvdev->saving_migf); in virtiovf_disable_fds()
246 fput(virtvdev->saving_migf->filp); in virtiovf_disable_fds()
247 virtvdev->saving_migf = NULL; in virtiovf_disable_fds()
255 static void virtiovf_state_mutex_unlock(struct virtiovf_pci_core_device *virtvdev) in virtiovf_state_mutex_unlock() argument
258 spin_lock(&virtvdev->reset_lock); in virtiovf_state_mutex_unlock()
259 if (virtvdev->deferred_reset) { in virtiovf_state_mutex_unlock()
260 virtvdev->deferred_reset = false; in virtiovf_state_mutex_unlock()
261 spin_unlock(&virtvdev->reset_lock); in virtiovf_state_mutex_unlock()
262 virtvdev->mig_state = VFIO_DEVICE_STATE_RUNNING; in virtiovf_state_mutex_unlock()
263 virtiovf_disable_fds(virtvdev); in virtiovf_state_mutex_unlock()
266 mutex_unlock(&virtvdev->state_mutex); in virtiovf_state_mutex_unlock()
267 spin_unlock(&virtvdev->reset_lock); in virtiovf_state_mutex_unlock()
272 struct virtiovf_pci_core_device *virtvdev = dev_get_drvdata(&pdev->dev); in virtiovf_migration_reset_done() local
274 if (!virtvdev->migrate_cap) in virtiovf_migration_reset_done()
284 spin_lock(&virtvdev->reset_lock); in virtiovf_migration_reset_done()
285 virtvdev->deferred_reset = true; in virtiovf_migration_reset_done()
286 if (!mutex_trylock(&virtvdev->state_mutex)) { in virtiovf_migration_reset_done()
287 spin_unlock(&virtvdev->reset_lock); in virtiovf_migration_reset_done()
290 spin_unlock(&virtvdev->reset_lock); in virtiovf_migration_reset_done()
291 virtiovf_state_mutex_unlock(virtvdev); in virtiovf_migration_reset_done()
443 struct virtiovf_pci_core_device *virtvdev = migf->virtvdev; in virtiovf_precopy_ioctl() local
461 mutex_lock(&virtvdev->state_mutex); in virtiovf_precopy_ioctl()
462 if (virtvdev->mig_state != VFIO_DEVICE_STATE_PRE_COPY && in virtiovf_precopy_ioctl()
463 virtvdev->mig_state != VFIO_DEVICE_STATE_PRE_COPY_P2P) { in virtiovf_precopy_ioctl()
475 ret = virtio_pci_admin_dev_parts_metadata_get(virtvdev->core_device.pdev, in virtiovf_precopy_ioctl()
517 virtiovf_state_mutex_unlock(virtvdev); in virtiovf_precopy_ioctl()
525 virtiovf_state_mutex_unlock(virtvdev); in virtiovf_precopy_ioctl()
600 ret = virtio_pci_admin_dev_parts_get(migf->virtvdev->core_device.pdev, in virtiovf_read_device_context_chunk()
638 virtiovf_pci_save_device_final_data(struct virtiovf_pci_core_device *virtvdev) in virtiovf_pci_save_device_final_data() argument
640 struct virtiovf_migration_file *migf = virtvdev->saving_migf; in virtiovf_pci_save_device_final_data()
647 ret = virtio_pci_admin_dev_parts_metadata_get(virtvdev->core_device.pdev, in virtiovf_pci_save_device_final_data()
672 virtiovf_pci_save_device_data(struct virtiovf_pci_core_device *virtvdev, in virtiovf_pci_save_device_data() argument
697 migf->virtvdev = virtvdev; in virtiovf_pci_save_device_data()
699 lockdep_assert_held(&virtvdev->state_mutex); in virtiovf_pci_save_device_data()
700 ret = virtiovf_pci_alloc_obj_id(virtvdev, VIRTIO_RESOURCE_OBJ_DEV_PARTS_TYPE_GET, in virtiovf_pci_save_device_data()
708 ret = virtio_pci_admin_dev_parts_metadata_get(virtvdev->core_device.pdev, in virtiovf_pci_save_device_data()
957 mutex_lock(&migf->virtvdev->state_mutex); in virtiovf_resume_write()
1032 ret = virtio_pci_admin_dev_parts_set(migf->virtvdev->core_device.pdev, in virtiovf_resume_write()
1052 virtiovf_state_mutex_unlock(migf->virtvdev); in virtiovf_resume_write()
1063 virtiovf_pci_resume_device_data(struct virtiovf_pci_core_device *virtvdev) in virtiovf_pci_resume_device_data() argument
1106 migf->virtvdev = virtvdev; in virtiovf_pci_resume_device_data()
1107 ret = virtiovf_pci_alloc_obj_id(virtvdev, VIRTIO_RESOURCE_OBJ_DEV_PARTS_TYPE_SET, in virtiovf_pci_resume_device_data()
1129 virtiovf_pci_step_device_state_locked(struct virtiovf_pci_core_device *virtvdev, in virtiovf_pci_step_device_state_locked() argument
1132 u32 cur = virtvdev->mig_state; in virtiovf_pci_step_device_state_locked()
1147 ret = virtio_pci_admin_mode_set(virtvdev->core_device.pdev, in virtiovf_pci_step_device_state_locked()
1156 ret = virtio_pci_admin_mode_set(virtvdev->core_device.pdev, 0); in virtiovf_pci_step_device_state_locked()
1165 migf = virtiovf_pci_save_device_data(virtvdev, false); in virtiovf_pci_step_device_state_locked()
1169 virtvdev->saving_migf = migf; in virtiovf_pci_step_device_state_locked()
1176 virtiovf_disable_fds(virtvdev); in virtiovf_pci_step_device_state_locked()
1183 migf = virtiovf_pci_resume_device_data(virtvdev); in virtiovf_pci_step_device_state_locked()
1187 virtvdev->resuming_migf = migf; in virtiovf_pci_step_device_state_locked()
1192 virtiovf_disable_fds(virtvdev); in virtiovf_pci_step_device_state_locked()
1201 migf = virtiovf_pci_save_device_data(virtvdev, true); in virtiovf_pci_step_device_state_locked()
1205 virtvdev->saving_migf = migf; in virtiovf_pci_step_device_state_locked()
1210 ret = virtiovf_pci_save_device_final_data(virtvdev); in virtiovf_pci_step_device_state_locked()
1225 struct virtiovf_pci_core_device *virtvdev = container_of( in virtiovf_pci_set_device_state() local
1231 mutex_lock(&virtvdev->state_mutex); in virtiovf_pci_set_device_state()
1232 while (new_state != virtvdev->mig_state) { in virtiovf_pci_set_device_state()
1233 ret = vfio_mig_get_next_state(vdev, virtvdev->mig_state, in virtiovf_pci_set_device_state()
1239 res = virtiovf_pci_step_device_state_locked(virtvdev, next_state); in virtiovf_pci_set_device_state()
1242 virtvdev->mig_state = next_state; in virtiovf_pci_set_device_state()
1243 if (WARN_ON(res && new_state != virtvdev->mig_state)) { in virtiovf_pci_set_device_state()
1249 virtiovf_state_mutex_unlock(virtvdev); in virtiovf_pci_set_device_state()
1256 struct virtiovf_pci_core_device *virtvdev = container_of( in virtiovf_pci_get_device_state() local
1259 mutex_lock(&virtvdev->state_mutex); in virtiovf_pci_get_device_state()
1260 *curr_state = virtvdev->mig_state; in virtiovf_pci_get_device_state()
1261 virtiovf_state_mutex_unlock(virtvdev); in virtiovf_pci_get_device_state()
1268 struct virtiovf_pci_core_device *virtvdev = container_of( in virtiovf_pci_get_data_size() local
1275 mutex_lock(&virtvdev->state_mutex); in virtiovf_pci_get_data_size()
1276 obj_id_exists = virtvdev->saving_migf && virtvdev->saving_migf->has_obj_id; in virtiovf_pci_get_data_size()
1278 ret = virtiovf_pci_alloc_obj_id(virtvdev, in virtiovf_pci_get_data_size()
1284 obj_id = virtvdev->saving_migf->obj_id; in virtiovf_pci_get_data_size()
1287 ret = virtio_pci_admin_dev_parts_metadata_get(virtvdev->core_device.pdev, in virtiovf_pci_get_data_size()
1299 virtiovf_pci_free_obj_id(virtvdev, obj_id); in virtiovf_pci_get_data_size()
1301 virtiovf_state_mutex_unlock(virtvdev); in virtiovf_pci_get_data_size()
1311 void virtiovf_set_migratable(struct virtiovf_pci_core_device *virtvdev) in virtiovf_set_migratable() argument
1313 virtvdev->migrate_cap = 1; in virtiovf_set_migratable()
1314 mutex_init(&virtvdev->state_mutex); in virtiovf_set_migratable()
1315 spin_lock_init(&virtvdev->reset_lock); in virtiovf_set_migratable()
1316 virtvdev->core_device.vdev.migration_flags = in virtiovf_set_migratable()
1320 virtvdev->core_device.vdev.mig_ops = &virtvdev_pci_mig_ops; in virtiovf_set_migratable()
1323 void virtiovf_open_migration(struct virtiovf_pci_core_device *virtvdev) in virtiovf_open_migration() argument
1325 if (!virtvdev->migrate_cap) in virtiovf_open_migration()
1328 virtvdev->mig_state = VFIO_DEVICE_STATE_RUNNING; in virtiovf_open_migration()
1331 void virtiovf_close_migration(struct virtiovf_pci_core_device *virtvdev) in virtiovf_close_migration() argument
1333 if (!virtvdev->migrate_cap) in virtiovf_close_migration()
1336 virtiovf_disable_fds(virtvdev); in virtiovf_close_migration()