From: Chaoyong He <chaoyong.he@corigine.com>
To: dev@dpdk.org
Cc: oss-drivers@corigine.com, Xinying Yu <xinying.yu@corigine.com>,
Chaoyong He <chaoyong.he@corigine.com>,
Long Wu <long.wu@corigine.com>,
Peng Zhang <peng.zhang@corigine.com>
Subject: [PATCH v3 05/11] vdpa/nfp: add the live migration logic
Date: Mon, 17 Jun 2024 14:27:02 +0800 [thread overview]
Message-ID: <20240617062708.2932037-6-chaoyong.he@corigine.com> (raw)
In-Reply-To: <20240617062708.2932037-1-chaoyong.he@corigine.com>
From: Xinying Yu <xinying.yu@corigine.com>
Add the basic logic of software live migration.
Unset the ring notify area to stop the direct IO datapath if the
device support, then we can setup the vring relay to help the
live migration.
Signed-off-by: Xinying Yu <xinying.yu@corigine.com>
Reviewed-by: Chaoyong He <chaoyong.he@corigine.com>
Reviewed-by: Long Wu <long.wu@corigine.com>
Reviewed-by: Peng Zhang <peng.zhang@corigine.com>
---
drivers/vdpa/nfp/nfp_vdpa.c | 66 +++++++++++++++++++++++++++++++-
drivers/vdpa/nfp/nfp_vdpa_core.c | 2 +
drivers/vdpa/nfp/nfp_vdpa_core.h | 4 ++
3 files changed, 70 insertions(+), 2 deletions(-)
diff --git a/drivers/vdpa/nfp/nfp_vdpa.c b/drivers/vdpa/nfp/nfp_vdpa.c
index cef80b5476..45092cb0af 100644
--- a/drivers/vdpa/nfp/nfp_vdpa.c
+++ b/drivers/vdpa/nfp/nfp_vdpa.c
@@ -603,6 +603,30 @@ update_datapath(struct nfp_vdpa_dev *device)
return ret;
}
+static int
+nfp_vdpa_sw_fallback(struct nfp_vdpa_dev *device)
+{
+ int ret;
+ int vid = device->vid;
+
+ /* Stop the direct IO data path */
+ nfp_vdpa_unset_notify_relay(device);
+ nfp_vdpa_disable_vfio_intr(device);
+
+ ret = rte_vhost_host_notifier_ctrl(vid, RTE_VHOST_QUEUE_ALL, false);
+ if ((ret != 0) && (ret != -ENOTSUP)) {
+ DRV_VDPA_LOG(ERR, "Unset the host notifier failed.");
+ goto error;
+ }
+
+ device->hw.sw_fallback_running = true;
+
+ return 0;
+
+error:
+ return ret;
+}
+
static int
nfp_vdpa_dev_config(int vid)
{
@@ -646,8 +670,18 @@ nfp_vdpa_dev_close(int vid)
}
device = node->device;
- rte_atomic_store_explicit(&device->dev_attached, 0, rte_memory_order_relaxed);
- update_datapath(device);
+ if (device->hw.sw_fallback_running) {
+ device->hw.sw_fallback_running = false;
+
+ rte_atomic_store_explicit(&device->dev_attached, 0,
+ rte_memory_order_relaxed);
+ rte_atomic_store_explicit(&device->running, 0,
+ rte_memory_order_relaxed);
+ } else {
+ rte_atomic_store_explicit(&device->dev_attached, 0,
+ rte_memory_order_relaxed);
+ update_datapath(device);
+ }
return 0;
}
@@ -770,7 +804,35 @@ nfp_vdpa_get_protocol_features(struct rte_vdpa_device *vdev __rte_unused,
static int
nfp_vdpa_set_features(int32_t vid)
{
+ int ret;
+ uint64_t features = 0;
+ struct nfp_vdpa_dev *device;
+ struct rte_vdpa_device *vdev;
+ struct nfp_vdpa_dev_node *node;
+
DRV_VDPA_LOG(DEBUG, "Start vid=%d", vid);
+
+ vdev = rte_vhost_get_vdpa_device(vid);
+ node = nfp_vdpa_find_node_by_vdev(vdev);
+ if (node == NULL) {
+ DRV_VDPA_LOG(ERR, "Invalid vDPA device: %p", vdev);
+ return -ENODEV;
+ }
+
+ rte_vhost_get_negotiated_features(vid, &features);
+
+ if (RTE_VHOST_NEED_LOG(features) == 0)
+ return 0;
+
+ device = node->device;
+ if (device->hw.sw_lm) {
+ ret = nfp_vdpa_sw_fallback(device);
+ if (ret != 0) {
+ DRV_VDPA_LOG(ERR, "Software fallback start failed");
+ return -1;
+ }
+ }
+
return 0;
}
diff --git a/drivers/vdpa/nfp/nfp_vdpa_core.c b/drivers/vdpa/nfp/nfp_vdpa_core.c
index 79ecd2b4fc..50eda4cb2c 100644
--- a/drivers/vdpa/nfp/nfp_vdpa_core.c
+++ b/drivers/vdpa/nfp/nfp_vdpa_core.c
@@ -91,6 +91,8 @@ nfp_vdpa_hw_init(struct nfp_vdpa_hw *vdpa_hw,
tx_bar = (uint8_t *)pci_dev->mem_resource[2].addr + tx_bar_off;
hw->qcp_cfg = tx_bar + NFP_QCP_QUEUE_ADDR_SZ;
+ vdpa_hw->sw_lm = true;
+
vdpa_hw->features = (1ULL << VIRTIO_F_VERSION_1) |
(1ULL << VIRTIO_F_IN_ORDER) |
(1ULL << VHOST_USER_F_PROTOCOL_FEATURES);
diff --git a/drivers/vdpa/nfp/nfp_vdpa_core.h b/drivers/vdpa/nfp/nfp_vdpa_core.h
index a8e0d6dd70..0f880fc0c6 100644
--- a/drivers/vdpa/nfp/nfp_vdpa_core.h
+++ b/drivers/vdpa/nfp/nfp_vdpa_core.h
@@ -36,6 +36,10 @@ struct nfp_vdpa_hw {
uint8_t mac_addr[RTE_ETHER_ADDR_LEN];
uint8_t notify_region;
uint8_t nr_vring;
+
+ /** Software Live Migration */
+ bool sw_lm;
+ bool sw_fallback_running;
};
int nfp_vdpa_hw_init(struct nfp_vdpa_hw *vdpa_hw, struct rte_pci_device *dev);
--
2.39.1
next prev parent reply other threads:[~2024-06-17 6:28 UTC|newest]
Thread overview: 76+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-04-26 7:48 [PATCH 00/10] support software live migration Chaoyong He
2024-04-26 7:48 ` [PATCH 01/10] mailmap: add new contributor Chaoyong He
2024-04-26 7:48 ` [PATCH 02/10] vdpa/nfp: fix logic in hardware init Chaoyong He
2024-06-13 11:41 ` Maxime Coquelin
2024-04-26 7:48 ` [PATCH 03/10] vdpa/nfp: fix the logic of reconfiguration Chaoyong He
2024-06-13 11:43 ` Maxime Coquelin
2024-06-14 2:30 ` Chaoyong He
2024-04-26 7:48 ` [PATCH 04/10] vdpa/nfp: refactor the logic of datapath update Chaoyong He
2024-06-13 11:45 ` Maxime Coquelin
2024-04-26 7:48 ` [PATCH 05/10] vdpa/nfp: add the live migration logic Chaoyong He
2024-06-13 11:49 ` Maxime Coquelin
2024-06-14 2:32 ` Chaoyong He
2024-04-26 7:48 ` [PATCH 06/10] vdpa/nfp: add the interrupt logic of vring relay Chaoyong He
2024-06-13 11:52 ` Maxime Coquelin
2024-04-26 7:48 ` [PATCH 07/10] vdpa/nfp: setup the VF configure Chaoyong He
2024-06-13 11:58 ` Maxime Coquelin
2024-06-14 2:33 ` Chaoyong He
2024-04-26 7:48 ` [PATCH 08/10] vdpa/nfp: recover the ring index on new host Chaoyong He
2024-06-13 12:00 ` Maxime Coquelin
2024-06-14 6:40 ` Chaoyong He
2024-04-26 7:48 ` [PATCH 09/10] vdpa/nfp: setup vring relay thread Chaoyong He
2024-06-13 12:03 ` Maxime Coquelin
2024-04-26 7:48 ` [PATCH 10/10] doc: update nfp document Chaoyong He
2024-04-26 21:31 ` Patrick Robb
2024-06-13 12:03 ` Maxime Coquelin
2024-05-30 8:51 ` [PATCH 00/10] support software live migration Chaoyong He
2024-06-14 7:01 ` [PATCH v2 00/11] " Chaoyong He
2024-06-14 7:01 ` [PATCH v2 01/11] mailmap: add new contributor Chaoyong He
2024-06-14 7:01 ` [PATCH v2 02/11] vdpa/nfp: fix logic in hardware init Chaoyong He
2024-06-14 7:01 ` [PATCH v2 03/11] vdpa/nfp: fix the logic of reconfiguration Chaoyong He
2024-06-14 7:01 ` [PATCH v2 04/11] vdpa/nfp: refactor the logic of datapath update Chaoyong He
2024-06-14 7:01 ` [PATCH v2 05/11] vdpa/nfp: add the live migration logic Chaoyong He
2024-06-14 7:01 ` [PATCH v2 06/11] vdpa/nfp: add the interrupt logic of vring relay Chaoyong He
2024-06-14 7:01 ` [PATCH v2 07/11] vdpa/nfp: setup the VF configure Chaoyong He
2024-06-14 7:01 ` [PATCH v2 08/11] vdpa/nfp: recover the ring index on new host Chaoyong He
2024-06-14 7:01 ` [PATCH v2 09/11] vdpa/nfp: setup vring relay thread Chaoyong He
2024-06-14 7:01 ` [PATCH v2 10/11] vdpa/nfp: enable feature bits of live migration Chaoyong He
2024-06-14 7:01 ` [PATCH v2 11/11] doc: update nfp document Chaoyong He
2024-06-17 6:26 ` [PATCH v3 00/11] support software live migration Chaoyong He
2024-06-17 6:26 ` [PATCH v3 01/11] mailmap: add new contributor Chaoyong He
2024-06-18 7:43 ` Maxime Coquelin
2024-06-17 6:26 ` [PATCH v3 02/11] vdpa/nfp: fix logic in hardware init Chaoyong He
2024-06-18 7:50 ` Maxime Coquelin
2024-06-17 6:27 ` [PATCH v3 03/11] vdpa/nfp: fix the logic of reconfiguration Chaoyong He
2024-06-18 7:51 ` Maxime Coquelin
2024-06-17 6:27 ` [PATCH v3 04/11] vdpa/nfp: refactor the logic of datapath update Chaoyong He
2024-06-18 8:12 ` Maxime Coquelin
2024-06-17 6:27 ` Chaoyong He [this message]
2024-06-18 8:12 ` [PATCH v3 05/11] vdpa/nfp: add the live migration logic Maxime Coquelin
2024-06-17 6:27 ` [PATCH v3 06/11] vdpa/nfp: add the interrupt logic of vring relay Chaoyong He
2024-06-18 8:14 ` Maxime Coquelin
2024-06-17 6:27 ` [PATCH v3 07/11] vdpa/nfp: setup the VF configure Chaoyong He
2024-06-18 8:19 ` Maxime Coquelin
2024-06-17 6:27 ` [PATCH v3 08/11] vdpa/nfp: recover the ring index on new host Chaoyong He
2024-06-18 8:20 ` Maxime Coquelin
2024-06-17 6:27 ` [PATCH v3 09/11] vdpa/nfp: setup vring relay thread Chaoyong He
2024-06-18 8:25 ` Maxime Coquelin
2024-06-17 6:27 ` [PATCH v3 10/11] vdpa/nfp: enable feature bits of live migration Chaoyong He
2024-06-18 8:25 ` Maxime Coquelin
2024-06-17 6:27 ` [PATCH v3 11/11] doc: update nfp document Chaoyong He
2024-06-18 8:25 ` Maxime Coquelin
2024-06-18 7:45 ` [PATCH v3 00/11] support software live migration Maxime Coquelin
2024-06-18 7:48 ` Chaoyong He
2024-08-05 2:12 ` [PATCH v4 " Chaoyong He
2024-08-05 2:12 ` [PATCH v4 01/11] mailmap: add new contributor Chaoyong He
2024-08-05 2:12 ` [PATCH v4 02/11] vdpa/nfp: fix logic in hardware init Chaoyong He
2024-08-05 2:12 ` [PATCH v4 03/11] vdpa/nfp: fix the logic of reconfiguration Chaoyong He
2024-08-05 2:12 ` [PATCH v4 04/11] vdpa/nfp: refactor the logic of datapath update Chaoyong He
2024-08-05 2:12 ` [PATCH v4 05/11] vdpa/nfp: add the live migration logic Chaoyong He
2024-08-05 2:12 ` [PATCH v4 06/11] vdpa/nfp: add the interrupt logic of vring relay Chaoyong He
2024-08-05 2:12 ` [PATCH v4 07/11] vdpa/nfp: setup the VF configure Chaoyong He
2024-08-05 2:12 ` [PATCH v4 08/11] vdpa/nfp: recover the ring index on new host Chaoyong He
2024-08-05 2:12 ` [PATCH v4 09/11] vdpa/nfp: setup vring relay thread Chaoyong He
2024-08-05 2:12 ` [PATCH v4 10/11] vdpa/nfp: enable feature bits of live migration Chaoyong He
2024-08-05 2:12 ` [PATCH v4 11/11] doc: update nfp document Chaoyong He
2024-09-19 12:05 ` [PATCH v4 00/11] support software live migration Maxime Coquelin
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=20240617062708.2932037-6-chaoyong.he@corigine.com \
--to=chaoyong.he@corigine.com \
--cc=dev@dpdk.org \
--cc=long.wu@corigine.com \
--cc=oss-drivers@corigine.com \
--cc=peng.zhang@corigine.com \
--cc=xinying.yu@corigine.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).