[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH RFC 08/26] migration: Allow passing migration header in migration
From: |
Maciej S. Szmigiero |
Subject: |
[PATCH RFC 08/26] migration: Allow passing migration header in migration channel creation |
Date: |
Tue, 16 Apr 2024 16:42:47 +0200 |
From: Avihai Horon <avihaih@nvidia.com>
Signed-off-by: Avihai Horon <avihaih@nvidia.com>
[MSS: Rewrite using MFDSendChannelConnectData/PostcopyPChannelConnectData]
Signed-off-by: Maciej S. Szmigiero <maciej.szmigiero@oracle.com>
---
migration/multifd.c | 14 ++++++++++++--
migration/postcopy-ram.c | 14 ++++++++++++--
2 files changed, 24 insertions(+), 4 deletions(-)
diff --git a/migration/multifd.c b/migration/multifd.c
index 58a18bb1e4a8..8eecda68ac0f 100644
--- a/migration/multifd.c
+++ b/migration/multifd.c
@@ -18,6 +18,7 @@
#include "exec/ramblock.h"
#include "qemu/error-report.h"
#include "qapi/error.h"
+#include "channel.h"
#include "file.h"
#include "migration.h"
#include "migration-stats.h"
@@ -1014,15 +1015,20 @@ struct MFDSendChannelConnectData {
unsigned int ref;
MultiFDSendParams *p;
QIOChannelTLS *tioc;
+ MigChannelHeader header;
};
-static MFDSendChannelConnectData
*mfd_send_channel_connect_data_new(MultiFDSendParams *p)
+static MFDSendChannelConnectData
*mfd_send_channel_connect_data_new(MultiFDSendParams *p,
+
MigChannelHeader *header)
{
MFDSendChannelConnectData *data;
data = g_malloc0(sizeof(*data));
data->ref = 1;
data->p = p;
+ if (header) {
+ memcpy(&data->header, header, sizeof(*header));
+ }
return data;
}
@@ -1110,6 +1116,10 @@ bool multifd_channel_connect(MFDSendChannelConnectData
*data, QIOChannel *ioc,
{
MultiFDSendParams *p = data->p;
+ if (migration_channel_header_send(ioc, &data->header, errp)) {
+ return false;
+ }
+
qio_channel_set_delay(ioc, false);
migration_ioc_register_yank(ioc);
@@ -1182,7 +1192,7 @@ static bool
multifd_new_send_channel_create(MultiFDSendParams *p, Error **errp)
{
g_autoptr(MFDSendChannelConnectData) data = NULL;
- data = mfd_send_channel_connect_data_new(p);
+ data = mfd_send_channel_connect_data_new(p, NULL);
if (!multifd_use_packets()) {
return file_send_channel_create(data, errp);
diff --git a/migration/postcopy-ram.c b/migration/postcopy-ram.c
index 94fe872d8251..53c90344acce 100644
--- a/migration/postcopy-ram.c
+++ b/migration/postcopy-ram.c
@@ -19,6 +19,7 @@
#include "qemu/osdep.h"
#include "qemu/madvise.h"
#include "exec/target_page.h"
+#include "channel.h"
#include "migration.h"
#include "qemu-file.h"
#include "savevm.h"
@@ -1620,15 +1621,20 @@ void
postcopy_preempt_new_channel(MigrationIncomingState *mis, QEMUFile *file)
typedef struct {
unsigned int ref;
MigrationState *s;
+ MigChannelHeader header;
} PostcopyPChannelConnectData;
-static PostcopyPChannelConnectData
*pcopy_preempt_connect_data_new(MigrationState *s)
+static PostcopyPChannelConnectData
*pcopy_preempt_connect_data_new(MigrationState *s,
+
MigChannelHeader *header)
{
PostcopyPChannelConnectData *data;
data = g_malloc0(sizeof(*data));
data->ref = 1;
data->s = s;
+ if (header) {
+ memcpy(&data->header, header, sizeof(*header));
+ }
return data;
}
@@ -1673,6 +1679,10 @@
postcopy_preempt_send_channel_done(PostcopyPChannelConnectData *data,
{
MigrationState *s = data->s;
+ if (!local_err) {
+ migration_channel_header_send(ioc, &data->header, &local_err);
+ }
+
if (local_err) {
migrate_set_error(s, local_err);
error_free(local_err);
@@ -1766,7 +1776,7 @@ void postcopy_preempt_setup(MigrationState *s)
{
PostcopyPChannelConnectData *data;
- data = pcopy_preempt_connect_data_new(s);
+ data = pcopy_preempt_connect_data_new(s, NULL);
/* Kick an async task to connect */
socket_send_channel_create(postcopy_preempt_send_channel_new,
data, pcopy_preempt_connect_data_unref);
- [PATCH RFC 00/26] Multifd 🔀 device state transfer support with VFIO consumer, Maciej S. Szmigiero, 2024/04/16
- [PATCH RFC 03/26] migration: Add send/receive header for main channel, Maciej S. Szmigiero, 2024/04/16
- [PATCH RFC 01/26] migration: Add x-channel-header pseudo-capability, Maciej S. Szmigiero, 2024/04/16
- [PATCH RFC 02/26] migration: Add migration channel header send/receive, Maciej S. Szmigiero, 2024/04/16
- [PATCH RFC 05/26] migration: Add a DestroyNotify parameter to socket_send_channel_create(), Maciej S. Szmigiero, 2024/04/16
- [PATCH RFC 04/26] multifd: change multifd_new_send_channel_create() param type, Maciej S. Szmigiero, 2024/04/16
- [PATCH RFC 06/26] multifd: pass MFDSendChannelConnectData when connecting sending socket, Maciej S. Szmigiero, 2024/04/16
- [PATCH RFC 07/26] migration/postcopy: pass PostcopyPChannelConnectData when connecting sending preempt socket, Maciej S. Szmigiero, 2024/04/16
- [PATCH RFC 09/26] migration: Add send/receive header for postcopy preempt channel, Maciej S. Szmigiero, 2024/04/16
- [PATCH RFC 08/26] migration: Allow passing migration header in migration channel creation,
Maciej S. Szmigiero <=
- [PATCH RFC 10/26] migration: Add send/receive header for multifd channel, Maciej S. Szmigiero, 2024/04/16
- [PATCH RFC 11/26] migration/options: Mapped-ram is not channel header compatible, Maciej S. Szmigiero, 2024/04/16
- [PATCH RFC 12/26] migration: Enable x-channel-header pseudo-capability, Maciej S. Szmigiero, 2024/04/16
- [PATCH RFC 13/26] vfio/migration: Add save_{iterate, complete_precopy}_started trace events, Maciej S. Szmigiero, 2024/04/16
- [PATCH RFC 14/26] migration/ram: Add load start trace event, Maciej S. Szmigiero, 2024/04/16
- [PATCH RFC 15/26] migration/multifd: Zero p->flags before starting filling a packet, Maciej S. Szmigiero, 2024/04/16
- [PATCH RFC 16/26] migration: Add save_live_complete_precopy_async{, wait} handlers, Maciej S. Szmigiero, 2024/04/16
- [PATCH RFC 18/26] migration: Add load_finish handler and associated functions, Maciej S. Szmigiero, 2024/04/16
- [PATCH RFC 17/26] migration: Add qemu_loadvm_load_state_buffer() and its handler, Maciej S. Szmigiero, 2024/04/16
- [PATCH RFC 22/26] migration/multifd: Convert multifd_send_pages::next_channel to atomic, Maciej S. Szmigiero, 2024/04/16