Spdk/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 trace: add traces around io_device name 2022-01-19 08:55:59 +00:00
blob blobstore: Use RB_TREE to do blob lookup 2021-12-31 09:21:35 +00:00
blobfs trace: move all trace definitions to a separate file 2021-10-20 07:22:00 +00:00
conf so_ver: increase all major versions 2021-02-05 14:43:47 +00:00
dma dma: Add infrstructure for push operation 2021-10-20 22:55:52 +00:00
env_dpdk Revert "build/dpdk: allow SPDK static builds on DPDK shared libs" 2022-01-26 18:15:27 +00:00
env_ocf spelling: lib 2021-12-03 08:12:55 +00:00
event app.c: respect all/0xffff argument 2022-01-19 08:56:27 +00:00
ftl spelling: lib 2021-12-03 08:12:55 +00:00
idxd idxd: zero out descriptor before use 2022-01-27 19:00:22 +00:00
init rpc: add method for listing PCI devices 2021-12-14 09:08:59 +00:00
ioat ioat: fix potential double free problem in ioat_channel_start() 2021-06-16 09:00:37 +00:00
iscsi spelling: lib 2021-12-03 08:12:55 +00:00
json json: add spdk_json_write_bytearray 2021-12-14 09:08:59 +00:00
jsonrpc spelling: lib 2021-12-03 08:12:55 +00:00
log lib/log: move some log level function to log.c 2022-01-06 16:05:53 +00:00
lvol spelling: lib 2021-12-03 08:12:55 +00:00
nbd spelling: lib 2021-12-03 08:12:55 +00:00
notify so_ver: increase all major versions 2021-02-05 14:43:47 +00:00
nvme nvme_rdma: Check only if Soft RoCE receive normal completion after disconnect 2022-01-26 08:09:15 +00:00
nvmf nvmf/vfio-user: add NVMe live migration support finally 2022-01-27 20:55:16 +00:00
rdma rdma: Set REMOTE_WRITE permission for iWARP on target side 2021-11-30 09:08:21 +00:00
reduce spelling: lib 2021-12-03 08:12:55 +00:00
rocksdb rocksdb: fix thread name typo 2021-09-03 08:08:20 +00:00
rpc so_ver: increase all major versions 2021-02-05 14:43:47 +00:00
scsi Lib/iSCSI: add the LUN Resize support 2022-01-20 07:56:23 +00:00
sock lib/sock: create common lookup for spdk_sock_group_impl 2021-11-24 08:34:41 +00:00
thread thread: remove io_device name from ioch tracepoints 2022-01-19 13:14:30 +00:00
trace trace_flags.c: modify errorlog text for duplicate tgroups 2022-01-14 11:01:15 +00:00
trace_parser spelling: lib 2021-12-03 08:12:55 +00:00
ut_mock so_ver: increase all major versions 2021-02-05 14:43:47 +00:00
util util: Add spdk_ioviter for iterating iovecs 2021-12-17 09:45:44 +00:00
vfio_user spelling: lib 2021-12-03 08:12:55 +00:00
vhost lib/vhost: use contructor to initalize g_dpdk_sem 2022-01-20 19:09:20 +00:00
virtio spelling: lib 2021-12-03 08:12:55 +00:00
vmd spelling: lib 2021-12-03 08:12:55 +00:00
Makefile lib/trace_parser: add trace_parser library stubs 2021-09-29 08:57:58 +00:00