mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-07-25 19:33:54 -06:00
migration: vfio cpr state hook
Define a list of vfio devices in CPR state, in a subsection so that older QEMU can be live updated to this version. However, new QEMU will not be live updateable to old QEMU. This is acceptable because CPR is not yet commonly used, and updates to older versions are unusual. The contents of each device object will be defined by the vfio subsystem in a subsequent patch. Signed-off-by: Steve Sistare <steven.sistare@oracle.com> Reviewed-by: Zhenzhong Duan <zhenzhong.duan@intel.com> Link: https://lore.kernel.org/qemu-devel/1751493538-202042-14-git-send-email-steven.sistare@oracle.com Signed-off-by: Cédric Le Goater <clg@redhat.com>
This commit is contained in:
parent
06c6a65852
commit
a6f2f9c42f
6 changed files with 40 additions and 9 deletions
|
@ -14,6 +14,8 @@
|
|||
#include "system/iommufd.h"
|
||||
#include "vfio-iommufd.h"
|
||||
|
||||
const VMStateDescription vmstate_cpr_vfio_devices; /* TBD in a later patch */
|
||||
|
||||
static bool vfio_cpr_supported(IOMMUFDBackend *be, Error **errp)
|
||||
{
|
||||
if (!iommufd_change_process_capable(be)) {
|
||||
|
|
18
hw/vfio/iommufd-stubs.c
Normal file
18
hw/vfio/iommufd-stubs.c
Normal file
|
@ -0,0 +1,18 @@
|
|||
/*
|
||||
* Copyright (c) 2025 Oracle and/or its affiliates.
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0-or-later
|
||||
*/
|
||||
|
||||
#include "qemu/osdep.h"
|
||||
#include "migration/cpr.h"
|
||||
#include "migration/vmstate.h"
|
||||
|
||||
const VMStateDescription vmstate_cpr_vfio_devices = {
|
||||
.name = CPR_STATE "/vfio devices",
|
||||
.version_id = 1,
|
||||
.minimum_version_id = 1,
|
||||
.fields = (const VMStateField[]){
|
||||
VMSTATE_END_OF_LIST()
|
||||
}
|
||||
};
|
|
@ -33,6 +33,7 @@ system_ss.add(when: ['CONFIG_VFIO', 'CONFIG_IOMMUFD'], if_true: files(
|
|||
'iommufd.c',
|
||||
'cpr-iommufd.c',
|
||||
))
|
||||
system_ss.add(when: 'CONFIG_IOMMUFD', if_false: files('iommufd-stubs.c'))
|
||||
system_ss.add(when: 'CONFIG_VFIO_PCI', if_true: files(
|
||||
'display.c',
|
||||
))
|
||||
|
|
|
@ -75,6 +75,7 @@ void vfio_cpr_delete_vector_fd(struct VFIOPCIDevice *vdev, const char *name,
|
|||
int nr);
|
||||
|
||||
extern const VMStateDescription vfio_cpr_pci_vmstate;
|
||||
extern const VMStateDescription vmstate_cpr_vfio_devices;
|
||||
|
||||
void vfio_cpr_add_kvm_notifier(void);
|
||||
|
||||
|
|
|
@ -9,11 +9,23 @@
|
|||
#define MIGRATION_CPR_H
|
||||
|
||||
#include "qapi/qapi-types-migration.h"
|
||||
#include "qemu/queue.h"
|
||||
|
||||
#define MIG_MODE_NONE -1
|
||||
|
||||
#define QEMU_CPR_FILE_MAGIC 0x51435052
|
||||
#define QEMU_CPR_FILE_VERSION 0x00000001
|
||||
#define CPR_STATE "CprState"
|
||||
|
||||
typedef QLIST_HEAD(CprFdList, CprFd) CprFdList;
|
||||
typedef QLIST_HEAD(CprVFIODeviceList, CprVFIODevice) CprVFIODeviceList;
|
||||
|
||||
typedef struct CprState {
|
||||
CprFdList fds;
|
||||
CprVFIODeviceList vfio_devices;
|
||||
} CprState;
|
||||
|
||||
extern CprState cpr_state;
|
||||
|
||||
void cpr_save_fd(const char *name, int id, int fd);
|
||||
void cpr_delete_fd(const char *name, int id);
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
|
||||
#include "qemu/osdep.h"
|
||||
#include "qapi/error.h"
|
||||
#include "hw/vfio/vfio-device.h"
|
||||
#include "migration/cpr.h"
|
||||
#include "migration/misc.h"
|
||||
#include "migration/options.h"
|
||||
|
@ -20,13 +21,7 @@
|
|||
/*************************************************************************/
|
||||
/* cpr state container for all information to be saved. */
|
||||
|
||||
typedef QLIST_HEAD(CprFdList, CprFd) CprFdList;
|
||||
|
||||
typedef struct CprState {
|
||||
CprFdList fds;
|
||||
} CprState;
|
||||
|
||||
static CprState cpr_state;
|
||||
CprState cpr_state;
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
|
@ -127,8 +122,6 @@ int cpr_open_fd(const char *path, int flags, const char *name, int id,
|
|||
}
|
||||
|
||||
/*************************************************************************/
|
||||
#define CPR_STATE "CprState"
|
||||
|
||||
static const VMStateDescription vmstate_cpr_state = {
|
||||
.name = CPR_STATE,
|
||||
.version_id = 1,
|
||||
|
@ -136,6 +129,10 @@ static const VMStateDescription vmstate_cpr_state = {
|
|||
.fields = (VMStateField[]) {
|
||||
VMSTATE_QLIST_V(fds, CprState, 1, vmstate_cpr_fd, CprFd, next),
|
||||
VMSTATE_END_OF_LIST()
|
||||
},
|
||||
.subsections = (const VMStateDescription * const []) {
|
||||
&vmstate_cpr_vfio_devices,
|
||||
NULL
|
||||
}
|
||||
};
|
||||
/*************************************************************************/
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue