1/* 2 * migration yank functions 3 * 4 * Copyright (c) Lukas Straub <lukasstraub2@web.de> 5 * 6 * This work is licensed under the terms of the GNU GPL, version 2 or later. 7 * See the COPYING file in the top-level directory. 8 */ 9 10#include "qemu/osdep.h" 11#include "io/channel.h" 12#include "yank_functions.h" 13#include "qemu/yank.h" 14#include "qemu-file.h" 15 16void migration_yank_iochannel(void *opaque) 17{ 18 QIOChannel *ioc = QIO_CHANNEL(opaque); 19 20 qio_channel_shutdown(ioc, QIO_CHANNEL_SHUTDOWN_BOTH, NULL); 21} 22 23/* Return whether yank is supported on this ioc */ 24static bool migration_ioc_yank_supported(QIOChannel *ioc) 25{ 26 return qio_channel_has_feature(ioc, QIO_CHANNEL_FEATURE_SHUTDOWN); 27} 28 29void migration_ioc_register_yank(QIOChannel *ioc) 30{ 31 if (migration_ioc_yank_supported(ioc)) { 32 yank_register_function(MIGRATION_YANK_INSTANCE, 33 migration_yank_iochannel, 34 ioc); 35 } 36} 37 38void migration_ioc_unregister_yank(QIOChannel *ioc) 39{ 40 if (migration_ioc_yank_supported(ioc)) { 41 yank_unregister_function(MIGRATION_YANK_INSTANCE, 42 migration_yank_iochannel, 43 ioc); 44 } 45} 46 47void migration_ioc_unregister_yank_from_file(QEMUFile *file) 48{ 49 QIOChannel *ioc = qemu_file_get_ioc(file); 50 51 if (ioc) { 52 /* 53 * For migration qemufiles, we'll always reach here. Though we'll skip 54 * calls from e.g. savevm/loadvm as they don't use yank. 55 */ 56 migration_ioc_unregister_yank(ioc); 57 } 58} 59

