Skip to content

Commit

Permalink
Merge tag 'migration-20230316-pull-request' of https://gitlab.com/jua…
Browse files Browse the repository at this point in the history
…n.quintela/qemu into staging

Migration Pull request

Hi

This is just fixes for migration.
- Fix rdma (dave)
- Remove unused variable (Zhijian)
- Fix AVX512 and XBZRLE (Matheus)
- Fix migration preempt (Peter)
- Fix populate_vfio_info (Steve)
- Fix multifd send trace (Wei)

Please apply.

Later, Juan.

# -----BEGIN PGP SIGNATURE-----
#
# iQIzBAABCAAdFiEEGJn/jt6/WMzuA0uC9IfvGFhy1yMFAmQTMa0ACgkQ9IfvGFhy
# 1yMKCBAAyHcE4TO3NrFpG87nGbLhr1zjXkLEKGuAA/E6NKKrf+OrSV2Wq0aBEO/B
# +yAAiXEPsjheh7gwS8FkgAgIj6PwRTtlKae/Tr0JtraukxYT4qzubkaw3X2VjEwf
# uJ8/I+BZOLBUxlZHYoyDP4CWX7elEMlzKdcShcpJCLTgLjxFXjQ9lZwQBgu51cF2
# YitYRDMsVMr77y20eTqCUrLPcSgTM+8h3PtdyDRH2D+KF1IEkjGmSuF8lBc2WiN+
# BiuW6RlaLjhQiBuWNbkrjdulArnim9qhIT5didJuE7p9L50WFSqZs3EV7a4fJjUl
# 1TWJ4k/fzcYf5GF1ypVBrZ1WWCsyJe/fd8ZddGyz9Xpu6Ml7BevVA+0oGeBDYaDB
# T7o2TrHzz2vYCl20jwPbUeafjN8MppBdtHaJ2pP0nA3cPZHPziU2BE9D2/AUxMib
# ICrNe+nVqXUKqx8qZrRPzIBsnoAgmhkNC/k8T7VEhfmm+s6C+xEE0eyhE299TYJn
# ETpQCqiDPCDlkC8iL3OAd8Nn8kucT7EL7qcV2PcpWxgKPc7mCCNIHdpfpM2aZduJ
# 0S/m19ICS8PSWSjFpSK2/vKLOyjA1PKA869iXFD+OOPb8jY5piTYOrj1gowkRjMx
# JOOVDX04lBxbgUVaZnC+iLuh/ZlMRFv2GFAHIk66XDsmUOzRddI=
# =Lwbm
# -----END PGP SIGNATURE-----
# gpg: Signature made Thu 16 Mar 2023 15:11:41 GMT
# gpg:                using RSA key 1899FF8EDEBF58CCEE034B82F487EF185872D723
# gpg: Good signature from "Juan Quintela <quintela@redhat.com>" [full]
# gpg:                 aka "Juan Quintela <quintela@trasno.org>" [full]
# Primary key fingerprint: 1899 FF8E DEBF 58CC EE03  4B82 F487 EF18 5872 D723

* tag 'migration-20230316-pull-request' of https://gitlab.com/juan.quintela/qemu:
  migration: fix populate_vfio_info
  migration/multifd: correct multifd_send_thread to trace the flags
  migration/rdma: Remove deprecated variable rdma_return_path
  migration/xbzrle: fix out-of-bounds write with axv512
  migration/xbzrle: use ctz64 to avoid undefined result
  migration/rdma: Fix return-path case
  migration: Wait on preempt channel in preempt thread

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
  • Loading branch information
pm215 committed Mar 16, 2023
2 parents ca80500 + fa76c85 commit 53b90ae
Show file tree
Hide file tree
Showing 5 changed files with 21 additions and 18 deletions.
3 changes: 2 additions & 1 deletion migration/multifd.c
Original file line number Diff line number Diff line change
Expand Up @@ -677,7 +677,7 @@ static void *multifd_send_thread(void *opaque)

if (p->pending_job) {
uint64_t packet_num = p->packet_num;
uint32_t flags = p->flags;
uint32_t flags;
p->normal_num = 0;

if (use_zero_copy_send) {
Expand All @@ -699,6 +699,7 @@ static void *multifd_send_thread(void *opaque)
}
}
multifd_send_fill_packet(p);
flags = p->flags;
p->flags = 0;
p->num_packets++;
p->total_normal_pages += p->normal_num;
Expand Down
11 changes: 6 additions & 5 deletions migration/postcopy-ram.c
Original file line number Diff line number Diff line change
Expand Up @@ -1197,11 +1197,6 @@ int postcopy_ram_incoming_setup(MigrationIncomingState *mis)
}

