Spdk/test/unit/lib
Changpeng Liu d1c2027d01 nvmf/vfio-user: add NVMe live migration support finally
VFIO in QEMU uses region 9 as the PCI passthrough devices' migration channel.

The format of the region 9 migration region is as follows:
 ------------------------------------------------------------------
|vfio_device_migration_info|    data section                      |
 ------------------------------------------------------------------
QEMU will access vfio_device_migration_info to controll the migration
process.

For SPDK vfio-user target, we also implement the BAR9 via libvfio-user,
and we also define the NVMe device specific migration data stored in
data section of BAR9.  QEMU doesn't care about the format in data section,
it will help us to gather the NVMe specific migration data in source VM and
then restore the migration date to data section of BAR9 in destination VM.

The core idea to implement live migration will following the device state
change which is controlled by QEMU.  First QEMU will try to STOP the device
in the source VM, and set the destination VM to RESUME state, SPDK will save
NVMe devic state data structure to BAR9 in the source VM once the subsystem
is paused, then QEMU will read BAR9 in source VM and restore the content of
BAR9 in destination VM, finally in the destination VM, we will restore the
NVMe device state include BARs/PCI CFG/queue pairs in the destination VM.

Change-Id: I42e38f28c3ff59831be63290038b50d199d06658
Signed-off-by: Changpeng Liu <changpeng.liu@intel.com>
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/7617
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Community-CI: Broadcom CI <spdk-ci.pdl@broadcom.com>
Community-CI: Mellanox Build Bot
Reviewed-by: Thanos Makatos <thanos.makatos@nutanix.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Reviewed-by: Ben Walker <benjamin.walker@intel.com>
2022-01-27 20:55:16 +00:00
..
accel accel: Use vectored crc32 operations instead of chaining 2022-01-12 08:20:39 +00:00
bdev bdev/nvme: Fix namespace comparison 2022-01-27 18:53:41 +00:00
blob lib/blob: do not assume realloc(NULL, 0) returns a not-NULL value 2021-12-20 18:14:06 +00:00
blobfs test: optimize unit test .gitignore files 2021-08-20 07:29:57 +00:00
dma dma: Update memory domain context structure 2021-10-20 22:55:52 +00:00
env_dpdk test: optimize unit test .gitignore files 2021-08-20 07:29:57 +00:00
event scheduler/dynamic: don't adjust tsc too much for very busy cores 2021-09-28 07:29:03 +00:00
ftl spelling: test 2021-12-03 08:13:22 +00:00
idxd idxd: fix issue w/multiple WQ config 2022-01-20 21:39:56 +00:00
init spelling: test 2021-12-03 08:13:22 +00:00
ioat test: optimize unit test .gitignore files 2021-08-20 07:29:57 +00:00
iscsi spelling: test 2021-12-03 08:13:22 +00:00
json spelling: test 2021-12-03 08:13:22 +00:00
jsonrpc spelling: test 2021-12-03 08:13:22 +00:00
log test: optimize unit test .gitignore files 2021-08-20 07:29:57 +00:00
lvol test: optimize unit test .gitignore files 2021-08-20 07:29:57 +00:00
notify test: optimize unit test .gitignore files 2021-08-20 07:29:57 +00:00
nvme ut/nvme_ctrlr: initialize mutex for portability 2022-01-27 08:15:26 +00:00
nvmf nvmf/vfio-user: add NVMe live migration support finally 2022-01-27 20:55:16 +00:00
reduce spelling: test 2021-12-03 08:13:22 +00:00
rpc ut/rpc: wrap syscalls using spdk.mock.unittest.mk 2021-09-27 20:59:37 +00:00
scsi Lib/iSCSI: add the LUN Resize support 2022-01-20 07:56:23 +00:00
sock spelling: test 2021-12-03 08:13:22 +00:00
thread spelling: test 2021-12-03 08:13:22 +00:00
util spelling: test 2021-12-03 08:13:22 +00:00
vhost lib/vhost: move dev_dirname to rte_vhost_user 2022-01-20 19:09:20 +00:00
json_mock.c ut/json_mock: Add spdk_json_write_string_fmt() 2021-02-09 11:29:53 +00:00
Makefile unittest/rpc: add rpc unittest 2021-09-06 09:55:33 +00:00