[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <1f9467a9-c42b-438b-afac-2b38b9862542@nvidia.com>
Date: Thu, 29 Aug 2024 17:25:58 +0200
From: Dragos Tatulea <dtatulea@...dia.com>
To: Eugenio Perez Martin <eperezma@...hat.com>
Cc: "Michael S . Tsirkin" <mst@...hat.com>, Jason Wang <jasowang@...hat.com>,
Si-Wei Liu <si-wei.liu@...cle.com>,
virtualization@...ts.linux-foundation.org, Gal Pressman <gal@...dia.com>,
kvm@...r.kernel.org, linux-kernel@...r.kernel.org,
Parav Pandit <parav@...dia.com>, Xuan Zhuo <xuanzhuo@...ux.alibaba.com>,
Cosmin Ratiu <cratiu@...dia.com>
Subject: Re: [PATCH vhost 6/7] vdpa/mlx5: Introduce init/destroy for MR
resources
On 29.08.24 16:37, Eugenio Perez Martin wrote:
> On Wed, Aug 21, 2024 at 1:42 PM Dragos Tatulea <dtatulea@...dia.com> wrote:
>>
>> There's currently not a lot of action happening during
>> the init/destroy of MR resources. But more will be added
>> in the upcoming patches.
>
> If the series doesn't receive new patches, it is just the next patch :).
>
>>
>> Signed-off-by: Dragos Tatulea <dtatulea@...dia.com>
>> Reviewed-by: Cosmin Ratiu <cratiu@...dia.com>
>> ---
>> drivers/vdpa/mlx5/core/mlx5_vdpa.h | 2 ++
>> drivers/vdpa/mlx5/core/mr.c | 17 +++++++++++++++++
>> drivers/vdpa/mlx5/core/resources.c | 3 ---
>> drivers/vdpa/mlx5/net/mlx5_vnet.c | 10 ++++++++--
>> 4 files changed, 27 insertions(+), 5 deletions(-)
>>
>> diff --git a/drivers/vdpa/mlx5/core/mlx5_vdpa.h b/drivers/vdpa/mlx5/core/mlx5_vdpa.h
>> index 89b564cecddf..c3e17bc888e8 100644
>> --- a/drivers/vdpa/mlx5/core/mlx5_vdpa.h
>> +++ b/drivers/vdpa/mlx5/core/mlx5_vdpa.h
>> @@ -138,6 +138,8 @@ int mlx5_vdpa_create_mkey(struct mlx5_vdpa_dev *mvdev, u32 *mkey, u32 *in,
>> int mlx5_vdpa_destroy_mkey(struct mlx5_vdpa_dev *mvdev, u32 mkey);
>> struct mlx5_vdpa_mr *mlx5_vdpa_create_mr(struct mlx5_vdpa_dev *mvdev,
>> struct vhost_iotlb *iotlb);
>> +int mlx5_vdpa_init_mr_resources(struct mlx5_vdpa_dev *mvdev);
>> +void mlx5_vdpa_destroy_mr_resources(struct mlx5_vdpa_dev *mvdev);
>> void mlx5_vdpa_clean_mrs(struct mlx5_vdpa_dev *mvdev);
>> void mlx5_vdpa_get_mr(struct mlx5_vdpa_dev *mvdev,
>> struct mlx5_vdpa_mr *mr);
>> diff --git a/drivers/vdpa/mlx5/core/mr.c b/drivers/vdpa/mlx5/core/mr.c
>> index f20f2a8a701d..ec75f165f832 100644
>> --- a/drivers/vdpa/mlx5/core/mr.c
>> +++ b/drivers/vdpa/mlx5/core/mr.c
>> @@ -843,3 +843,20 @@ int mlx5_vdpa_reset_mr(struct mlx5_vdpa_dev *mvdev, unsigned int asid)
>>
>> return 0;
>> }
>> +
>> +int mlx5_vdpa_init_mr_resources(struct mlx5_vdpa_dev *mvdev)
>> +{
>> + struct mlx5_vdpa_mr_resources *mres = &mvdev->mres;
>> +
>> + INIT_LIST_HEAD(&mres->mr_list_head);
>> + mutex_init(&mres->lock);
>> +
>> + return 0;
>
> I'd leave this function return void here and remove the caller error
> control path.
>
It is like this because the next patch adds an error path.
>> +}
>> +
>> +void mlx5_vdpa_destroy_mr_resources(struct mlx5_vdpa_dev *mvdev)
>> +{
>> + struct mlx5_vdpa_mr_resources *mres = &mvdev->mres;
>> +
>> + mutex_destroy(&mres->lock);
>> +}
>> diff --git a/drivers/vdpa/mlx5/core/resources.c b/drivers/vdpa/mlx5/core/resources.c
>> index fe2ca3458f6c..aeae31d0cefa 100644
>> --- a/drivers/vdpa/mlx5/core/resources.c
>> +++ b/drivers/vdpa/mlx5/core/resources.c
>> @@ -256,7 +256,6 @@ int mlx5_vdpa_alloc_resources(struct mlx5_vdpa_dev *mvdev)
>> mlx5_vdpa_warn(mvdev, "resources already allocated\n");
>> return -EINVAL;
>> }
>> - mutex_init(&mvdev->mres.lock);
>> res->uar = mlx5_get_uars_page(mdev);
>> if (IS_ERR(res->uar)) {
>> err = PTR_ERR(res->uar);
>> @@ -301,7 +300,6 @@ int mlx5_vdpa_alloc_resources(struct mlx5_vdpa_dev *mvdev)
>> err_uctx:
>> mlx5_put_uars_page(mdev, res->uar);
>> err_uars:
>> - mutex_destroy(&mvdev->mres.lock);
>
> Maybe it is just me, but this patch is also moving the lock lifetime
> from mlx5_vdpa_alloc_resources / mlx5_vdpa_free_resources to
> mlx5_vdpa_dev_add / mlx5_vdpa_free. I guess it has a justification we
> can either clarify in the patch message or split in its own patch.
>
Good point. Will do.
>> return err;
>> }
>>
>> @@ -318,7 +316,6 @@ void mlx5_vdpa_free_resources(struct mlx5_vdpa_dev *mvdev)
>> dealloc_pd(mvdev, res->pdn, res->uid);
>> destroy_uctx(mvdev, res->uid);
>> mlx5_put_uars_page(mvdev->mdev, res->uar);
>> - mutex_destroy(&mvdev->mres.lock);
>> res->valid = false;
>> }
>>
>> diff --git a/drivers/vdpa/mlx5/net/mlx5_vnet.c b/drivers/vdpa/mlx5/net/mlx5_vnet.c
>> index 8a51c492a62a..1cadcb05a5c7 100644
>> --- a/drivers/vdpa/mlx5/net/mlx5_vnet.c
>> +++ b/drivers/vdpa/mlx5/net/mlx5_vnet.c
>> @@ -3434,6 +3434,7 @@ static void mlx5_vdpa_free(struct vdpa_device *vdev)
>>
>> free_fixed_resources(ndev);
>> mlx5_vdpa_clean_mrs(mvdev);
>> + mlx5_vdpa_destroy_mr_resources(&ndev->mvdev);
>> if (!is_zero_ether_addr(ndev->config.mac)) {
>> pfmdev = pci_get_drvdata(pci_physfn(mvdev->mdev->pdev));
>> mlx5_mpfs_del_mac(pfmdev, ndev->config.mac);
>> @@ -3962,12 +3963,15 @@ static int mlx5_vdpa_dev_add(struct vdpa_mgmt_dev *v_mdev, const char *name,
>> if (err)
>> goto err_mpfs;
>>
>> - INIT_LIST_HEAD(&mvdev->mres.mr_list_head);
>> + err = mlx5_vdpa_init_mr_resources(mvdev);
>> + if (err)
>> + goto err_res;
>> +
>
> Extra newline here.
>
Seems like I'm keen on these extra newlines. Will fix.
Thanks,
Dragos
>>
>> if (MLX5_CAP_GEN(mvdev->mdev, umem_uid_0)) {
>> err = mlx5_vdpa_create_dma_mr(mvdev);
>> if (err)
>> - goto err_res;
>> + goto err_mr_res;
>> }
>>
>> err = alloc_fixed_resources(ndev);
>> @@ -4009,6 +4013,8 @@ static int mlx5_vdpa_dev_add(struct vdpa_mgmt_dev *v_mdev, const char *name,
>> free_fixed_resources(ndev);
>> err_mr:
>> mlx5_vdpa_clean_mrs(mvdev);
>> +err_mr_res:
>> + mlx5_vdpa_destroy_mr_resources(mvdev);
>> err_res:
>> mlx5_vdpa_free_resources(&ndev->mvdev);
>> err_mpfs:
>> --
>> 2.45.1
>>
>
Powered by blists - more mailing lists