if (migrate_postcopy_preempt()) {
/*
* The preempt channel is established in asynchronous way. Wait
* for its completion.
*/
qemu_sem_wait(&mis->postcopy_qemufile_dst_done);
/*
* This thread needs to be created after the temp pages because
* it'll fetch RAM_CHANNEL_POSTCOPY PostcopyTmpPage immediately.
Expand Down Expand Up @@ -1668,6 +1663,12 @@ void *postcopy_preempt_thread(void *opaque)

qemu_sem_post(&mis->thread_sync_sem);

/*
* The preempt channel is established in asynchronous way. Wait
* for its completion.
*/
qemu_sem_wait(&mis->postcopy_qemufile_dst_done);

/* Sending RAM_SAVE_FLAG_EOS to terminate this thread */
qemu_mutex_lock(&mis->postcopy_prio_thread_mutex);
while (1) {
Expand Down
11 changes: 6 additions & 5 deletions migration/rdma.c
Original file line number Diff line number Diff line change
Expand Up @@ -3373,7 +3373,8 @@ static int qemu_rdma_accept(RDMAContext *rdma)
* initialize the RDMAContext for return path for postcopy after first
* connection request reached.
*/
if (migrate_postcopy() && !rdma->is_return_path) {
if ((migrate_postcopy() || migrate_use_return_path())
&& !rdma->is_return_path) {
rdma_return_path = qemu_rdma_data_init(rdma->host_port, NULL);
if (rdma_return_path == NULL) {
rdma_ack_cm_event(cm_event);
Expand Down Expand Up @@ -3455,7 +3456,8 @@ static int qemu_rdma_accept(RDMAContext *rdma)
}

/* Accept the second connection request for return path */
if (migrate_postcopy() && !rdma->is_return_path) {
if ((migrate_postcopy() || migrate_use_return_path())
&& !rdma->is_return_path) {
qemu_set_fd_handler(rdma->channel->fd, rdma_accept_incoming_migration,
NULL,
(void *)(intptr_t)rdma->return_path);
Expand Down Expand Up @@ -4109,7 +4111,7 @@ static void rdma_accept_incoming_migration(void *opaque)
void rdma_start_incoming_migration(const char *host_port, Error **errp)
{
int ret;
RDMAContext *rdma, *rdma_return_path = NULL;
RDMAContext *rdma;
Error *local_err = NULL;

trace_rdma_start_incoming_migration();
Expand Down Expand Up @@ -4155,7 +4157,6 @@ void rdma_start_incoming_migration(const char *host_port, Error **errp)
g_free(rdma->host_port);
}
g_free(rdma);
g_free(rdma_return_path);
}

void rdma_start_outgoing_migration(void *opaque,
Expand Down Expand Up @@ -4192,7 +4193,7 @@ void rdma_start_outgoing_migration(void *opaque,
}

/* RDMA postcopy need a separate queue pair for return path */
if (migrate_postcopy()) {
if (migrate_postcopy() || migrate_use_return_path()) {
rdma_return_path = qemu_rdma_data_init(host_port, errp);

if (rdma_return_path == NULL) {
Expand Down
2 changes: 1 addition & 1 deletion migration/target.c
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
#include "qemu/osdep.h"
#include "qapi/qapi-types-migration.h"
#include "migration.h"
#include CONFIG_DEVICES

#ifdef CONFIG_VFIO
#include "hw/vfio/vfio-common.h"
Expand All @@ -17,7 +18,6 @@ void populate_vfio_info(MigrationInfo *info)
{
#ifdef CONFIG_VFIO
if (vfio_mig_active()) {
info->has_vfio = true;
info->vfio = g_malloc0(sizeof(*info->vfio));
info->vfio->transferred = vfio_mig_bytes_transferred();
}
Expand Down
12 changes: 6 additions & 6 deletions migration/xbzrle.c
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
*/
#include "qemu/osdep.h"
#include "qemu/cutils.h"
#include "qemu/host-utils.h"
#include "xbzrle.h"

/*
Expand Down Expand Up @@ -196,10 +197,6 @@ int xbzrle_encode_buffer_avx512(uint8_t *old_buf, uint8_t *new_buf, int slen,
__m512i r = _mm512_set1_epi32(0);

while (count512s) {
if (d + 2 > dlen) {
return -1;
}

int bytes_to_check = 64;
uint64_t mask = 0xffffffffffffffff;
if (count512s == 1) {
Expand All @@ -215,6 +212,9 @@ int xbzrle_encode_buffer_avx512(uint8_t *old_buf, uint8_t *new_buf, int slen,

bool is_same = (comp & 0x1);
while (bytes_to_check) {
if (d + 2 > dlen) {
return -1;
}
if (is_same) {
if (nzrun_len) {
d += uleb128_encode_small(dst + d, nzrun_len);
Expand All @@ -233,7 +233,7 @@ int xbzrle_encode_buffer_avx512(uint8_t *old_buf, uint8_t *new_buf, int slen,
break;
}
never_same = false;
num = __builtin_ctzll(~comp);
num = ctz64(~comp);
num = (num < bytes_to_check) ? num : bytes_to_check;
zrun_len += num;
bytes_to_check -= num;
Expand Down Expand Up @@ -262,7 +262,7 @@ int xbzrle_encode_buffer_avx512(uint8_t *old_buf, uint8_t *new_buf, int slen,
nzrun_len += 64;
break;
}
num = __builtin_ctzll(comp);
num = ctz64(comp);
num = (num < bytes_to_check) ? num : bytes_to_check;
nzrun_len += num;
bytes_to_check -= num;
Expand Down

0 comments on commit 53b90ae

Please sign in to comment.