All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Michael S. Tsirkin" <mst@redhat.com>
To: 王贇 <yun.wang@linux.alibaba.com>
Cc: open list <linux-kernel@vger.kernel.org>,
	"open list:VIRTIO CORE AND NET DRIVERS"
	<virtualization@lists.linux-foundation.org>
Subject: Re: [RFC PATCH] virtio: make sure legacy pci device gain 32bit-pfn vq
Date: Tue, 7 Dec 2021 03:13:50 -0500	[thread overview]
Message-ID: <20211207031217-mutt-send-email-mst@kernel.org> (raw)
In-Reply-To: <b50fff4d-9f05-76b3-eba7-91241c351751@linux.alibaba.com>

On Tue, Dec 07, 2021 at 03:51:45PM +0800, 王贇 wrote:
> We observed issues like:
>   virtio-pci 0000:14:00.0: platform bug: legacy virtio-mmio must
>   not be used with RAM above 0x4000GB
> 
> when we have a legacy pci device which desired 32bit-pfn vq
> but gain 64bit-pfn instead, lead into the failure of probe.
> 
> vring_use_dma_api() is playing the key role in here, to help the
> allocation process understand which kind of vq it should alloc,
> however, it failed to take care the legacy pci device, which only
> have 32bit feature flag and can never have VIRTIO_F_ACCESS_PLATFORM
> setted.
> 
> This patch introduce force_dma flag to help vring_use_dma_api()
> understanding the requirement better, to avoid the failing.
> 
> Signed-off-by: Michael Wang <yun.wang@linux.alibaba.com>

This will break configs where the device appears behind
a virtual iommu, so this won't fly.
Just make your device support 1.0, eh?

