platform-driver-x86.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
To: virtualization@lists.linux-foundation.org
Cc: Richard Weinberger <richard@nod.at>,
	Anton Ivanov <anton.ivanov@cambridgegreys.com>,
	Johannes Berg <johannes@sipsolutions.net>,
	"Michael S. Tsirkin" <mst@redhat.com>,
	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>,
	Xuan Zhuo <xuanzhuo@linux.alibaba.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: [PATCH v14 23/42] virtio_ring: packed: introduce virtqueue_resize_packed()
Date: Mon,  1 Aug 2022 14:38:43 +0800	[thread overview]
Message-ID: <20220801063902.129329-24-xuanzhuo@linux.alibaba.com> (raw)
In-Reply-To: <20220801063902.129329-1-xuanzhuo@linux.alibaba.com>

virtio ring packed supports resize.

Only after the new vring is successfully allocated based on the new num,
we will release the old vring. In any case, an error is returned,
indicating that the vring still points to the old vring.

In the case of an error, re-initialize(by virtqueue_reinit_packed()) the
virtqueue to ensure that the vring can be used.

Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Acked-by: Jason Wang <jasowang@redhat.com>
---
 drivers/virtio/virtio_ring.c | 30 ++++++++++++++++++++++++++++++
 1 file changed, 30 insertions(+)

diff --git a/drivers/virtio/virtio_ring.c b/drivers/virtio/virtio_ring.c
index db06fb0ddfd6..bea5a3448217 100644
--- a/drivers/virtio/virtio_ring.c
+++ b/drivers/virtio/virtio_ring.c
@@ -2036,6 +2036,36 @@ static struct virtqueue *vring_create_virtqueue_packed(
 	return NULL;
 }
 
+static int virtqueue_resize_packed(struct virtqueue *_vq, u32 num)
+{
+	struct vring_virtqueue_packed vring_packed = {};
+	struct vring_virtqueue *vq = to_vvq(_vq);
+	struct virtio_device *vdev = _vq->vdev;
+	int err;
+
+	if (vring_alloc_queue_packed(&vring_packed, vdev, num))
+		goto err_ring;
+
+	err = vring_alloc_state_extra_packed(&vring_packed);
+	if (err)
+		goto err_state_extra;
+
+	vring_free(&vq->vq);
+
+	virtqueue_vring_init_packed(&vring_packed, !!vq->vq.callback);
+
+	virtqueue_init(vq, vring_packed.vring.num);
+	virtqueue_vring_attach_packed(vq, &vring_packed);
+
+	return 0;
+
+err_state_extra:
+	vring_free_packed(&vring_packed, vdev);
+err_ring:
+	virtqueue_reinit_packed(vq);
+	return -ENOMEM;
+}
+
 
 /*
  * Generic functions and exported symbols.
-- 
2.31.0


  parent reply	other threads:[~2022-08-01  6:41 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 ` Xuan Zhuo [this message]
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
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=20220801063902.129329-24-xuanzhuo@linux.alibaba.com \
    --to=xuanzhuo@linux.alibaba.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=mst@redhat.com \
    --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 \
    /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).