[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v5 05/18] migration/multifd: Introduce MultiFDSendData
From: |
Fabiano Rosas |
Subject: |
[PATCH v5 05/18] migration/multifd: Introduce MultiFDSendData |
Date: |
Mon, 26 Aug 2024 16:53:09 -0300 |
Add a new data structure to replace p->pages in the multifd
channel. This new structure will hide the multifd payload type behind
an union, so we don't need to add a new field to the channel each time
we want to handle a different data type.
This also allow us to keep multifd_send_pages() as is, without needing
to complicate the pointer switching.
Reviewed-by: Peter Xu <peterx@redhat.com>
Signed-off-by: Fabiano Rosas <farosas@suse.de>
---
migration/multifd.h | 26 ++++++++++++++++++++++++++
1 file changed, 26 insertions(+)
diff --git a/migration/multifd.h b/migration/multifd.h
index 660a9882c2..7bb4a2cbc4 100644
--- a/migration/multifd.h
+++ b/migration/multifd.h
@@ -17,6 +17,7 @@
#include "ram.h"
typedef struct MultiFDRecvData MultiFDRecvData;
+typedef struct MultiFDSendData MultiFDSendData;
bool multifd_send_setup(void);
void multifd_send_shutdown(void);
@@ -88,6 +89,31 @@ struct MultiFDRecvData {
off_t file_offset;
};
+typedef enum {
+ MULTIFD_PAYLOAD_NONE,
+ MULTIFD_PAYLOAD_RAM,
+} MultiFDPayloadType;
+
+typedef union MultiFDPayload {
+ MultiFDPages_t ram;
+} MultiFDPayload;
+
+struct MultiFDSendData {
+ MultiFDPayloadType type;
+ MultiFDPayload u;
+};
+
+static inline bool multifd_payload_empty(MultiFDSendData *data)
+{
+ return data->type == MULTIFD_PAYLOAD_NONE;
+}
+
+static inline void multifd_set_payload_type(MultiFDSendData *data,
+ MultiFDPayloadType type)
+{
+ data->type = type;
+}
+
typedef struct {
/* Fields are only written at creating/deletion time */
/* No lock required for them, they are read only */
--
2.35.3
- [PATCH v5 00/18] migration/multifd: Remove multifd_send_state->pages, Fabiano Rosas, 2024/08/26
- [PATCH v5 01/18] migration/multifd: Reduce access to p->pages, Fabiano Rosas, 2024/08/26
- [PATCH v5 02/18] migration/multifd: Inline page_size and page_count, Fabiano Rosas, 2024/08/26
- [PATCH v5 04/18] migration/multifd: Pass in MultiFDPages_t to file_write_ramblock_iov, Fabiano Rosas, 2024/08/26
- [PATCH v5 06/18] migration/multifd: Make MultiFDPages_t:offset a flexible array member, Fabiano Rosas, 2024/08/26
- [PATCH v5 07/18] migration/multifd: Replace p->pages with an union pointer, Fabiano Rosas, 2024/08/26
- [PATCH v5 03/18] migration/multifd: Remove pages->allocated, Fabiano Rosas, 2024/08/26
- [PATCH v5 05/18] migration/multifd: Introduce MultiFDSendData,
Fabiano Rosas <=
- [PATCH v5 08/18] migration/multifd: Move pages accounting into multifd_send_zero_page_detect(), Fabiano Rosas, 2024/08/26
- [PATCH v5 09/18] migration/multifd: Remove total pages tracing, Fabiano Rosas, 2024/08/26
- [PATCH v5 10/18] migration/multifd: Isolate ram pages packet data, Fabiano Rosas, 2024/08/26
- [PATCH v5 11/18] migration/multifd: Don't send ram data during SYNC, Fabiano Rosas, 2024/08/26
- [PATCH v5 12/18] migration/multifd: Replace multifd_send_state->pages with client data, Fabiano Rosas, 2024/08/26
- [PATCH v5 13/18] migration/multifd: Allow multifd sync without flush, Fabiano Rosas, 2024/08/26
- [PATCH v5 15/18] migration/multifd: Register nocomp ops dynamically, Fabiano Rosas, 2024/08/26
- [PATCH v5 14/18] migration/multifd: Standardize on multifd ops names, Fabiano Rosas, 2024/08/26
- [PATCH v5 16/18] migration/multifd: Move nocomp code into multifd-nocomp.c, Fabiano Rosas, 2024/08/26
- [PATCH v5 18/18] migration/multifd: Stop changing the packet on recv side, Fabiano Rosas, 2024/08/26