bpf.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "Michael S. Tsirkin" <mst@redhat.com>
To: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Cc: virtualization@lists.linux-foundation.org,
	Richard Weinberger <richard@nod.at>,
	Anton Ivanov <anton.ivanov@cambridgegreys.com>,
	Johannes Berg <johannes@sipsolutions.net>,
	Jason Wang <jasowang@redhat.com>,
	"David S. Miller" <davem@davemloft.net>,
	Eric Dumazet <edumazet@google.com>,
	Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
	Hans de Goede <hdegoede@redhat.com>,
	Mark Gross <markgross@kernel.org>,
	Vadim Pasternak <vadimp@nvidia.com>,
	Bjorn Andersson <bjorn.andersson@linaro.org>,
	Mathieu Poirier <mathieu.poirier@linaro.org>,
	Cornelia Huck <cohuck@redhat.com>,
	Halil Pasic <pasic@linux.ibm.com>,
	Eric Farman <farman@linux.ibm.com>,
	Heiko Carstens <hca@linux.ibm.com>,
	Vasily Gorbik <gor@linux.ibm.com>,
	Alexander Gordeev <agordeev@linux.ibm.com>,
	Christian Borntraeger <borntraeger@linux.ibm.com>,
	Sven Schnelle <svens@linux.ibm.com>,
	Alexei Starovoitov <ast@kernel.org>,
	Daniel Borkmann <daniel@iogearbox.net>,
	Jesper Dangaard Brouer <hawk@kernel.org>,
	John Fastabend <john.fastabend@gmail.com>,
	Vincent Whitchurch <vincent.whitchurch@axis.com>,
	linux-um@lists.infradead.org, netdev@vger.kernel.org,
	platform-driver-x86@vger.kernel.org,
	linux-remoteproc@vger.kernel.org, linux-s390@vger.kernel.org,
	kvm@vger.kernel.org, bpf@vger.kernel.org,
	kangjie.xu@linux.alibaba.com
Subject: Re: [PATCH v14 30/42] virtio_pci: introduce helper to get/set queue reset
Date: Thu, 21 Sep 2023 10:02:53 -0400	[thread overview]
Message-ID: <20230921100112-mutt-send-email-mst@kernel.org> (raw)
In-Reply-To: <20220801063902.129329-31-xuanzhuo@linux.alibaba.com>

On Mon, Aug 01, 2022 at 02:38:50PM +0800, Xuan Zhuo wrote:
> Introduce new helpers to implement queue reset and get queue reset
> status.
> 
>  https://github.com/oasis-tcs/virtio-spec/issues/124
>  https://github.com/oasis-tcs/virtio-spec/issues/139
> 
> Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
> Acked-by: Jason Wang <jasowang@redhat.com>
> ---
>  drivers/virtio/virtio_pci_modern_dev.c | 39 ++++++++++++++++++++++++++
>  include/linux/virtio_pci_modern.h      |  2 ++
>  2 files changed, 41 insertions(+)
> 
> diff --git a/drivers/virtio/virtio_pci_modern_dev.c b/drivers/virtio/virtio_pci_modern_dev.c
> index fa2a9445bb18..869cb46bef96 100644
> --- a/drivers/virtio/virtio_pci_modern_dev.c
> +++ b/drivers/virtio/virtio_pci_modern_dev.c
> @@ -3,6 +3,7 @@
>  #include <linux/virtio_pci_modern.h>
>  #include <linux/module.h>
>  #include <linux/pci.h>
> +#include <linux/delay.h>
>  
>  /*
>   * vp_modern_map_capability - map a part of virtio pci capability
> @@ -474,6 +475,44 @@ void vp_modern_set_status(struct virtio_pci_modern_device *mdev,
>  }
>  EXPORT_SYMBOL_GPL(vp_modern_set_status);
>  
> +/*
> + * vp_modern_get_queue_reset - get the queue reset status
> + * @mdev: the modern virtio-pci device
> + * @index: queue index
> + */
> +int vp_modern_get_queue_reset(struct virtio_pci_modern_device *mdev, u16 index)
> +{
> +	struct virtio_pci_modern_common_cfg __iomem *cfg;
> +
> +	cfg = (struct virtio_pci_modern_common_cfg __iomem *)mdev->common;
> +
> +	vp_iowrite16(index, &cfg->cfg.queue_select);
> +	return vp_ioread16(&cfg->queue_reset);
> +}
> +EXPORT_SYMBOL_GPL(vp_modern_get_queue_reset);
> +

Actually, this does not validate that the config structure is big
enough. So it can access some unrelated memory. Don't know whether
that's exploitable e.g. for CoCo but not nice, anyway.
Need to validate the size and disable reset if it's too small.


