All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jason Wang <jasowang@redhat.com>
To: Eli Cohen <elic@nvidia.com>,
	mst@redhat.com, virtualization@lists.linux-foundation.org,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH v1] vdpa/mlx5: Add support for doorbell bypassing
Date: Thu, 3 Jun 2021 15:11:51 +0800	[thread overview]
Message-ID: <f99c6019-3b7a-8a91-27fc-7db70e9f1c1c@redhat.com> (raw)
In-Reply-To: <20210602095358.83318-1-elic@nvidia.com>


在 2021/6/2 下午5:53, Eli Cohen 写道:
> Implement mlx5_get_vq_notification() to return the doorbell address.
> Since the notification area is mapped to userspace, make sure that the
> BAR size is at least PAGE_SIZE large.
>
> Signed-off-by: Eli Cohen <elic@nvidia.com>
> ---
> v0 --> v1:
>    Make sure SF bar size is not smaller than PAGE_SIZE
>
>   drivers/vdpa/mlx5/core/mlx5_vdpa.h |  1 +
>   drivers/vdpa/mlx5/core/resources.c |  1 +
>   drivers/vdpa/mlx5/net/mlx5_vnet.c  | 17 +++++++++++++++++
>   3 files changed, 19 insertions(+)
>
> diff --git a/drivers/vdpa/mlx5/core/mlx5_vdpa.h b/drivers/vdpa/mlx5/core/mlx5_vdpa.h
> index 09a16a3d1b2a..0002b2136b48 100644
> --- a/drivers/vdpa/mlx5/core/mlx5_vdpa.h
> +++ b/drivers/vdpa/mlx5/core/mlx5_vdpa.h
> @@ -42,6 +42,7 @@ struct mlx5_vdpa_resources {
>   	u32 pdn;
>   	struct mlx5_uars_page *uar;
>   	void __iomem *kick_addr;
> +	u64 phys_kick_addr;
>   	u16 uid;
>   	u32 null_mkey;
>   	bool valid;
> diff --git a/drivers/vdpa/mlx5/core/resources.c b/drivers/vdpa/mlx5/core/resources.c
> index 836ab9ef0fa6..d4606213f88a 100644
> --- a/drivers/vdpa/mlx5/core/resources.c
> +++ b/drivers/vdpa/mlx5/core/resources.c
> @@ -253,6 +253,7 @@ int mlx5_vdpa_alloc_resources(struct mlx5_vdpa_dev *mvdev)
>   		goto err_key;
>   
>   	kick_addr = mdev->bar_addr + offset;
> +	res->phys_kick_addr = kick_addr;
>   
>   	res->kick_addr = ioremap(kick_addr, PAGE_SIZE);
>   	if (!res->kick_addr) {
> diff --git a/drivers/vdpa/mlx5/net/mlx5_vnet.c b/drivers/vdpa/mlx5/net/mlx5_vnet.c
> index 5500bcfe84b4..1936039e05bd 100644
> --- a/drivers/vdpa/mlx5/net/mlx5_vnet.c
> +++ b/drivers/vdpa/mlx5/net/mlx5_vnet.c
> @@ -1871,8 +1871,25 @@ static void mlx5_vdpa_free(struct vdpa_device *vdev)
>   
>   static struct vdpa_notification_area mlx5_get_vq_notification(struct vdpa_device *vdev, u16 idx)
>   {
> +	struct mlx5_vdpa_dev *mvdev = to_mvdev(vdev);
>   	struct vdpa_notification_area ret = {};
> +	struct mlx5_vdpa_net *ndev;
> +	phys_addr_t addr;
> +
> +	/* If SF BAR size is smaller than PAGE_SIZE, do not use direct
> +	 * notification to avoid the risk of mapping pages that contain BAR of more
> +	 * than one SF
> +	 */
> +	if (MLX5_CAP_GEN(mvdev->mdev, log_min_sf_size) + 12 < PAGE_SHIFT)
> +		return ret;
> +
> +	ndev = to_mlx5_vdpa_ndev(mvdev);
> +	addr = (phys_addr_t)ndev->mvdev.res.phys_kick_addr;
> +	if (addr & ~PAGE_MASK)
> +		return ret;


This has been checked by vhost-vDPA, and it's better to leave those 
policy checking to them driver instead of checking it in the parent.

Thanks


>   
> +	ret.addr = (phys_addr_t)ndev->mvdev.res.phys_kick_addr;
> +	ret.size = PAGE_SIZE;
>   	return ret;
>   }
>   


WARNING: multiple messages have this Message-ID (diff)
From: Jason Wang <jasowang@redhat.com>
To: Eli Cohen <elic@nvidia.com>,
	mst@redhat.com, virtualization@lists.linux-foundation.org,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH v1] vdpa/mlx5: Add support for doorbell bypassing
Date: Thu, 3 Jun 2021 15:11:51 +0800	[thread overview]
Message-ID: <f99c6019-3b7a-8a91-27fc-7db70e9f1c1c@redhat.com> (raw)
In-Reply-To: <20210602095358.83318-1-elic@nvidia.com>


在 2021/6/2 下午5:53, Eli Cohen 写道:
> Implement mlx5_get_vq_notification() to return the doorbell address.
> Since the notification area is mapped to userspace, make sure that the
> BAR size is at least PAGE_SIZE large.
>
> Signed-off-by: Eli Cohen <elic@nvidia.com>
> ---
> v0 --> v1:
>    Make sure SF bar size is not smaller than PAGE_SIZE
>
>   drivers/vdpa/mlx5/core/mlx5_vdpa.h |  1 +
>   drivers/vdpa/mlx5/core/resources.c |  1 +
>   drivers/vdpa/mlx5/net/mlx5_vnet.c  | 17 +++++++++++++++++
>   3 files changed, 19 insertions(+)
>
> diff --git a/drivers/vdpa/mlx5/core/mlx5_vdpa.h b/drivers/vdpa/mlx5/core/mlx5_vdpa.h
> index 09a16a3d1b2a..0002b2136b48 100644
> --- a/drivers/vdpa/mlx5/core/mlx5_vdpa.h
> +++ b/drivers/vdpa/mlx5/core/mlx5_vdpa.h
> @@ -42,6 +42,7 @@ struct mlx5_vdpa_resources {
>   	u32 pdn;
>   	struct mlx5_uars_page *uar;
>   	void __iomem *kick_addr;
> +	u64 phys_kick_addr;
>   	u16 uid;
>   	u32 null_mkey;
>   	bool valid;
> diff --git a/drivers/vdpa/mlx5/core/resources.c b/drivers/vdpa/mlx5/core/resources.c
> index 836ab9ef0fa6..d4606213f88a 100644
> --- a/drivers/vdpa/mlx5/core/resources.c
> +++ b/drivers/vdpa/mlx5/core/resources.c
> @@ -253,6 +253,7 @@ int mlx5_vdpa_alloc_resources(struct mlx5_vdpa_dev *mvdev)
>   		goto err_key;
>   
>   	kick_addr = mdev->bar_addr + offset;
> +	res->phys_kick_addr = kick_addr;
>   
>   	res->kick_addr = ioremap(kick_addr, PAGE_SIZE);
>   	if (!res->kick_addr) {
> diff --git a/drivers/vdpa/mlx5/net/mlx5_vnet.c b/drivers/vdpa/mlx5/net/mlx5_vnet.c
> index 5500bcfe84b4..1936039e05bd 100644
> --- a/drivers/vdpa/mlx5/net/mlx5_vnet.c
> +++ b/drivers/vdpa/mlx5/net/mlx5_vnet.c
> @@ -1871,8 +1871,25 @@ static void mlx5_vdpa_free(struct vdpa_device *vdev)
>   
>   static struct vdpa_notification_area mlx5_get_vq_notification(struct vdpa_device *vdev, u16 idx)
>   {
> +	struct mlx5_vdpa_dev *mvdev = to_mvdev(vdev);
>   	struct vdpa_notification_area ret = {};
> +	struct mlx5_vdpa_net *ndev;
> +	phys_addr_t addr;
> +
> +	/* If SF BAR size is smaller than PAGE_SIZE, do not use direct
> +	 * notification to avoid the risk of mapping pages that contain BAR of more
> +	 * than one SF
> +	 */
> +	if (MLX5_CAP_GEN(mvdev->mdev, log_min_sf_size) + 12 < PAGE_SHIFT)
> +		return ret;
> +
> +	ndev = to_mlx5_vdpa_ndev(mvdev);
> +	addr = (phys_addr_t)ndev->mvdev.res.phys_kick_addr;
> +	if (addr & ~PAGE_MASK)
> +		return ret;


This has been checked by vhost-vDPA, and it's better to leave those 
policy checking to them driver instead of checking it in the parent.

Thanks


>   
> +	ret.addr = (phys_addr_t)ndev->mvdev.res.phys_kick_addr;
> +	ret.size = PAGE_SIZE;
>   	return ret;
>   }
>   

_______________________________________________
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization

  reply	other threads:[~2021-06-03  7:12 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-06-02  9:53 [PATCH v1] vdpa/mlx5: Add support for doorbell bypassing Eli Cohen
2021-06-03  7:11 ` Jason Wang [this message]
2021-06-03  7:11   ` Jason Wang
2021-06-03  7:38   ` Eli Cohen
2021-06-03  7:49     ` Jason Wang
2021-06-03  7:49       ` Jason Wang
2021-06-03  8:02       ` Eli Cohen

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=f99c6019-3b7a-8a91-27fc-7db70e9f1c1c@redhat.com \
    --to=jasowang@redhat.com \
    --cc=elic@nvidia.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mst@redhat.com \
    --cc=virtualization@lists.linux-foundation.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.