Add the cpr_needed_for_reuse and cpr_open_fd, for use when adding cpr support for vfio and iommufd.
Signed-off-by: Steve Sistare <steven.sist...@oracle.com> --- include/migration/cpr.h | 4 ++++ migration/cpr.c | 24 ++++++++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/include/migration/cpr.h b/include/migration/cpr.h index 7561fc7..fc6aa33 100644 --- a/include/migration/cpr.h +++ b/include/migration/cpr.h @@ -18,6 +18,8 @@ void cpr_save_fd(const char *name, int id, int fd); void cpr_delete_fd(const char *name, int id); int cpr_find_fd(const char *name, int id); +int cpr_open_fd(const char *path, int flags, const char *name, int id, + bool *reused, Error **errp); MigMode cpr_get_incoming_mode(void); void cpr_set_incoming_mode(MigMode mode); @@ -28,6 +30,8 @@ int cpr_state_load(MigrationChannel *channel, Error **errp); void cpr_state_close(void); struct QIOChannel *cpr_state_ioc(void); +bool cpr_needed_for_reuse(void *opaque); + QEMUFile *cpr_transfer_output(MigrationChannel *channel, Error **errp); QEMUFile *cpr_transfer_input(MigrationChannel *channel, Error **errp); diff --git a/migration/cpr.c b/migration/cpr.c index 42c4656..0b01e25 100644 --- a/migration/cpr.c +++ b/migration/cpr.c @@ -95,6 +95,24 @@ int cpr_find_fd(const char *name, int id) trace_cpr_find_fd(name, id, fd); return fd; } + +int cpr_open_fd(const char *path, int flags, const char *name, int id, + bool *reused, Error **errp) +{ + int fd = cpr_find_fd(name, id); + + if (reused) { + *reused = (fd >= 0); + } + if (fd < 0) { + fd = qemu_open(path, flags, errp); + if (fd >= 0) { + cpr_save_fd(name, id, fd); + } + } + return fd; +} + /*************************************************************************/ #define CPR_STATE "CprState" @@ -228,3 +246,9 @@ void cpr_state_close(void) cpr_state_file = NULL; } } + +bool cpr_needed_for_reuse(void *opaque) +{ + MigMode mode = migrate_mode(); + return mode == MIG_MODE_CPR_TRANSFER; +} -- 1.8.3.1