> +/*
> + * vp_modern_set_queue_reset - reset the queue
> + * @mdev: the modern virtio-pci device
> + * @index: queue index
> + */
> +void vp_modern_set_queue_reset(struct virtio_pci_modern_device *mdev, u16 index)
> +{
> +	struct virtio_pci_modern_common_cfg __iomem *cfg;
> +
> +	cfg = (struct virtio_pci_modern_common_cfg __iomem *)mdev->common;
> +
> +	vp_iowrite16(index, &cfg->cfg.queue_select);
> +	vp_iowrite16(1, &cfg->queue_reset);
> +
> +	while (vp_ioread16(&cfg->queue_reset))
> +		msleep(1);
> +
> +	while (vp_ioread16(&cfg->cfg.queue_enable))
> +		msleep(1);
> +}
> +EXPORT_SYMBOL_GPL(vp_modern_set_queue_reset);
> +
>  /*
>   * vp_modern_queue_vector - set the MSIX vector for a specific virtqueue
>   * @mdev: the modern virtio-pci device
> diff --git a/include/linux/virtio_pci_modern.h b/include/linux/virtio_pci_modern.h
> index 05123b9a606f..c4eeb79b0139 100644
> --- a/include/linux/virtio_pci_modern.h
> +++ b/include/linux/virtio_pci_modern.h
> @@ -113,4 +113,6 @@ void __iomem * vp_modern_map_vq_notify(struct virtio_pci_modern_device *mdev,
>  				       u16 index, resource_size_t *pa);
>  int vp_modern_probe(struct virtio_pci_modern_device *mdev);
>  void vp_modern_remove(struct virtio_pci_modern_device *mdev);
> +int vp_modern_get_queue_reset(struct virtio_pci_modern_device *mdev, u16 index);
> +void vp_modern_set_queue_reset(struct virtio_pci_modern_device *mdev, u16 index);
>  #endif
> -- 
> 2.31.0


  parent reply	other threads:[~2023-09-21 17:22 UTC|newest]

Thread overview: 53+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-08-01  6:38 [PATCH v14 00/42] virtio pci support VIRTIO_F_RING_RESET Xuan Zhuo
2022-08-01  6:38 ` [PATCH v14 01/42] virtio: record the maximum queue num supported by the device Xuan Zhuo
2022-08-01  6:38 ` [PATCH v14 02/42] virtio: struct virtio_config_ops add callbacks for queue_reset Xuan Zhuo
2022-08-01  6:38 ` [PATCH v14 03/42] virtio_ring: update the document of the virtqueue_detach_unused_buf for queue reset Xuan Zhuo
2022-08-01  6:38 ` [PATCH v14 04/42] virtio_ring: extract the logic of freeing vring Xuan Zhuo
2022-08-01  6:38 ` [PATCH v14 05/42] virtio_ring: split vring_virtqueue Xuan Zhuo
2022-08-01  6:38 ` [PATCH v14 06/42] virtio_ring: introduce virtqueue_init() Xuan Zhuo
2022-08-01  6:38 ` [PATCH v14 07/42] virtio_ring: split: stop __vring_new_virtqueue as export symbol Xuan Zhuo
2022-08-01  6:38 ` [PATCH v14 08/42] virtio_ring: split: __vring_new_virtqueue() accept struct vring_virtqueue_split Xuan Zhuo
2022-08-01  6:38 ` [PATCH v14 09/42] virtio_ring: split: introduce vring_free_split() Xuan Zhuo
2022-08-01  6:38 ` [PATCH v14 10/42] virtio_ring: split: extract the logic of alloc queue Xuan Zhuo
2022-08-01  6:38 ` [PATCH v14 11/42] virtio_ring: split: extract the logic of alloc state and extra Xuan Zhuo
2022-08-01  6:38 ` [PATCH v14 12/42] virtio_ring: split: extract the logic of vring init Xuan Zhuo
2022-08-01  6:38 ` [PATCH v14 13/42] virtio_ring: split: extract the logic of attach vring Xuan Zhuo
2022-08-01  6:38 ` [PATCH v14 14/42] virtio_ring: split: introduce virtqueue_reinit_split() Xuan Zhuo
2022-08-01  6:38 ` [PATCH v14 15/42] virtio_ring: split: reserve vring_align, may_reduce_num Xuan Zhuo
2022-08-01  6:38 ` [PATCH v14 16/42] virtio_ring: split: introduce virtqueue_resize_split() Xuan Zhuo
2022-08-01  6:38 ` [PATCH v14 17/42] virtio_ring: packed: introduce vring_free_packed Xuan Zhuo
2022-08-01  6:38 ` [PATCH v14 18/42] virtio_ring: packed: extract the logic of alloc queue Xuan Zhuo
2022-08-01  6:38 ` [PATCH v14 19/42] virtio_ring: packed: extract the logic of alloc state and extra Xuan Zhuo
2022-08-01  6:38 ` [PATCH v14 20/42] virtio_ring: packed: extract the logic of vring init Xuan Zhuo
2022-08-01  6:38 ` [PATCH v14 21/42] virtio_ring: packed: extract the logic of attach vring Xuan Zhuo
2022-08-01  6:38 ` [PATCH v14 22/42] virtio_ring: packed: introduce virtqueue_reinit_packed() Xuan Zhuo
2022-08-01  6:38 ` [PATCH v14 23/42] virtio_ring: packed: introduce virtqueue_resize_packed() Xuan Zhuo
2022-08-01  6:38 ` [PATCH v14 24/42] virtio_ring: introduce virtqueue_resize() Xuan Zhuo
2022-08-01  6:38 ` [PATCH v14 25/42] virtio_pci: struct virtio_pci_common_cfg add queue_notify_data Xuan Zhuo
2022-08-01  6:38 ` [PATCH v14 26/42] virtio: allow to unbreak/break virtqueue individually Xuan Zhuo
2022-08-01  6:38 ` [PATCH v14 27/42] virtio: queue_reset: add VIRTIO_F_RING_RESET Xuan Zhuo
2022-08-01  6:38 ` [PATCH v14 28/42] virtio_ring: struct virtqueue introduce reset Xuan Zhuo
2022-08-01  6:38 ` [PATCH v14 29/42] virtio_pci: struct virtio_pci_common_cfg add queue_reset Xuan Zhuo
2022-08-01  6:38 ` [PATCH v14 30/42] virtio_pci: introduce helper to get/set queue reset Xuan Zhuo
2022-08-15  6:07   ` Michael S. Tsirkin
2023-09-21 14:02   ` Michael S. Tsirkin [this message]
2023-09-22  1:49     ` Xuan Zhuo
2023-09-22 10:46       ` Michael S. Tsirkin
2023-09-25  2:02         ` Xuan Zhuo
2022-08-01  6:38 ` [PATCH v14 31/42] virtio_pci: extract the logic of active vq for modern pci Xuan Zhuo
2022-08-01  6:38 ` [PATCH v14 32/42] virtio_pci: support VIRTIO_F_RING_RESET Xuan Zhuo
2022-08-01  6:38 ` [PATCH v14 33/42] virtio: find_vqs() add arg sizes Xuan Zhuo
2022-08-01  6:38 ` [PATCH v14 34/42] virtio_pci: support the arg sizes of find_vqs() Xuan Zhuo
2022-08-01  6:38 ` [PATCH v14 35/42] virtio_mmio: " Xuan Zhuo
2022-08-01  6:38 ` [PATCH v14 36/42] virtio: add helper virtio_find_vqs_ctx_size() Xuan Zhuo
2022-08-01  6:38 ` [PATCH v14 37/42] virtio_net: set the default max ring size by find_vqs() Xuan Zhuo
2022-08-15  6:00   ` Michael S. Tsirkin
2022-08-15  6:35     ` Xuan Zhuo
2022-08-15  7:14       ` Michael S. Tsirkin
2022-08-15  7:28         ` Xuan Zhuo
2022-08-15  7:39           ` Michael S. Tsirkin
2022-08-01  6:38 ` [PATCH v14 38/42] virtio_net: get ringparam by virtqueue_get_vring_max_size() Xuan Zhuo
2022-08-01  6:38 ` [PATCH v14 39/42] virtio_net: split free_unused_bufs() Xuan Zhuo
2022-08-01  6:39 ` [PATCH v14 40/42] virtio_net: support rx queue resize Xuan Zhuo
2022-08-01  6:39 ` [PATCH v14 41/42] virtio_net: support tx " Xuan Zhuo
2022-08-01  6:39 ` [PATCH v14 42/42] virtio_net: support set_ringparam Xuan Zhuo

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=20230921100112-mutt-send-email-mst@kernel.org \
    --to=mst@redhat.com \
    --cc=agordeev@linux.ibm.com \
    --cc=anton.ivanov@cambridgegreys.com \
    --cc=ast@kernel.org \
    --cc=bjorn.andersson@linaro.org \
    --cc=borntraeger@linux.ibm.com \
    --cc=bpf@vger.kernel.org \
    --cc=cohuck@redhat.com \
    --cc=daniel@iogearbox.net \
    --cc=davem@davemloft.net \
    --cc=edumazet@google.com \
    --cc=farman@linux.ibm.com \
    --cc=gor@linux.ibm.com \
    --cc=hawk@kernel.org \
    --cc=hca@linux.ibm.com \
    --cc=hdegoede@redhat.com \
    --cc=jasowang@redhat.com \
    --cc=johannes@sipsolutions.net \
    --cc=john.fastabend@gmail.com \
    --cc=kangjie.xu@linux.alibaba.com \
    --cc=kuba@kernel.org \
    --cc=kvm@vger.kernel.org \
    --cc=linux-remoteproc@vger.kernel.org \
    --cc=linux-s390@vger.kernel.org \
    --cc=linux-um@lists.infradead.org \
    --cc=markgross@kernel.org \
    --cc=mathieu.poirier@linaro.org \
    --cc=netdev@vger.kernel.org \
    --cc=pabeni@redhat.com \
    --cc=pasic@linux.ibm.com \
    --cc=platform-driver-x86@vger.kernel.org \
    --cc=richard@nod.at \
    --cc=svens@linux.ibm.com \
    --cc=vadimp@nvidia.com \
    --cc=vincent.whitchurch@axis.com \
    --cc=virtualization@lists.linux-foundation.org \
    --cc=xuanzhuo@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).