On Thu, Oct 16, 2025 at 02:40:52PM +0300, Vladimir Sementsov-Ogievskiy wrote: > This will be used to support backend-transfer migration for > vhost-user-blk, we'll migrate event notifier fds through > migration stream, to avoid extra contact with backend. > > Signed-off-by: Vladimir Sementsov-Ogievskiy <[email protected]>
Acked-by: Peter Xu <[email protected]> Note: we recently merged _errp versions of all below three hooks. You can also switch to that if all of them can fail. You can keep my A-b if you switch over. > --- > include/migration/vmstate.h | 7 ++++ > migration/meson.build | 1 + > migration/vmstate-event-notifier.c | 54 ++++++++++++++++++++++++++++++ > 3 files changed, 62 insertions(+) > create mode 100644 migration/vmstate-event-notifier.c > > diff --git a/include/migration/vmstate.h b/include/migration/vmstate.h > index f243518fb5..7f1f1c166a 100644 > --- a/include/migration/vmstate.h > +++ b/include/migration/vmstate.h > @@ -1294,4 +1294,11 @@ void vmstate_register_ram_global(struct MemoryRegion > *memory); > > bool vmstate_check_only_migratable(const VMStateDescription *vmsd); > > +extern const VMStateDescription vmstate_event_notifier; > + > +#define VMSTATE_EVENT_NOTIFIER(_field, _struct) \ > + VMSTATE_STRUCT(_field, _struct, 0, vmstate_event_notifier, \ > + EventNotifier) > + > + > #endif > diff --git a/migration/meson.build b/migration/meson.build > index 16909d54c5..b5341ae0cb 100644 > --- a/migration/meson.build > +++ b/migration/meson.build > @@ -5,6 +5,7 @@ migration_files = files( > 'xbzrle.c', > 'vmstate-types.c', > 'vmstate.c', > + 'vmstate-event-notifier.c', > 'qemu-file.c', > 'yank_functions.c', > ) > diff --git a/migration/vmstate-event-notifier.c > b/migration/vmstate-event-notifier.c > new file mode 100644 > index 0000000000..2076eec961 > --- /dev/null > +++ b/migration/vmstate-event-notifier.c > @@ -0,0 +1,54 @@ > +/* > + * Event notifier migration support > + * Copyright (c) Yandex Technologies LLC, 2025 > + * SPDX-License-Identifier: GPL-2.0-or-later > + */ > + > +#include "qemu/osdep.h" > +#include "qemu/event_notifier.h" > +#include "migration/vmstate.h" > + > +static int event_notifier_pre_save(void *opaque) > +{ > + struct EventNotifier *e = opaque; > + > + if (!e->initialized || e->rfd != e->wfd) { > + return -1; > + } > + > + return 0; > +} > + > +static int event_notifier_pre_load(void *opaque) > +{ > + struct EventNotifier *e = opaque; > + > + if (e->initialized) { > + return -1; > + } > + > + return 0; > +} > + > +static int event_notifier_post_load(void *opaque, int version_id) > +{ > + struct EventNotifier *e = opaque; > + > + if (e->rfd < 0) { > + return -1; > + } > + > + e->wfd = e->rfd; > + e->initialized = true; > + > + return 0; > +} > + > +const VMStateDescription vmstate_event_notifier = { > + .name = "event-notifier", > + .pre_save = event_notifier_pre_save, > + .pre_load = event_notifier_pre_load, > + .post_load = event_notifier_post_load, > + .fields = (const VMStateField[]){VMSTATE_FD(rfd, EventNotifier), > + VMSTATE_END_OF_LIST()}, > +}; > -- > 2.48.1 > -- Peter Xu
