On Wed, 27 Apr 2022 12:31:16 +0300 Yishai Hadas <yishaih@xxxxxxxxxx> wrote: > Reorganize the VF is migratable code to be in a separate function, next > patches from the series may use this. > > Signed-off-by: Yishai Hadas <yishaih@xxxxxxxxxx> > Signed-off-by: Leon Romanovsky <leonro@xxxxxxxxxx> > --- > drivers/vfio/pci/mlx5/cmd.c | 18 ++++++++++++++++++ > drivers/vfio/pci/mlx5/cmd.h | 1 + > drivers/vfio/pci/mlx5/main.c | 22 +++++++--------------- > 3 files changed, 26 insertions(+), 15 deletions(-) > > diff --git a/drivers/vfio/pci/mlx5/cmd.c b/drivers/vfio/pci/mlx5/cmd.c > index 5c9f9218cc1d..d608b8167f58 100644 > --- a/drivers/vfio/pci/mlx5/cmd.c > +++ b/drivers/vfio/pci/mlx5/cmd.c > @@ -71,6 +71,24 @@ int mlx5vf_cmd_query_vhca_migration_state(struct pci_dev *pdev, u16 vhca_id, > return ret; > } > > +bool mlx5vf_cmd_is_migratable(struct pci_dev *pdev) > +{ > + struct mlx5_core_dev *mdev = mlx5_vf_get_core_dev(pdev); > + bool migratable = false; > + > + if (!mdev) > + return false; > + > + if (!MLX5_CAP_GEN(mdev, migration)) > + goto end; > + > + migratable = true; > + > +end: > + mlx5_vf_put_core_dev(mdev); > + return migratable; > +} This goto seems unnecessary, couldn't it instead be written: { struct mlx5_core_dev *mdev = mlx5_vf_get_core_dev(pdev); boot migratable = true; if (!mdev) return false; if (!MLX5_CAP_GEN(mdev, migration)) migratable = false; mlx5_vf_put_core_mdev(mdev); return migratable; } Thanks, Alex > + > int mlx5vf_cmd_get_vhca_id(struct pci_dev *pdev, u16 function_id, u16 *vhca_id) > { > struct mlx5_core_dev *mdev = mlx5_vf_get_core_dev(pdev); > diff --git a/drivers/vfio/pci/mlx5/cmd.h b/drivers/vfio/pci/mlx5/cmd.h > index 1392a11a9cc0..2da6a1c0ec5c 100644 > --- a/drivers/vfio/pci/mlx5/cmd.h > +++ b/drivers/vfio/pci/mlx5/cmd.h > @@ -29,6 +29,7 @@ int mlx5vf_cmd_resume_vhca(struct pci_dev *pdev, u16 vhca_id, u16 op_mod); > int mlx5vf_cmd_query_vhca_migration_state(struct pci_dev *pdev, u16 vhca_id, > size_t *state_size); > int mlx5vf_cmd_get_vhca_id(struct pci_dev *pdev, u16 function_id, u16 *vhca_id); > +bool mlx5vf_cmd_is_migratable(struct pci_dev *pdev); > int mlx5vf_cmd_save_vhca_state(struct pci_dev *pdev, u16 vhca_id, > struct mlx5_vf_migration_file *migf); > int mlx5vf_cmd_load_vhca_state(struct pci_dev *pdev, u16 vhca_id, > diff --git a/drivers/vfio/pci/mlx5/main.c b/drivers/vfio/pci/mlx5/main.c > index bbec5d288fee..2578f61eaeae 100644 > --- a/drivers/vfio/pci/mlx5/main.c > +++ b/drivers/vfio/pci/mlx5/main.c > @@ -597,21 +597,13 @@ static int mlx5vf_pci_probe(struct pci_dev *pdev, > return -ENOMEM; > vfio_pci_core_init_device(&mvdev->core_device, pdev, &mlx5vf_pci_ops); > > - if (pdev->is_virtfn) { > - struct mlx5_core_dev *mdev = > - mlx5_vf_get_core_dev(pdev); > - > - if (mdev) { > - if (MLX5_CAP_GEN(mdev, migration)) { > - mvdev->migrate_cap = 1; > - mvdev->core_device.vdev.migration_flags = > - VFIO_MIGRATION_STOP_COPY | > - VFIO_MIGRATION_P2P; > - mutex_init(&mvdev->state_mutex); > - spin_lock_init(&mvdev->reset_lock); > - } > - mlx5_vf_put_core_dev(mdev); > - } > + if (pdev->is_virtfn && mlx5vf_cmd_is_migratable(pdev)) { > + mvdev->migrate_cap = 1; > + mvdev->core_device.vdev.migration_flags = > + VFIO_MIGRATION_STOP_COPY | > + VFIO_MIGRATION_P2P; > + mutex_init(&mvdev->state_mutex); > + spin_lock_init(&mvdev->reset_lock); > } > > ret = vfio_pci_core_register_device(&mvdev->core_device);