migration/multifd: Decouple recv method from pages
Next patch will abstract the type of data being received by the channels, so do some cleanup now to remove references to pages and dependency on 'normal_num'. Signed-off-by: Fabiano Rosas <farosas@suse.de>
This commit is contained in:
@@ -314,7 +314,7 @@ static MultiFDMethods multifd_zlib_ops = {
|
||||
.send_prepare = zlib_send_prepare,
|
||||
.recv_setup = zlib_recv_setup,
|
||||
.recv_cleanup = zlib_recv_cleanup,
|
||||
.recv_pages = zlib_recv_pages
|
||||
.recv_data = zlib_recv_pages
|
||||
};
|
||||
|
||||
static void multifd_zlib_register(void)
|
||||
|
||||
@@ -305,7 +305,7 @@ static MultiFDMethods multifd_zstd_ops = {
|
||||
.send_prepare = zstd_send_prepare,
|
||||
.recv_setup = zstd_recv_setup,
|
||||
.recv_cleanup = zstd_recv_cleanup,
|
||||
.recv_pages = zstd_recv_pages
|
||||
.recv_data = zstd_recv_pages
|
||||
};
|
||||
|
||||
static void multifd_zstd_register(void)
|
||||
|
||||
@@ -130,7 +130,7 @@ static void nocomp_recv_cleanup(MultiFDRecvParams *p)
|
||||
}
|
||||
|
||||
/**
|
||||
* nocomp_recv_pages: read the data from the channel into actual pages
|
||||
* nocomp_recv_data: read the data from the channel
|
||||
*
|
||||
* For no compression we just need to read things into the correct place.
|
||||
*
|
||||
@@ -139,7 +139,7 @@ static void nocomp_recv_cleanup(MultiFDRecvParams *p)
|
||||
* @p: Params for the channel that we are using
|
||||
* @errp: pointer to an error
|
||||
*/
|
||||
static int nocomp_recv_pages(MultiFDRecvParams *p, Error **errp)
|
||||
static int nocomp_recv_data(MultiFDRecvParams *p, Error **errp)
|
||||
{
|
||||
uint32_t flags = p->flags & MULTIFD_FLAG_COMPRESSION_MASK;
|
||||
|
||||
@@ -161,7 +161,7 @@ static MultiFDMethods multifd_nocomp_ops = {
|
||||
.send_prepare = nocomp_send_prepare,
|
||||
.recv_setup = nocomp_recv_setup,
|
||||
.recv_cleanup = nocomp_recv_cleanup,
|
||||
.recv_pages = nocomp_recv_pages
|
||||
.recv_data = nocomp_recv_data
|
||||
};
|
||||
|
||||
static MultiFDMethods *multifd_ops[MULTIFD_COMPRESSION__MAX] = {
|
||||
@@ -1126,6 +1126,7 @@ static void *multifd_recv_thread(void *opaque)
|
||||
|
||||
while (true) {
|
||||
uint32_t flags = 0;
|
||||
bool has_data = false;
|
||||
p->normal_num = 0;
|
||||
|
||||
if (p->quit) {
|
||||
@@ -1154,12 +1155,13 @@ static void *multifd_recv_thread(void *opaque)
|
||||
p->next_packet_size);
|
||||
|
||||
p->total_normal_pages += p->normal_num;
|
||||
has_data = !!p->normal_num;
|
||||
}
|
||||
|
||||
qemu_mutex_unlock(&p->mutex);
|
||||
|
||||
if (p->normal_num) {
|
||||
ret = multifd_recv_state->ops->recv_pages(p, &local_err);
|
||||
if (has_data) {
|
||||
ret = multifd_recv_state->ops->recv_data(p, &local_err);
|
||||
if (ret != 0) {
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -203,11 +203,10 @@ typedef struct {
|
||||
int (*recv_setup)(MultiFDRecvParams *p, Error **errp);
|
||||
/* Cleanup for receiving side */
|
||||
void (*recv_cleanup)(MultiFDRecvParams *p);
|
||||
/* Read all pages */
|
||||
int (*recv_pages)(MultiFDRecvParams *p, Error **errp);
|
||||
/* Read all data */
|
||||
int (*recv_data)(MultiFDRecvParams *p, Error **errp);
|
||||
} MultiFDMethods;
|
||||
|
||||
void multifd_register_ops(int method, MultiFDMethods *ops);
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
Reference in New Issue
Block a user