Skip to content

Commit

Permalink
vfio/mlx5: Refactor migration file state
Browse files Browse the repository at this point in the history
Refactor migration file state to be an emum which is mutual exclusive.

As of that dropped the 'disabled' state as 'error' is the same from
functional point of view.

Next patches from the series will extend this enum for other relevant
states.

Reviewed-by: Jason Gunthorpe <jgg@nvidia.com>
Signed-off-by: Yishai Hadas <yishaih@nvidia.com>
Link: https://lore.kernel.org/r/20221206083438.37807-7-yishaih@nvidia.com
Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
  • Loading branch information
Yishai Hadas authored and Alex Williamson committed Dec 6, 2022
1 parent 91454f8 commit 8b599d1
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 8 deletions.
2 changes: 1 addition & 1 deletion drivers/vfio/pci/mlx5/cmd.c
Original file line number Diff line number Diff line change
Expand Up @@ -351,7 +351,7 @@ void mlx5vf_mig_file_cleanup_cb(struct work_struct *_work)

mutex_lock(&migf->lock);
if (async_data->status) {
migf->is_err = true;
migf->state = MLX5_MIGF_STATE_ERROR;
wake_up_interruptible(&migf->poll_wait);
}
mutex_unlock(&migf->lock);
Expand Down
7 changes: 5 additions & 2 deletions drivers/vfio/pci/mlx5/cmd.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,10 @@
#include <linux/mlx5/cq.h>
#include <linux/mlx5/qp.h>

enum mlx5_vf_migf_state {
MLX5_MIGF_STATE_ERROR = 1,
};

struct mlx5_vhca_data_buffer {
struct sg_append_table table;
loff_t start_pos;
Expand All @@ -37,8 +41,7 @@ struct mlx5vf_async_data {
struct mlx5_vf_migration_file {
struct file *filp;
struct mutex lock;
u8 disabled:1;
u8 is_err:1;
enum mlx5_vf_migf_state state;

u32 pdn;
struct mlx5_vhca_data_buffer *buf;
Expand Down
11 changes: 6 additions & 5 deletions drivers/vfio/pci/mlx5/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@ int mlx5vf_add_migration_pages(struct mlx5_vhca_data_buffer *buf,
static void mlx5vf_disable_fd(struct mlx5_vf_migration_file *migf)
{
mutex_lock(&migf->lock);
migf->disabled = true;
migf->state = MLX5_MIGF_STATE_ERROR;
migf->filp->f_pos = 0;
mutex_unlock(&migf->lock);
}
Expand Down Expand Up @@ -137,7 +137,8 @@ static ssize_t mlx5vf_save_read(struct file *filp, char __user *buf, size_t len,

if (!(filp->f_flags & O_NONBLOCK)) {
if (wait_event_interruptible(migf->poll_wait,
READ_ONCE(vhca_buf->length) || migf->is_err))
READ_ONCE(vhca_buf->length) ||
migf->state == MLX5_MIGF_STATE_ERROR))
return -ERESTARTSYS;
}

Expand All @@ -150,7 +151,7 @@ static ssize_t mlx5vf_save_read(struct file *filp, char __user *buf, size_t len,
done = -EINVAL;
goto out_unlock;
}
if (migf->disabled || migf->is_err) {
if (migf->state == MLX5_MIGF_STATE_ERROR) {
done = -ENODEV;
goto out_unlock;
}
Expand Down Expand Up @@ -199,7 +200,7 @@ static __poll_t mlx5vf_save_poll(struct file *filp,
poll_wait(filp, &migf->poll_wait, wait);

mutex_lock(&migf->lock);
if (migf->disabled || migf->is_err)
if (migf->state == MLX5_MIGF_STATE_ERROR)
pollflags = EPOLLIN | EPOLLRDNORM | EPOLLRDHUP;
else if (READ_ONCE(migf->buf->length))
pollflags = EPOLLIN | EPOLLRDNORM;
Expand Down Expand Up @@ -298,7 +299,7 @@ static ssize_t mlx5vf_resume_write(struct file *filp, const char __user *buf,
return -ENOMEM;

mutex_lock(&migf->lock);
if (migf->disabled) {
if (migf->state == MLX5_MIGF_STATE_ERROR) {
done = -ENODEV;
goto out_unlock;
}
Expand Down

0 comments on commit 8b599d1

Please sign in to comment.