>-----Original Message-----
>From: Steven Sistare <steven.sist...@oracle.com>
>Subject: Re: [PATCH V5 30/38] migration: vfio cpr state hook
>
>On 6/24/2025 7:24 AM, Duan, Zhenzhong wrote:
>>> -----Original Message-----
>>> From: Steve Sistare <steven.sist...@oracle.com>
>>> Subject: [PATCH V5 30/38] 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.
>>
>> I'm not familiar with migration, may I ask how subsection help blocking
>migration
>> from new to old QEMU?
>
>Migrating new to old will fail with an error message saying the subsection is
>not recognized.
You mean old qemu supporting legacy container live update, migrate to new qemu
supporting iommufd live update?
>
>>> The contents of each device object will be defined by the vfio subsystem
>>> in a subsequent patch.
>>>
>>> Signed-off-by: Steve Sistare <steven.sist...@oracle.com>
>>> ---
>>> include/hw/vfio/vfio-cpr.h | 1 +
>>> include/migration/cpr.h | 12 ++++++++++++
>>> hw/vfio/cpr-iommufd.c | 2 ++
>>> hw/vfio/iommufd-stubs.c | 18 ++++++++++++++++++
>>> migration/cpr.c | 14 +++++---------
>>> hw/vfio/meson.build | 1 +
>>> 6 files changed, 39 insertions(+), 9 deletions(-)
>>> create mode 100644 hw/vfio/iommufd-stubs.c
>>>
>>> diff --git a/include/hw/vfio/vfio-cpr.h b/include/hw/vfio/vfio-cpr.h
>>> index b9b77ae..619af07 100644
>>> --- a/include/hw/vfio/vfio-cpr.h
>>> +++ b/include/hw/vfio/vfio-cpr.h
>>> @@ -74,5 +74,6 @@ 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;
>>>
>>> #endif /* HW_VFIO_VFIO_CPR_H */
>>> diff --git a/include/migration/cpr.h b/include/migration/cpr.h
>>> index 7fd8065..8fd8bfe 100644
>>> --- a/include/migration/cpr.h
>>> +++ b/include/migration/cpr.h
>>> @@ -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);
>>> diff --git a/hw/vfio/cpr-iommufd.c b/hw/vfio/cpr-iommufd.c
>>> index 60bd7e8..3e78265 100644
>>> --- a/hw/vfio/cpr-iommufd.c
>>> +++ b/hw/vfio/cpr-iommufd.c
>>> @@ -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)) {
>>> diff --git a/hw/vfio/iommufd-stubs.c b/hw/vfio/iommufd-stubs.c
>>> new file mode 100644
>>> index 0000000..0be5276
>>> --- /dev/null
>>> +++ b/hw/vfio/iommufd-stubs.c
>>> @@ -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,
>>
>> Is there difference if version_id=minimum_version_id=0?
>
>No. Some developers add a new VMStateDescription starting at 0,
>and some starting at 1.
OK.
Thanks
Zhenzhong