patches for DPDK stable branches
 help / color / mirror / Atom feed
From: Kevin Traynor <ktraynor@redhat.com>
To: Changpeng Liu <changpeng.liu@intel.com>
Cc: Chenbo Xia <chenbo.xia@intel.com>, dpdk stable <stable@dpdk.org>
Subject: patch 'vhost: add non-blocking API for posting interrupt' has been queued to stable release 21.11.3
Date: Fri, 11 Nov 2022 10:33:06 +0000	[thread overview]
Message-ID: <20221111103337.307408-16-ktraynor@redhat.com> (raw)
In-Reply-To: <20221111103337.307408-1-ktraynor@redhat.com>

Hi,

FYI, your patch has been queued to stable release 21.11.3

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 11/14/22. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the
patch applied to the branch. This will indicate if there was any rebasing
needed to apply to the stable branch. If there were code changes for rebasing
(ie: not only metadata diffs), please double check that the rebase was
correctly done.

Queued patches are on a temporary branch at:
https://github.com/kevintraynor/dpdk-stable

This queued commit can be viewed at:
https://github.com/kevintraynor/dpdk-stable/commit/a5ff9ebc8b9bb626f31cf9df83b1ae83cfd629dc

Thanks.

Kevin

---
From a5ff9ebc8b9bb626f31cf9df83b1ae83cfd629dc Mon Sep 17 00:00:00 2001
From: Changpeng Liu <changpeng.liu@intel.com>
Date: Mon, 17 Oct 2022 15:48:17 +0800
Subject: [PATCH] vhost: add non-blocking API for posting interrupt

[ upstream commit 830f7e790732b3a4b8830b181d399e317098d291 ]

Vhost-user library locks all VQ's access lock when processing
vring based messages, such as SET_VRING_KICK and SET_VRING_CALL,
and the data processing thread may already be started, e.g: SPDK
vhost-blk and vhost-scsi will start the data processing thread
when one vring is ready, then deadlock may happen when SPDK is
posting interrupts to VM.  Here, we add a new API which allows
caller to try again later for this case.

Bugzilla ID: 1015
Fixes: c5736998305d ("vhost: fix missing virtqueue lock protection")

Signed-off-by: Changpeng Liu <changpeng.liu@intel.com>
Reviewed-by: Chenbo Xia <chenbo.xia@intel.com>
---
 doc/guides/prog_guide/vhost_lib.rst |  6 ++++++
 lib/vhost/rte_vhost.h               | 15 +++++++++++++++
 lib/vhost/version.map               |  1 +
 lib/vhost/vhost.c                   | 30 +++++++++++++++++++++++++++++
 4 files changed, 52 insertions(+)

diff --git a/doc/guides/prog_guide/vhost_lib.rst b/doc/guides/prog_guide/vhost_lib.rst
index 8959568d8f..6ad1afa378 100644
--- a/doc/guides/prog_guide/vhost_lib.rst
+++ b/doc/guides/prog_guide/vhost_lib.rst
@@ -304,4 +304,10 @@ The following is an overview of some key Vhost API functions:
   path. Completed packets are returned to applications through ``pkts``.
 
+* ``rte_vhost_vring_call_nonblock(int vid, uint16_t vring_idx)``
+
+  Notify the guest that used descriptors have been added to the vring. This function
+  will return -EAGAIN when vq's access lock is held by other thread, user should try
+  again later.
+
 Vhost-user Implementations
 --------------------------
