Lines Matching refs:migf

40 	struct mlx5_vf_migration_file *migf = mvdev->saving_migf;
55 if (migf) {
56 err = wait_for_completion_interruptible(&migf->save_comp);
66 if (migf)
67 complete(&migf->save_comp);
347 struct mlx5vf_pci_core_device *mvdev = buf->migf->mvdev;
362 ret = _create_mkey(mdev, buf->migf->pdn, buf, NULL, &buf->mkey);
376 struct mlx5_vf_migration_file *migf = buf->migf;
379 lockdep_assert_held(&migf->mvdev->state_mutex);
380 WARN_ON(migf->mvdev->mdev_detach);
383 mlx5_core_destroy_mkey(migf->mvdev->mdev, buf->mkey);
384 dma_unmap_sgtable(migf->mvdev->mdev->device, &buf->table.sgt,
396 mlx5vf_alloc_data_buffer(struct mlx5_vf_migration_file *migf,
408 buf->migf = migf;
430 spin_lock_irq(&buf->migf->list_lock);
431 list_add_tail(&buf->buf_elm, &buf->migf->avail_list);
432 spin_unlock_irq(&buf->migf->list_lock);
436 mlx5vf_get_data_buffer(struct mlx5_vf_migration_file *migf,
442 lockdep_assert_held(&migf->mvdev->state_mutex);
443 if (migf->mvdev->mdev_detach)
448 spin_lock_irq(&migf->list_lock);
449 list_for_each_entry_safe(buf, temp_buf, &migf->avail_list, buf_elm) {
453 spin_unlock_irq(&migf->list_lock);
459 * (&migf->list_lock) to mlx5vf_free_data_buffer which
465 spin_unlock_irq(&migf->list_lock);
466 buf = mlx5vf_alloc_data_buffer(migf, length, dma_dir);
482 struct mlx5_vf_migration_file *migf = container_of(async_data,
485 mutex_lock(&migf->lock);
491 migf->state = MLX5_MIGF_STATE_PRE_COPY_ERROR;
493 migf->state = MLX5_MIGF_STATE_ERROR;
494 wake_up_interruptible(&migf->poll_wait);
496 mutex_unlock(&migf->lock);
498 complete(&migf->save_comp);
499 fput(migf->filp);
505 struct mlx5_vf_migration_file *migf = header_buf->migf;
521 header_buf->start_pos = header_buf->migf->max_pos;
522 migf->max_pos += header_buf->length;
523 spin_lock_irqsave(&migf->list_lock, flags);
524 list_add_tail(&header_buf->buf_elm, &migf->buf_list);
525 spin_unlock_irqrestore(&migf->list_lock, flags);
527 migf->pre_copy_initial_bytes += sizeof(header);
535 struct mlx5_vf_migration_file *migf = container_of(async_data,
541 bool initial_pre_copy = migf->state != MLX5_MIGF_STATE_PRE_COPY &&
553 async_data->buf->start_pos = migf->max_pos;
554 migf->max_pos += async_data->buf->length;
555 spin_lock_irqsave(&migf->list_lock, flags);
556 list_add_tail(&async_data->buf->buf_elm, &migf->buf_list);
557 spin_unlock_irqrestore(&migf->list_lock, flags);
559 migf->pre_copy_initial_bytes += image_size;
560 migf->state = async_data->last_chunk ?
562 wake_up_interruptible(&migf->poll_wait);
573 queue_work(migf->mvdev->cb_wq, &async_data->work);
577 struct mlx5_vf_migration_file *migf,
591 err = wait_for_completion_interruptible(&migf->save_comp);
595 if (migf->state == MLX5_MIGF_STATE_PRE_COPY_ERROR)
611 async_data = &migf->async_data;
621 if (async_data->last_chunk && migf->buf_header) {
622 header_buf = migf->buf_header;
623 migf->buf_header = NULL;
625 header_buf = mlx5vf_get_data_buffer(migf,
635 migf->state = MLX5_MIGF_STATE_SAVE_LAST;
638 get_file(migf->filp);
639 err = mlx5_cmd_exec_cb(&migf->async_ctx, in, sizeof(in),
651 fput(migf->filp);
655 complete(&migf->save_comp);
660 struct mlx5_vf_migration_file *migf,
686 int mlx5vf_cmd_alloc_pd(struct mlx5_vf_migration_file *migf)
690 lockdep_assert_held(&migf->mvdev->state_mutex);
691 if (migf->mvdev->mdev_detach)
694 err = mlx5_core_alloc_pd(migf->mvdev->mdev, &migf->pdn);
698 void mlx5vf_cmd_dealloc_pd(struct mlx5_vf_migration_file *migf)
700 lockdep_assert_held(&migf->mvdev->state_mutex);
701 if (migf->mvdev->mdev_detach)
704 mlx5_core_dealloc_pd(migf->mvdev->mdev, migf->pdn);
707 void mlx5fv_cmd_clean_migf_resources(struct mlx5_vf_migration_file *migf)
711 lockdep_assert_held(&migf->mvdev->state_mutex);
712 WARN_ON(migf->mvdev->mdev_detach);
714 if (migf->buf) {
715 mlx5vf_free_data_buffer(migf->buf);
716 migf->buf = NULL;
719 if (migf->buf_header) {
720 mlx5vf_free_data_buffer(migf->buf_header);
721 migf->buf_header = NULL;
724 list_splice(&migf->avail_list, &migf->buf_list);
726 while ((entry = list_first_entry_or_null(&migf->buf_list,
732 mlx5vf_cmd_dealloc_pd(migf);