On Fri, Jun 19, 2020 at 04:23:50PM +0200, Lukas Straub wrote: > On Tue, 16 Jun 2020 15:39:57 +0100 > Daniel P. Berrangé <berra...@redhat.com> wrote: > > > On Mon, May 25, 2020 at 05:44:23PM +0200, Lukas Straub wrote: > > > The yank feature allows to recover from hanging qemu by "yanking" > > > at various parts. Other qemu systems can register themselves and > > > multiple yank functions. Then all yank functions for selected > > > instances can be called by the 'yank' out-of-band qmp command. > > > Available instances can be queried by a 'query-yank' oob command. > > > > > > Signed-off-by: Lukas Straub <lukasstra...@web.de> > > > --- > > > qapi/misc.json | 45 +++++++++++++ > > > yank.c | 174 +++++++++++++++++++++++++++++++++++++++++++++++++ > > > yank.h | 67 +++++++++++++++++++ > > > 3 files changed, 286 insertions(+) > > > create mode 100644 yank.c > > > create mode 100644 yank.h > > > > > +void yank_register_function(char *instance_name, YankFn *func, void > > > *opaque) > > > +{ > > > + struct YankInstance *instance; > > > + struct YankFuncAndParam *entry; > > > + > > > + qemu_mutex_lock(&lock); > > > + instance = yank_find_instance(instance_name); > > > + assert(instance); > > > + > > > + entry = g_slice_new(struct YankFuncAndParam); > > > + entry->func = func; > > > + entry->opaque = opaque; > > > + > > > + QLIST_INSERT_HEAD(&instance->yankfns, entry, next); > > > + qemu_mutex_unlock(&lock); > > > +} > > > + > > > +void yank_unregister_function(char *instance_name, YankFn *func, void > > > *opaque) > > > +{ > > > + struct YankInstance *instance; > > > + struct YankFuncAndParam *entry; > > > + > > > + qemu_mutex_lock(&lock); > > > + instance = yank_find_instance(instance_name); > > > + assert(instance); > > > + > > > + QLIST_FOREACH(entry, &instance->yankfns, next) { > > > + if (entry->func == func && entry->opaque == opaque) { > > > + QLIST_REMOVE(entry, next); > > > + g_slice_free(struct YankFuncAndParam, entry); > > > + qemu_mutex_unlock(&lock); > > > + return; > > > + } > > > + } > > > + > > > + abort(); > > > +} > > > > Since the NBD impl no longer needs to register multiple different functions > > on the same insance_nane, these methods could be be simplified, to only > > accept a single function, instead of keeping a whole list. This would avoid > > need to pass a function into the unregister() method at all. > > Multiple yank functions are still needed for multifd migration.
Oh I missed that subtlety, so fine to ignore my suggestion. Regards, Daniel -- |: https://berrange.com -o- https://www.flickr.com/photos/dberrange :| |: https://libvirt.org -o- https://fstop138.berrange.com :| |: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|