Message ID | 20240509090954.16447-2-avihaih@nvidia.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | qapi/vfio: Add VFIO migration QAPI event | expand |
On 5/9/24 11:09, Avihai Horon wrote: > Add a new QAPI event for VFIO migration. This event will be emitted when > a VFIO device changes its migration state, for example, during migration > or when stopping/starting the guest. > > This event can be used by management applications to get updates on the > current state of the VFIO device for their own purposes. > > Note that this new event is introduced since VFIO devices have a unique > set of migration states which cannot be described as accurately by other > existing events such as run state or migration status. > > Signed-off-by: Avihai Horon <avihaih@nvidia.com> LGTM, Reviewed-by: Cédric Le Goater <clg@redhat.com> Thanks, C. > --- > MAINTAINERS | 1 + > qapi/qapi-schema.json | 1 + > qapi/vfio.json | 67 +++++++++++++++++++++++++++++++++++++++++++ > qapi/meson.build | 1 + > 4 files changed, 70 insertions(+) > create mode 100644 qapi/vfio.json > > diff --git a/MAINTAINERS b/MAINTAINERS > index 84391777db..b5f1de459e 100644 > --- a/MAINTAINERS > +++ b/MAINTAINERS > @@ -2160,6 +2160,7 @@ F: hw/vfio/* > F: include/hw/vfio/ > F: docs/igd-assign.txt > F: docs/devel/migration/vfio.rst > +F: qapi/vfio.json > > vfio-ccw > M: Eric Farman <farman@linux.ibm.com> > diff --git a/qapi/qapi-schema.json b/qapi/qapi-schema.json > index 5e33da7228..b1581988e4 100644 > --- a/qapi/qapi-schema.json > +++ b/qapi/qapi-schema.json > @@ -78,5 +78,6 @@ > { 'include': 'pci.json' } > { 'include': 'stats.json' } > { 'include': 'virtio.json' } > +{ 'include': 'vfio.json' } > { 'include': 'cryptodev.json' } > { 'include': 'cxl.json' } > diff --git a/qapi/vfio.json b/qapi/vfio.json > new file mode 100644 > index 0000000000..a0e5013188 > --- /dev/null > +++ b/qapi/vfio.json > @@ -0,0 +1,67 @@ > +# -*- Mode: Python -*- > +# vim: filetype=python > +# > + > +## > +# = VFIO devices > +## > + > +## > +# @VfioMigrationState: > +# > +# An enumeration of the VFIO device migration states. > +# > +# @stop: The device is stopped. > +# > +# @running: The device is running. > +# > +# @stop-copy: The device is stopped and its internal state is available > +# for reading. > +# > +# @resuming: The device is stopped and its internal state is available > +# for writing. > +# > +# @running-p2p: The device is running in the P2P quiescent state. > +# > +# @pre-copy: The device is running, tracking its internal state and its > +# internal state is available for reading. > +# > +# @pre-copy-p2p: The device is running in the P2P quiescent state, > +# tracking its internal state and its internal state is available > +# for reading. > +# > +# Since: 9.1 > +## > +{ 'enum': 'VfioMigrationState', > + 'data': [ 'stop', 'running', 'stop-copy', 'resuming', 'running-p2p', > + 'pre-copy', 'pre-copy-p2p' ], > + 'prefix': 'QAPI_VFIO_MIGRATION_STATE' } > + > +## > +# @VFIO_MIGRATION: > +# > +# This event is emitted when a VFIO device migration state is changed. > +# > +# @device-id: The device's id, if it has one. > +# > +# @qom-path: The device's QOM path. > +# > +# @device-state: The new changed device migration state. > +# > +# Since: 9.1 > +# > +# Example: > +# > +# <- { "timestamp": { "seconds": 1713771323, "microseconds": 212268 }, > +# "event": "VFIO_MIGRATION", > +# "data": { > +# "device-id": "vfio_dev1", > +# "qom-path": "/machine/peripheral/vfio_dev1", > +# "device-state": "stop" } } > +## > +{ 'event': 'VFIO_MIGRATION', > + 'data': { > + 'device-id': 'str', > + 'qom-path': 'str', > + 'device-state': 'VfioMigrationState' > + } } > diff --git a/qapi/meson.build b/qapi/meson.build > index c92af6e063..e7bc54e5d0 100644 > --- a/qapi/meson.build > +++ b/qapi/meson.build > @@ -52,6 +52,7 @@ qapi_all_modules = [ > 'stats', > 'trace', > 'transaction', > + 'vfio', > 'virtio', > 'yank', > ]
diff --git a/MAINTAINERS b/MAINTAINERS index 84391777db..b5f1de459e 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -2160,6 +2160,7 @@ F: hw/vfio/* F: include/hw/vfio/ F: docs/igd-assign.txt F: docs/devel/migration/vfio.rst +F: qapi/vfio.json vfio-ccw M: Eric Farman <farman@linux.ibm.com> diff --git a/qapi/qapi-schema.json b/qapi/qapi-schema.json index 5e33da7228..b1581988e4 100644 --- a/qapi/qapi-schema.json +++ b/qapi/qapi-schema.json @@ -78,5 +78,6 @@ { 'include': 'pci.json' } { 'include': 'stats.json' } { 'include': 'virtio.json' } +{ 'include': 'vfio.json' } { 'include': 'cryptodev.json' } { 'include': 'cxl.json' } diff --git a/qapi/vfio.json b/qapi/vfio.json new file mode 100644 index 0000000000..a0e5013188 --- /dev/null +++ b/qapi/vfio.json @@ -0,0 +1,67 @@ +# -*- Mode: Python -*- +# vim: filetype=python +# + +## +# = VFIO devices +## + +## +# @VfioMigrationState: +# +# An enumeration of the VFIO device migration states. +# +# @stop: The device is stopped. +# +# @running: The device is running. +# +# @stop-copy: The device is stopped and its internal state is available +# for reading. +# +# @resuming: The device is stopped and its internal state is available +# for writing. +# +# @running-p2p: The device is running in the P2P quiescent state. +# +# @pre-copy: The device is running, tracking its internal state and its +# internal state is available for reading. +# +# @pre-copy-p2p: The device is running in the P2P quiescent state, +# tracking its internal state and its internal state is available +# for reading. +# +# Since: 9.1 +## +{ 'enum': 'VfioMigrationState', + 'data': [ 'stop', 'running', 'stop-copy', 'resuming', 'running-p2p', + 'pre-copy', 'pre-copy-p2p' ], + 'prefix': 'QAPI_VFIO_MIGRATION_STATE' } + +## +# @VFIO_MIGRATION: +# +# This event is emitted when a VFIO device migration state is changed. +# +# @device-id: The device's id, if it has one. +# +# @qom-path: The device's QOM path. +# +# @device-state: The new changed device migration state. +# +# Since: 9.1 +# +# Example: +# +# <- { "timestamp": { "seconds": 1713771323, "microseconds": 212268 }, +# "event": "VFIO_MIGRATION", +# "data": { +# "device-id": "vfio_dev1", +# "qom-path": "/machine/peripheral/vfio_dev1", +# "device-state": "stop" } } +## +{ 'event': 'VFIO_MIGRATION', + 'data': { + 'device-id': 'str', + 'qom-path': 'str', + 'device-state': 'VfioMigrationState' + } } diff --git a/qapi/meson.build b/qapi/meson.build index c92af6e063..e7bc54e5d0 100644 --- a/qapi/meson.build +++ b/qapi/meson.build @@ -52,6 +52,7 @@ qapi_all_modules = [ 'stats', 'trace', 'transaction', + 'vfio', 'virtio', 'yank', ]
Add a new QAPI event for VFIO migration. This event will be emitted when a VFIO device changes its migration state, for example, during migration or when stopping/starting the guest. This event can be used by management applications to get updates on the current state of the VFIO device for their own purposes. Note that this new event is introduced since VFIO devices have a unique set of migration states which cannot be described as accurately by other existing events such as run state or migration status. Signed-off-by: Avihai Horon <avihaih@nvidia.com> --- MAINTAINERS | 1 + qapi/qapi-schema.json | 1 + qapi/vfio.json | 67 +++++++++++++++++++++++++++++++++++++++++++ qapi/meson.build | 1 + 4 files changed, 70 insertions(+) create mode 100644 qapi/vfio.json