migration/multifd: Postpone reset of MultiFDPages_t
Now we reset MultiFDPages_t object in the multifd sender thread in the middle of the sending job. That's not necessary, because the "*pages" struct will not be reused anyway until pending_job is cleared. Move that to the end after the job is completed, provide a helper to reset a "*pages" object. Use that same helper when free the object too. This prepares us to keep using p->pages in the follow up patches, where we may drop p->normal[]. Reviewed-by: Fabiano Rosas <farosas@suse.de> Link: https://lore.kernel.org/r/20240202102857.110210-5-peterx@redhat.com Signed-off-by: Peter Xu <peterx@redhat.com>
This commit is contained in:
parent
15f3f21d59
commit
836eca47f6
@ -172,6 +172,17 @@ void multifd_register_ops(int method, MultiFDMethods *ops)
|
||||
multifd_ops[method] = ops;
|
||||
}
|
||||
|
||||
/* Reset a MultiFDPages_t* object for the next use */
|
||||
static void multifd_pages_reset(MultiFDPages_t *pages)
|
||||
{
|
||||
/*
|
||||
* We don't need to touch offset[] array, because it will be
|
||||
* overwritten later when reused.
|
||||
*/
|
||||
pages->num = 0;
|
||||
pages->block = NULL;
|
||||
}
|
||||
|
||||
static int multifd_send_initial_packet(MultiFDSendParams *p, Error **errp)
|
||||
{
|
||||
MultiFDInit_t msg = {};
|
||||
@ -248,9 +259,8 @@ static MultiFDPages_t *multifd_pages_init(uint32_t n)
|
||||
|
||||
static void multifd_pages_clear(MultiFDPages_t *pages)
|
||||
{
|
||||
pages->num = 0;
|
||||
multifd_pages_reset(pages);
|
||||
pages->allocated = 0;
|
||||
pages->block = NULL;
|
||||
g_free(pages->offset);
|
||||
pages->offset = NULL;
|
||||
g_free(pages);
|
||||
@ -704,8 +714,6 @@ static void *multifd_send_thread(void *opaque)
|
||||
p->flags = 0;
|
||||
p->num_packets++;
|
||||
p->total_normal_pages += p->normal_num;
|
||||
p->pages->num = 0;
|
||||
p->pages->block = NULL;
|
||||
qemu_mutex_unlock(&p->mutex);
|
||||
|
||||
trace_multifd_send(p->id, packet_num, p->normal_num, flags,
|
||||
@ -732,6 +740,8 @@ static void *multifd_send_thread(void *opaque)
|
||||
|
||||
stat64_add(&mig_stats.multifd_bytes,
|
||||
p->next_packet_size + p->packet_len);
|
||||
|
||||
multifd_pages_reset(p->pages);
|
||||
p->next_packet_size = 0;
|
||||
qemu_mutex_lock(&p->mutex);
|
||||
p->pending_job--;
|
||||
|
Loading…
Reference in New Issue
Block a user