diff --git a/lib/vhost/rte_vhost.h b/lib/vhost/rte_vhost.h
index 2acb31df2d..1582617423 100644
--- a/lib/vhost/rte_vhost.h
+++ b/lib/vhost/rte_vhost.h
@@ -919,4 +919,19 @@ rte_vhost_clr_inflight_desc_packed(int vid, uint16_t vring_idx,
 int rte_vhost_vring_call(int vid, uint16_t vring_idx);
 
+/**
+ * Notify the guest that used descriptors have been added to the vring.  This
+ * function acts as a memory barrier.  This function will return -EAGAIN when
+ * vq's access lock is held by other thread, user should try again later.
+ *
+ * @param vid
+ *  vhost device ID
+ * @param vring_idx
+ *  vring index
+ * @return
+ *  0 on success, -1 on failure, -EAGAIN for another retry
+ */
+__rte_experimental
+int rte_vhost_vring_call_nonblock(int vid, uint16_t vring_idx);
+
 /**
  * Get vhost RX queue avail count.
diff --git a/lib/vhost/version.map b/lib/vhost/version.map
index 0f315ed2a5..2cd6ea8a29 100644
--- a/lib/vhost/version.map
+++ b/lib/vhost/version.map
@@ -85,4 +85,5 @@ EXPERIMENTAL {
 	# added in 21.11
 	rte_vhost_get_monitor_addr;
+	rte_vhost_vring_call_nonblock;
 };
 
diff --git a/lib/vhost/vhost.c b/lib/vhost/vhost.c
index 24f94495c6..86672fcc33 100644
--- a/lib/vhost/vhost.c
+++ b/lib/vhost/vhost.c
@@ -1312,4 +1312,34 @@ rte_vhost_vring_call(int vid, uint16_t vring_idx)
 }
 
+int
+rte_vhost_vring_call_nonblock(int vid, uint16_t vring_idx)
+{
+	struct virtio_net *dev;
+	struct vhost_virtqueue *vq;
+
+	dev = get_device(vid);
+	if (!dev)
+		return -1;
+
+	if (vring_idx >= VHOST_MAX_VRING)
+		return -1;
+
+	vq = dev->virtqueue[vring_idx];
+	if (!vq)
+		return -1;
+
+	if (!rte_spinlock_trylock(&vq->access_lock))
+		return -EAGAIN;
+
+	if (vq_is_packed(dev))
+		vhost_vring_call_packed(dev, vq);
+	else
+		vhost_vring_call_split(dev, vq);
+
+	rte_spinlock_unlock(&vq->access_lock);
+
+	return 0;
+}
+
 uint16_t
 rte_vhost_avail_entries(int vid, uint16_t queue_id)
-- 
2.38.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2022-11-11 10:32:17.471053637 +0000
+++ 0016-vhost-add-non-blocking-API-for-posting-interrupt.patch	2022-11-11 10:32:17.037300619 +0000
@@ -1 +1 @@
-From 830f7e790732b3a4b8830b181d399e317098d291 Mon Sep 17 00:00:00 2001
+From a5ff9ebc8b9bb626f31cf9df83b1ae83cfd629dc Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 830f7e790732b3a4b8830b181d399e317098d291 ]
+
@@ -16 +17,0 @@
-Cc: stable@dpdk.org
@@ -21,6 +22,5 @@
- doc/guides/prog_guide/vhost_lib.rst    |  6 ++++++
- doc/guides/rel_notes/release_22_11.rst |  6 ++++++
- lib/vhost/rte_vhost.h                  | 15 +++++++++++++
- lib/vhost/version.map                  |  1 +
- lib/vhost/vhost.c                      | 30 ++++++++++++++++++++++++++
- 5 files changed, 58 insertions(+)
+ doc/guides/prog_guide/vhost_lib.rst |  6 ++++++
+ lib/vhost/rte_vhost.h               | 15 +++++++++++++++
+ lib/vhost/version.map               |  1 +
+ lib/vhost/vhost.c                   | 30 +++++++++++++++++++++++++++++
+ 4 files changed, 52 insertions(+)
@@ -29 +29 @@
-index 0d9eca1f7d..e8bb8c9b7b 100644
+index 8959568d8f..6ad1afa378 100644
@@ -32 +32 @@
-@@ -298,4 +298,10 @@ The following is an overview of some key Vhost API functions:
+@@ -304,4 +304,10 @@ The following is an overview of some key Vhost API functions:
@@ -41,17 +41,2 @@
- * ``rte_vhost_vring_stats_get_names(int vid, uint16_t queue_id, struct rte_vhost_stat_name *names, unsigned int size)``
- 
-diff --git a/doc/guides/rel_notes/release_22_11.rst b/doc/guides/rel_notes/release_22_11.rst
-index c62acde891..6722832f3f 100644
---- a/doc/guides/rel_notes/release_22_11.rst
-+++ b/doc/guides/rel_notes/release_22_11.rst
-@@ -189,4 +189,10 @@ New Features
-   by the vhost library.
- 
-+* **Added non-blocking notify API to vhost library.**
-+
-+  Added ``rte_vhost_vring_call_nonblock`` API to notify the guest that
-+  used descriptors have been added to the vring in non-blocking way.
-+  User should check the return value of this API and try again if needed.
-+
- * **Added support for MACsec in rte_security.**
- 
+ Vhost-user Implementations
+ --------------------------
@@ -59 +44 @@
-index bb7d86a432..d22b25cd4e 100644
+index 2acb31df2d..1582617423 100644
@@ -62 +47 @@
-@@ -910,4 +910,19 @@ rte_vhost_clr_inflight_desc_packed(int vid, uint16_t vring_idx,
+@@ -919,4 +919,19 @@ rte_vhost_clr_inflight_desc_packed(int vid, uint16_t vring_idx,
@@ -83 +68 @@
-index 0b61870870..d64786fa71 100644
+index 0f315ed2a5..2cd6ea8a29 100644
@@ -86,3 +71,3 @@
-@@ -98,4 +98,5 @@ EXPERIMENTAL {
- 	# added in 22.11
- 	rte_vhost_async_dma_unconfigure;
+@@ -85,4 +85,5 @@ EXPERIMENTAL {
+ 	# added in 21.11
+ 	rte_vhost_get_monitor_addr;
@@ -93 +78 @@
-index 1bb01c2a2e..19c7b92c32 100644
+index 24f94495c6..86672fcc33 100644
@@ -96 +81 @@
-@@ -1319,4 +1319,34 @@ rte_vhost_vring_call(int vid, uint16_t vring_idx)
+@@ -1312,4 +1312,34 @@ rte_vhost_vring_call(int vid, uint16_t vring_idx)


  parent reply	other threads:[~2022-11-11 10:34 UTC|newest]

Thread overview: 49+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-11-11 10:32 patch 'event/sw: fix flow ID init in self test' " Kevin Traynor
2022-11-11 10:32 ` patch 'event/sw: fix log " Kevin Traynor
2022-11-11 10:32 ` patch 'eventdev/crypto: fix multi-process' " Kevin Traynor
2022-11-11 10:32 ` patch 'eventdev/eth_tx: fix queue delete' " Kevin Traynor
2022-11-11 10:32 ` patch 'gro: check payload length after trim' " Kevin Traynor
2022-11-11 10:32 ` patch 'doc: fix support table for Ethernet/VLAN flow items' " Kevin Traynor
2022-11-11 10:32 ` patch 'app/testpmd: skip port reset in secondary process' " Kevin Traynor
2022-11-11 10:32 ` patch 'net/bonding: fix descriptor limit reporting' " Kevin Traynor
2022-11-11 10:32 ` patch 'net/ionic: fix endianness for Rx and Tx' " Kevin Traynor
2022-11-11 10:33 ` patch 'net/ionic: fix endianness for RSS' " Kevin Traynor
2022-11-11 10:33 ` patch 'net/ionic: fix adapter name for logging' " Kevin Traynor
2022-11-11 10:33 ` patch 'net/ionic: fix Rx filter save' " Kevin Traynor
2022-11-11 10:33 ` patch 'net/ionic: fix reported error stats' " Kevin Traynor
2022-11-11 10:33 ` patch 'app/testpmd: remove jumbo offload' " Kevin Traynor
2022-11-11 10:33 ` patch 'net/nfp: fix internal buffer size and MTU check' " Kevin Traynor
2022-11-11 10:33 ` Kevin Traynor [this message]
2022-11-11 10:33 ` patch 'net/mlx5: fix thread workspace memory leak' " Kevin Traynor
2022-11-11 10:33 ` patch 'net/mlx5: fix RSS expansion buffer size' " Kevin Traynor
2022-11-11 10:33 ` patch 'net/mlx5: fix tunnel header with IPIP offload' " Kevin Traynor
2022-11-11 10:33 ` patch 'net/mlx5: fix null check in devargs parsing' " Kevin Traynor
2022-11-11 10:33 ` patch 'sched: fix subport profile configuration' " Kevin Traynor
2022-11-11 10:33 ` patch 'examples/qos_sched: fix number of subport profiles' " Kevin Traynor
2022-11-11 10:33 ` patch 'net/ixgbe: fix broadcast Rx on VF after promisc removal' " Kevin Traynor
2022-11-11 10:33 ` patch 'net/ixgbe: fix unexpected VLAN Rx in promisc mode on VF' " Kevin Traynor
2022-11-11 10:33 ` patch 'net/ice: fix null function pointer call' " Kevin Traynor
2022-11-11 10:33 ` patch 'net/iavf: fix IPsec flow create error check' " Kevin Traynor
2022-11-11 10:33 ` patch 'net/iavf: fix SPI " Kevin Traynor
2022-11-11 10:33 ` patch 'net/iavf: add thread for event callbacks' " Kevin Traynor
2022-11-18 12:32   ` Kevin Traynor
2022-11-21  4:48     ` Zhou, YidingX
2022-11-11 10:33 ` patch 'net/iavf: fix queue stop for large VF' " Kevin Traynor
2022-11-11 10:33 ` patch 'net/ice: support VXLAN-GPE tunnel offload' " Kevin Traynor
2022-11-11 10:33 ` patch 'net/iavf: fix handling of IPsec events' " Kevin Traynor
2022-11-11 10:33 ` patch 'net/cnxk: fix later skip to include mbuf private data' " Kevin Traynor
2022-11-11 10:33 ` patch 'common/cnxk: fix schedule weight update' " Kevin Traynor
2022-11-11 10:33 ` patch 'net/mlx5: fix thread termination check on Windows' " Kevin Traynor
2022-11-11 10:33 ` patch 'examples/l2fwd-crypto: fix typo in error message' " Kevin Traynor
2022-11-11 10:33 ` patch 'test/crypto: fix wireless auth digest segment' " Kevin Traynor
2022-11-11 10:33 ` patch 'baseband/acc100: fix memory leak' " Kevin Traynor
2022-11-11 10:33 ` patch 'baseband/acc100: check turbo dec/enc input' " Kevin Traynor
2022-11-11 10:33 ` patch 'baseband/acc100: add null checks' " Kevin Traynor
2022-11-11 10:33 ` patch 'baseband/acc100: fix input length for CRC24B' " Kevin Traynor
2022-11-11 10:33 ` patch 'baseband/acc100: fix clearing PF IR outside handler' " Kevin Traynor
2022-11-11 10:33 ` patch 'baseband/acc100: fix device minimum alignment' " Kevin Traynor
2022-11-11 10:33 ` patch 'baseband/acc100: fix close cleanup' " Kevin Traynor
2022-11-11 10:33 ` patch 'test/crypto: fix PDCP vectors' " Kevin Traynor
2022-11-11 10:33 ` patch 'examples/ipsec-secgw: fix Tx checksum offload flag' " Kevin Traynor
2022-11-11 10:33 ` patch 'crypto/qat: fix null hash algorithm digest size' " Kevin Traynor
2022-11-11 10:33 ` patch 'net/mlx5: fix build with recent compilers' " Kevin Traynor

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=20221111103337.307408-16-ktraynor@redhat.com \
    --to=ktraynor@redhat.com \
    --cc=changpeng.liu@intel.com \
    --cc=chenbo.xia@intel.com \
    --cc=stable@dpdk.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).