> ---
>  drivers/virtio/virtio_pci_legacy.c | 10 ++++++++++
>  drivers/virtio/virtio_ring.c       |  3 +++
>  include/linux/virtio.h             |  1 +
>  3 files changed, 14 insertions(+)
> 
> diff --git a/drivers/virtio/virtio_pci_legacy.c
> b/drivers/virtio/virtio_pci_legacy.c
> index d62e983..11f2ebf 100644
> --- a/drivers/virtio/virtio_pci_legacy.c
> +++ b/drivers/virtio/virtio_pci_legacy.c
> @@ -263,6 +263,16 @@ int virtio_pci_legacy_probe(struct virtio_pci_device
> *vp_dev)
>  	vp_dev->setup_vq = setup_vq;
>  	vp_dev->del_vq = del_vq;
> 
> +	/*
> +	 * The legacy pci device requre 32bit-pfn vq,
> +	 * or setup_vq() will failed.
> +	 *
> +	 * Thus we make sure vring_use_dma_api() will
> +	 * return true during the allocation by marking
> +	 * force_dma here.
> +	 */
> +	vp_dev->vdev.force_dma = true;
> +
>  	return 0;
> 
>  err_iomap:
> diff --git a/drivers/virtio/virtio_ring.c b/drivers/virtio/virtio_ring.c
> index 3035bb6..6562e01 100644
> --- a/drivers/virtio/virtio_ring.c
> +++ b/drivers/virtio/virtio_ring.c
> @@ -245,6 +245,9 @@ static inline bool virtqueue_use_indirect(struct
> virtqueue *_vq,
> 
>  static bool vring_use_dma_api(struct virtio_device *vdev)
>  {
> +	if (vdev->force_dma)
> +		return true;
> +
>  	if (!virtio_has_dma_quirk(vdev))
>  		return true;
> 
> diff --git a/include/linux/virtio.h b/include/linux/virtio.h
> index 41edbc0..a4eb29d 100644
> --- a/include/linux/virtio.h
> +++ b/include/linux/virtio.h
> @@ -109,6 +109,7 @@ struct virtio_device {
>  	bool failed;
>  	bool config_enabled;
>  	bool config_change_pending;
> +	bool force_dma;
>  	spinlock_t config_lock;
>  	spinlock_t vqs_list_lock; /* Protects VQs list access */
>  	struct device dev;
> -- 
> 1.8.3.1

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

WARNING: multiple messages have this Message-ID (diff)
From: "Michael S. Tsirkin" <mst@redhat.com>
To: 王贇 <yun.wang@linux.alibaba.com>
Cc: Jason Wang <jasowang@redhat.com>,
	"open list:VIRTIO CORE AND NET DRIVERS" 
	<virtualization@lists.linux-foundation.org>,
	open list <linux-kernel@vger.kernel.org>
Subject: Re: [RFC PATCH] virtio: make sure legacy pci device gain 32bit-pfn vq
Date: Tue, 7 Dec 2021 03:13:50 -0500	[thread overview]
Message-ID: <20211207031217-mutt-send-email-mst@kernel.org> (raw)
In-Reply-To: <b50fff4d-9f05-76b3-eba7-91241c351751@linux.alibaba.com>

On Tue, Dec 07, 2021 at 03:51:45PM +0800, 王贇 wrote:
> We observed issues like:
>   virtio-pci 0000:14:00.0: platform bug: legacy virtio-mmio must
>   not be used with RAM above 0x4000GB
> 
> when we have a legacy pci device which desired 32bit-pfn vq
> but gain 64bit-pfn instead, lead into the failure of probe.
> 
> vring_use_dma_api() is playing the key role in here, to help the
> allocation process understand which kind of vq it should alloc,
> however, it failed to take care the legacy pci device, which only
> have 32bit feature flag and can never have VIRTIO_F_ACCESS_PLATFORM
> setted.
> 
> This patch introduce force_dma flag to help vring_use_dma_api()
> understanding the requirement better, to avoid the failing.
> 
> Signed-off-by: Michael Wang <yun.wang@linux.alibaba.com>

This will break configs where the device appears behind
a virtual iommu, so this won't fly.
Just make your device support 1.0, eh?

> ---
>  drivers/virtio/virtio_pci_legacy.c | 10 ++++++++++
>  drivers/virtio/virtio_ring.c       |  3 +++
>  include/linux/virtio.h             |  1 +
>  3 files changed, 14 insertions(+)
> 
> diff --git a/drivers/virtio/virtio_pci_legacy.c
> b/drivers/virtio/virtio_pci_legacy.c
> index d62e983..11f2ebf 100644
> --- a/drivers/virtio/virtio_pci_legacy.c
> +++ b/drivers/virtio/virtio_pci_legacy.c
> @@ -263,6 +263,16 @@ int virtio_pci_legacy_probe(struct virtio_pci_device
> *vp_dev)
>  	vp_dev->setup_vq = setup_vq;
>  	vp_dev->del_vq = del_vq;
> 
> +	/*
> +	 * The legacy pci device requre 32bit-pfn vq,
> +	 * or setup_vq() will failed.
> +	 *
> +	 * Thus we make sure vring_use_dma_api() will
> +	 * return true during the allocation by marking
> +	 * force_dma here.
> +	 */
> +	vp_dev->vdev.force_dma = true;
> +
>  	return 0;
> 
>  err_iomap:
> diff --git a/drivers/virtio/virtio_ring.c b/drivers/virtio/virtio_ring.c
> index 3035bb6..6562e01 100644
> --- a/drivers/virtio/virtio_ring.c
> +++ b/drivers/virtio/virtio_ring.c
> @@ -245,6 +245,9 @@ static inline bool virtqueue_use_indirect(struct
> virtqueue *_vq,
> 
>  static bool vring_use_dma_api(struct virtio_device *vdev)
>  {
> +	if (vdev->force_dma)
> +		return true;
> +
>  	if (!virtio_has_dma_quirk(vdev))
>  		return true;
> 
> diff --git a/include/linux/virtio.h b/include/linux/virtio.h
> index 41edbc0..a4eb29d 100644
> --- a/include/linux/virtio.h
> +++ b/include/linux/virtio.h
> @@ -109,6 +109,7 @@ struct virtio_device {
>  	bool failed;
>  	bool config_enabled;
>  	bool config_change_pending;
> +	bool force_dma;
>  	spinlock_t config_lock;
>  	spinlock_t vqs_list_lock; /* Protects VQs list access */
>  	struct device dev;
> -- 
> 1.8.3.1


  reply	other threads:[~2021-12-07  8:14 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-12-07  7:51 [RFC PATCH] virtio: make sure legacy pci device gain 32bit-pfn vq 王贇
2021-12-07  8:13 ` Michael S. Tsirkin [this message]
2021-12-07  8:13   ` Michael S. Tsirkin
2021-12-07  9:09   ` 王贇
2021-12-07 10:44     ` Michael S. Tsirkin
2021-12-07 10:44       ` Michael S. Tsirkin
2021-12-08  7:23     ` Michael S. Tsirkin
2021-12-08  7:23       ` Michael S. Tsirkin
2021-12-08  8:04       ` 王贇
2021-12-08 11:08         ` Michael S. Tsirkin
2021-12-08 11:08           ` Michael S. Tsirkin
2021-12-09  3:21           ` 王贇
2021-12-09  6:40             ` Michael S. Tsirkin
2021-12-09  6:40               ` Michael S. Tsirkin
2021-12-09  8:26               ` 王贇
2021-12-09 17:50                 ` Michael S. Tsirkin
2021-12-09 17:50                   ` Michael S. Tsirkin
2021-12-09  0:19         ` Michael S. Tsirkin
2021-12-09  0:19           ` Michael S. Tsirkin
2021-12-09  3:00           ` 王贇
2021-12-09  6:50             ` Michael S. Tsirkin
2021-12-09  6:50               ` Michael S. Tsirkin

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=20211207031217-mutt-send-email-mst@kernel.org \
    --to=mst@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=virtualization@lists.linux-foundation.org \
    --cc=yun.wang@linux.alibaba.com \
    /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.