qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [PULL 0/6] migration + virtiofsd queue
@ 2021-04-07 10:20 Dr. David Alan Gilbert (git)
  2021-04-07 10:20 ` [PULL 1/6] virtiofsd: Fix security.capability comparison Dr. David Alan Gilbert (git)
                   ` (6 more replies)
  0 siblings, 7 replies; 13+ messages in thread
From: Dr. David Alan Gilbert (git) @ 2021-04-07 10:20 UTC (permalink / raw)
  To: qemu-devel, andrey.gruzdev, huangy81

From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>

The following changes since commit d0d3dd401b70168a353450e031727affee828527:

  Update version for v6.0.0-rc2 release (2021-04-06 18:34:34 +0100)

are available in the Git repository at:

  git://github.com/dagrh/qemu.git tags/pull-migration-20210407a

for you to fetch changes up to c4e232bb57aca19ca60f692ee830023a76eca78e:

  tests/migration: fix parameter of auto-converge migration (2021-04-06 18:56:02 +0100)

----------------------------------------------------------------
migration+virtiofs fixes pull 2021-04-07

A seg fix in virtiofsd, a bunch of fixes for background snapshots, and
a migration test fix.

Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>

----------------------------------------------------------------
Andrey Gruzdev (4):
      migration: Fix missing qemu_fflush() on buffer file in bg_migration_thread
      migration: Inhibit virtio-balloon for the duration of background snapshot
      migration: Pre-fault memory before starting background snasphot
      migration: Rename 'bs' to 'block' in background snapshot code

Dr. David Alan Gilbert (1):
      virtiofsd: Fix security.capability comparison

Hyman Huang(黄勇) (1):
      tests/migration: fix parameter of auto-converge migration

 hw/virtio/virtio-balloon.c          |   8 ++-
 include/migration/misc.h            |   2 +
 migration/migration.c               |  22 ++++++-
 migration/ram.c                     | 119 +++++++++++++++++++++++++-----------
 migration/ram.h                     |   1 +
 tests/migration/guestperf/engine.py |   4 +-
 tools/virtiofsd/passthrough_ll.c    |   3 +-
 7 files changed, 119 insertions(+), 40 deletions(-)



^ permalink raw reply	[flat|nested] 13+ messages in thread

* [PULL 1/6] virtiofsd: Fix security.capability comparison
  2021-04-07 10:20 [PULL 0/6] migration + virtiofsd queue Dr. David Alan Gilbert (git)
@ 2021-04-07 10:20 ` Dr. David Alan Gilbert (git)
  2021-04-07 10:20 ` [PULL 2/6] migration: Fix missing qemu_fflush() on buffer file in bg_migration_thread Dr. David Alan Gilbert (git)
                   ` (5 subsequent siblings)
  6 siblings, 0 replies; 13+ messages in thread
From: Dr. David Alan Gilbert (git) @ 2021-04-07 10:20 UTC (permalink / raw)
  To: qemu-devel, andrey.gruzdev, huangy81

From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>

My security fix for the security.capability remap has a silly early
segfault in a simple case where there is an xattrmapping but it doesn't
remap the security.capability.

Fixes: e586edcb41054 ("virtiofs: drop remapped security.capability xattr as needed")
Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
Message-Id: <20210401145845.78445-1-dgilbert@redhat.com>
Reviewed-by: Connor Kuehl <ckuehl@redhat.com>
Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
---
 tools/virtiofsd/passthrough_ll.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/tools/virtiofsd/passthrough_ll.c b/tools/virtiofsd/passthrough_ll.c
index b144320e48..1553d2ef45 100644
--- a/tools/virtiofsd/passthrough_ll.c
+++ b/tools/virtiofsd/passthrough_ll.c
@@ -2636,7 +2636,8 @@ static void parse_xattrmap(struct lo_data *lo)
                 strerror(ret));
         exit(1);
     }
-    if (!strcmp(lo->xattr_security_capability, "security.capability")) {
+    if (!lo->xattr_security_capability ||
+        !strcmp(lo->xattr_security_capability, "security.capability")) {
         /* 1-1 mapping, don't need to do anything */
         free(lo->xattr_security_capability);
         lo->xattr_security_capability = NULL;
-- 
2.31.1



^ permalink raw reply	[flat|nested] 13+ messages in thread

* [PULL 2/6] migration: Fix missing qemu_fflush() on buffer file in bg_migration_thread
  2021-04-07 10:20 [PULL 0/6] migration + virtiofsd queue Dr. David Alan Gilbert (git)
  2021-04-07 10:20 ` [PULL 1/6] virtiofsd: Fix security.capability comparison Dr. David Alan Gilbert (git)
@ 2021-04-07 10:20 ` Dr. David Alan Gilbert (git)
  2021-04-07 10:20 ` [PULL 3/6] migration: Inhibit virtio-balloon for the duration of background snapshot Dr. David Alan Gilbert (git)
                   ` (4 subsequent siblings)
  6 siblings, 0 replies; 13+ messages in thread
From: Dr. David Alan Gilbert (git) @ 2021-04-07 10:20 UTC (permalink / raw)
  To: qemu-devel, andrey.gruzdev, huangy81

From: Andrey Gruzdev <andrey.gruzdev@virtuozzo.com>

Added missing qemu_fflush() on buffer file holding precopy device state.
Increased initial QIOChannelBuffer allocation to 512KB to avoid reallocs.
Typical configurations often require >200KB for device state and VMDESC.

Fixes: 8518278a6af589ccc401f06e35f171b1e6fae800 (migration: implementation
  of background snapshot thread)
Signed-off-by: Andrey Gruzdev <andrey.gruzdev@virtuozzo.com>
Message-Id: <20210401092226.102804-2-andrey.gruzdev@virtuozzo.com>
Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
---
 migration/migration.c | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/migration/migration.c b/migration/migration.c
index ca8b97baa5..00e13f9d58 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -3812,7 +3812,7 @@ static void *bg_migration_thread(void *opaque)
      * with vCPUs running and, finally, write stashed non-RAM part of
      * the vmstate from the buffer to the migration stream.
      */
-    s->bioc = qio_channel_buffer_new(128 * 1024);
+    s->bioc = qio_channel_buffer_new(512 * 1024);
     qio_channel_set_name(QIO_CHANNEL(s->bioc), "vmstate-buffer");
     fb = qemu_fopen_channel_output(QIO_CHANNEL(s->bioc));
     object_unref(OBJECT(s->bioc));
@@ -3866,6 +3866,12 @@ static void *bg_migration_thread(void *opaque)
     if (qemu_savevm_state_complete_precopy_non_iterable(fb, false, false)) {
         goto fail;
     }
+    /*
+     * Since we are going to get non-iterable state data directly
+     * from s->bioc->data, explicit flush is needed here.
+     */
+    qemu_fflush(fb);
+
     /* Now initialize UFFD context and start tracking RAM writes */
     if (ram_write_tracking_start()) {
         goto fail;
-- 
2.31.1



^ permalink raw reply	[flat|nested] 13+ messages in thread

* [PULL 3/6] migration: Inhibit virtio-balloon for the duration of background snapshot
  2021-04-07 10:20 [PULL 0/6] migration + virtiofsd queue Dr. David Alan Gilbert (git)
  2021-04-07 10:20 ` [PULL 1/6] virtiofsd: Fix security.capability comparison Dr. David Alan Gilbert (git)
  2021-04-07 10:20 ` [PULL 2/6] migration: Fix missing qemu_fflush() on buffer file in bg_migration_thread Dr. David Alan Gilbert (git)
@ 2021-04-07 10:20 ` Dr. David Alan Gilbert (git)
  2021-04-07 10:20 ` [PULL 4/6] migration: Pre-fault memory before starting background snasphot Dr. David Alan Gilbert (git)
                   ` (3 subsequent siblings)
  6 siblings, 0 replies; 13+ messages in thread
From: Dr. David Alan Gilbert (git) @ 2021-04-07 10:20 UTC (permalink / raw)
  To: qemu-devel, andrey.gruzdev, huangy81

From: Andrey Gruzdev <andrey.gruzdev@virtuozzo.com>

The same thing as for incoming postcopy - we cannot deal with concurrent
RAM discards when using background snapshot feature in outgoing migration.

Fixes: 8518278a6af589ccc401f06e35f171b1e6fae800 (migration: implementation
  of background snapshot thread)
Signed-off-by: Andrey Gruzdev <andrey.gruzdev@virtuozzo.com>
Reported-by: David Hildenbrand <david@redhat.com>
Reviewed-by: David Hildenbrand <david@redhat.com>
Message-Id: <20210401092226.102804-3-andrey.gruzdev@virtuozzo.com>
Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
---
 hw/virtio/virtio-balloon.c | 8 ++++++--
 include/migration/misc.h   | 2 ++
 migration/migration.c      | 8 ++++++++
 3 files changed, 16 insertions(+), 2 deletions(-)

diff --git a/hw/virtio/virtio-balloon.c b/hw/virtio/virtio-balloon.c
index e770955176..d120bf8f43 100644
--- a/hw/virtio/virtio-balloon.c
+++ b/hw/virtio/virtio-balloon.c
@@ -66,8 +66,12 @@ static bool virtio_balloon_pbp_matches(PartiallyBalloonedPage *pbp,
 
 static bool virtio_balloon_inhibited(void)
 {
-    /* Postcopy cannot deal with concurrent discards, so it's special. */
-    return ram_block_discard_is_disabled() || migration_in_incoming_postcopy();
+    /*
+     * Postcopy cannot deal with concurrent discards,
+     * so it's special, as well as background snapshots.
+     */
+    return ram_block_discard_is_disabled() || migration_in_incoming_postcopy() ||
+            migration_in_bg_snapshot();
 }
 
 static void balloon_inflate_page(VirtIOBalloon *balloon,
diff --git a/include/migration/misc.h b/include/migration/misc.h
index bccc1b6b44..738675ef52 100644
--- a/include/migration/misc.h
+++ b/include/migration/misc.h
@@ -70,6 +70,8 @@ bool migration_in_postcopy_after_devices(MigrationState *);
 void migration_global_dump(Monitor *mon);
 /* True if incomming migration entered POSTCOPY_INCOMING_DISCARD */
 bool migration_in_incoming_postcopy(void);
+/* True if background snapshot is active */
+bool migration_in_bg_snapshot(void);
 
 /* migration/block-dirty-bitmap.c */
 void dirty_bitmap_mig_init(void);
diff --git a/migration/migration.c b/migration/migration.c
index 00e13f9d58..be4729e7c8 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -1976,6 +1976,14 @@ bool migration_in_incoming_postcopy(void)
     return ps >= POSTCOPY_INCOMING_DISCARD && ps < POSTCOPY_INCOMING_END;
 }
 
+bool migration_in_bg_snapshot(void)
+{
+    MigrationState *s = migrate_get_current();
+
+    return migrate_background_snapshot() &&
+            migration_is_setup_or_active(s->state);
+}
+
 bool migration_is_idle(void)
 {
     MigrationState *s = current_migration;
-- 
2.31.1



^ permalink raw reply	[flat|nested] 13+ messages in thread

* [PULL 4/6] migration: Pre-fault memory before starting background snasphot
  2021-04-07 10:20 [PULL 0/6] migration + virtiofsd queue Dr. David Alan Gilbert (git)
                   ` (2 preceding siblings ...)
  2021-04-07 10:20 ` [PULL 3/6] migration: Inhibit virtio-balloon for the duration of background snapshot Dr. David Alan Gilbert (git)
@ 2021-04-07 10:20 ` Dr. David Alan Gilbert (git)
  2021-04-07 10:20 ` [PULL 5/6] migration: Rename 'bs' to 'block' in background snapshot code Dr. David Alan Gilbert (git)
                   ` (2 subsequent siblings)
  6 siblings, 0 replies; 13+ messages in thread
From: Dr. David Alan Gilbert (git) @ 2021-04-07 10:20 UTC (permalink / raw)
  To: qemu-devel, andrey.gruzdev, huangy81

From: Andrey Gruzdev <andrey.gruzdev@virtuozzo.com>

This commit solves the issue with userfault_fd WP feature that
background snapshot is based on. For any never poluated or discarded
memory page, the UFFDIO_WRITEPROTECT ioctl() would skip updating
PTE for that page, thereby loosing WP setting for it.

So we need to pre-fault pages for each RAM block to be protected
before making a userfault_fd wr-protect ioctl().

Fixes: 278e2f551a095b234de74dca9c214d5502a1f72c (migration: support
  UFFD write fault processing in ram_save_iterate())
Signed-off-by: Andrey Gruzdev <andrey.gruzdev@virtuozzo.com>
Reported-by: David Hildenbrand <david@redhat.com>
Reviewed-by: David Hildenbrand <david@redhat.com>
Message-Id: <20210401092226.102804-4-andrey.gruzdev@virtuozzo.com>
Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
---
 migration/migration.c |  6 ++++++
 migration/ram.c       | 49 +++++++++++++++++++++++++++++++++++++++++++
 migration/ram.h       |  1 +
 3 files changed, 56 insertions(+)

diff --git a/migration/migration.c b/migration/migration.c
index be4729e7c8..71bce15a1b 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -3827,6 +3827,12 @@ static void *bg_migration_thread(void *opaque)
 
     update_iteration_initial_status(s);
 
+    /*
+     * Prepare for tracking memory writes with UFFD-WP - populate
+     * RAM pages before protecting.
+     */
+    ram_write_tracking_prepare();
+
     qemu_savevm_state_header(s->to_dst_file);
     qemu_savevm_state_setup(s->to_dst_file);
 
diff --git a/migration/ram.c b/migration/ram.c
index 40e78952ad..7e2bc0fdd3 100644
--- a/migration/ram.c
+++ b/migration/ram.c
@@ -1560,6 +1560,55 @@ out:
     return ret;
 }
 
+/*
+ * ram_block_populate_pages: populate memory in the RAM block by reading
+ *   an integer from the beginning of each page.
+ *
+ * Since it's solely used for userfault_fd WP feature, here we just
+ *   hardcode page size to qemu_real_host_page_size.
+ *
+ * @bs: RAM block to populate
+ */
+static void ram_block_populate_pages(RAMBlock *bs)
+{
+    char *ptr = (char *) bs->host;
+
+    for (ram_addr_t offset = 0; offset < bs->used_length;
+            offset += qemu_real_host_page_size) {
+        char tmp = *(ptr + offset);
+
+        /* Don't optimize the read out */
+        asm volatile("" : "+r" (tmp));
+    }
+}
+
+/*
+ * ram_write_tracking_prepare: prepare for UFFD-WP memory tracking
+ */
+void ram_write_tracking_prepare(void)
+{
+    RAMBlock *bs;
+
+    RCU_READ_LOCK_GUARD();
+
+    RAMBLOCK_FOREACH_NOT_IGNORED(bs) {
+        /* Nothing to do with read-only and MMIO-writable regions */
+        if (bs->mr->readonly || bs->mr->rom_device) {
+            continue;
+        }
+
+        /*
+         * Populate pages of the RAM block before enabling userfault_fd
+         * write protection.
+         *
+         * This stage is required since ioctl(UFFDIO_WRITEPROTECT) with
+         * UFFDIO_WRITEPROTECT_MODE_WP mode setting would silently skip
+         * pages with pte_none() entries in page table.
+         */
+        ram_block_populate_pages(bs);
+    }
+}
+
 /*
  * ram_write_tracking_start: start UFFD-WP memory tracking
  *
diff --git a/migration/ram.h b/migration/ram.h
index 6378bb3ebc..4833e9fd5b 100644
--- a/migration/ram.h
+++ b/migration/ram.h
@@ -82,6 +82,7 @@ void colo_incoming_start_dirty_log(void);
 /* Background snapshot */
 bool ram_write_tracking_available(void);
 bool ram_write_tracking_compatible(void);
+void ram_write_tracking_prepare(void);
 int ram_write_tracking_start(void);
 void ram_write_tracking_stop(void);
 
-- 
2.31.1



^ permalink raw reply	[flat|nested] 13+ messages in thread

* [PULL 5/6] migration: Rename 'bs' to 'block' in background snapshot code
  2021-04-07 10:20 [PULL 0/6] migration + virtiofsd queue Dr. David Alan Gilbert (git)
                   ` (3 preceding siblings ...)
  2021-04-07 10:20 ` [PULL 4/6] migration: Pre-fault memory before starting background snasphot Dr. David Alan Gilbert (git)
@ 2021-04-07 10:20 ` Dr. David Alan Gilbert (git)
  2021-04-07 10:20 ` [PULL 6/6] tests/migration: fix parameter of auto-converge migration Dr. David Alan Gilbert (git)
  2021-04-07 13:25 ` [PULL 0/6] migration + virtiofsd queue Peter Maydell
  6 siblings, 0 replies; 13+ messages in thread
From: Dr. David Alan Gilbert (git) @ 2021-04-07 10:20 UTC (permalink / raw)
  To: qemu-devel, andrey.gruzdev, huangy81

From: Andrey Gruzdev <andrey.gruzdev@virtuozzo.com>

Rename 'bs' to commonly used 'block' in migration/ram.c background
snapshot code.

Signed-off-by: Andrey Gruzdev <andrey.gruzdev@virtuozzo.com>
Reported-by: David Hildenbrand <david@redhat.com>
Message-Id: <20210401092226.102804-5-andrey.gruzdev@virtuozzo.com>
Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
---
 migration/ram.c | 86 +++++++++++++++++++++++++------------------------
 1 file changed, 44 insertions(+), 42 deletions(-)

diff --git a/migration/ram.c b/migration/ram.c
index 7e2bc0fdd3..4682f3625c 100644
--- a/migration/ram.c
+++ b/migration/ram.c
@@ -1455,7 +1455,7 @@ static RAMBlock *poll_fault_page(RAMState *rs, ram_addr_t *offset)
 {
     struct uffd_msg uffd_msg;
     void *page_address;
-    RAMBlock *bs;
+    RAMBlock *block;
     int res;
 
     if (!migrate_background_snapshot()) {
@@ -1468,9 +1468,9 @@ static RAMBlock *poll_fault_page(RAMState *rs, ram_addr_t *offset)
     }
 
     page_address = (void *)(uintptr_t) uffd_msg.arg.pagefault.address;
-    bs = qemu_ram_block_from_host(page_address, false, offset);
-    assert(bs && (bs->flags & RAM_UF_WRITEPROTECT) != 0);
-    return bs;
+    block = qemu_ram_block_from_host(page_address, false, offset);
+    assert(block && (block->flags & RAM_UF_WRITEPROTECT) != 0);
+    return block;
 }
 
 /**
@@ -1526,7 +1526,7 @@ bool ram_write_tracking_compatible(void)
 {
     const uint64_t uffd_ioctls_mask = BIT(_UFFDIO_WRITEPROTECT);
     int uffd_fd;
-    RAMBlock *bs;
+    RAMBlock *block;
     bool ret = false;
 
     /* Open UFFD file descriptor */
@@ -1537,15 +1537,15 @@ bool ram_write_tracking_compatible(void)
 
     RCU_READ_LOCK_GUARD();
 
-    RAMBLOCK_FOREACH_NOT_IGNORED(bs) {
+    RAMBLOCK_FOREACH_NOT_IGNORED(block) {
         uint64_t uffd_ioctls;
 
         /* Nothing to do with read-only and MMIO-writable regions */
-        if (bs->mr->readonly || bs->mr->rom_device) {
+        if (block->mr->readonly || block->mr->rom_device) {
             continue;
         }
         /* Try to register block memory via UFFD-IO to track writes */
-        if (uffd_register_memory(uffd_fd, bs->host, bs->max_length,
+        if (uffd_register_memory(uffd_fd, block->host, block->max_length,
                 UFFDIO_REGISTER_MODE_WP, &uffd_ioctls)) {
             goto out;
         }
@@ -1567,13 +1567,13 @@ out:
  * Since it's solely used for userfault_fd WP feature, here we just
  *   hardcode page size to qemu_real_host_page_size.
  *
- * @bs: RAM block to populate
+ * @block: RAM block to populate
  */
-static void ram_block_populate_pages(RAMBlock *bs)
+static void ram_block_populate_pages(RAMBlock *block)
 {
-    char *ptr = (char *) bs->host;
+    char *ptr = (char *) block->host;
 
-    for (ram_addr_t offset = 0; offset < bs->used_length;
+    for (ram_addr_t offset = 0; offset < block->used_length;
             offset += qemu_real_host_page_size) {
         char tmp = *(ptr + offset);
 
@@ -1587,13 +1587,13 @@ static void ram_block_populate_pages(RAMBlock *bs)
  */
 void ram_write_tracking_prepare(void)
 {
-    RAMBlock *bs;
+    RAMBlock *block;
 
     RCU_READ_LOCK_GUARD();
 
-    RAMBLOCK_FOREACH_NOT_IGNORED(bs) {
+    RAMBLOCK_FOREACH_NOT_IGNORED(block) {
         /* Nothing to do with read-only and MMIO-writable regions */
-        if (bs->mr->readonly || bs->mr->rom_device) {
+        if (block->mr->readonly || block->mr->rom_device) {
             continue;
         }
 
@@ -1605,7 +1605,7 @@ void ram_write_tracking_prepare(void)
          * UFFDIO_WRITEPROTECT_MODE_WP mode setting would silently skip
          * pages with pte_none() entries in page table.
          */
-        ram_block_populate_pages(bs);
+        ram_block_populate_pages(block);
     }
 }
 
@@ -1618,7 +1618,7 @@ int ram_write_tracking_start(void)
 {
     int uffd_fd;
     RAMState *rs = ram_state;
-    RAMBlock *bs;
+    RAMBlock *block;
 
     /* Open UFFD file descriptor */
     uffd_fd = uffd_create_fd(UFFD_FEATURE_PAGEFAULT_FLAG_WP, true);
@@ -1629,27 +1629,27 @@ int ram_write_tracking_start(void)
 
     RCU_READ_LOCK_GUARD();
 
-    RAMBLOCK_FOREACH_NOT_IGNORED(bs) {
+    RAMBLOCK_FOREACH_NOT_IGNORED(block) {
         /* Nothing to do with read-only and MMIO-writable regions */
-        if (bs->mr->readonly || bs->mr->rom_device) {
+        if (block->mr->readonly || block->mr->rom_device) {
             continue;
         }
 
         /* Register block memory with UFFD to track writes */
-        if (uffd_register_memory(rs->uffdio_fd, bs->host,
-                bs->max_length, UFFDIO_REGISTER_MODE_WP, NULL)) {
+        if (uffd_register_memory(rs->uffdio_fd, block->host,
+                block->max_length, UFFDIO_REGISTER_MODE_WP, NULL)) {
             goto fail;
         }
         /* Apply UFFD write protection to the block memory range */
-        if (uffd_change_protection(rs->uffdio_fd, bs->host,
-                bs->max_length, true, false)) {
+        if (uffd_change_protection(rs->uffdio_fd, block->host,
+                block->max_length, true, false)) {
             goto fail;
         }
-        bs->flags |= RAM_UF_WRITEPROTECT;
-        memory_region_ref(bs->mr);
+        block->flags |= RAM_UF_WRITEPROTECT;
+        memory_region_ref(block->mr);
 
-        trace_ram_write_tracking_ramblock_start(bs->idstr, bs->page_size,
-                bs->host, bs->max_length);
+        trace_ram_write_tracking_ramblock_start(block->idstr, block->page_size,
+                block->host, block->max_length);
     }
 
     return 0;
@@ -1657,19 +1657,20 @@ int ram_write_tracking_start(void)
 fail:
     error_report("ram_write_tracking_start() failed: restoring initial memory state");
 
-    RAMBLOCK_FOREACH_NOT_IGNORED(bs) {
-        if ((bs->flags & RAM_UF_WRITEPROTECT) == 0) {
+    RAMBLOCK_FOREACH_NOT_IGNORED(block) {
+        if ((block->flags & RAM_UF_WRITEPROTECT) == 0) {
             continue;
         }
         /*
          * In case some memory block failed to be write-protected
          * remove protection and unregister all succeeded RAM blocks
          */
-        uffd_change_protection(rs->uffdio_fd, bs->host, bs->max_length, false, false);
-        uffd_unregister_memory(rs->uffdio_fd, bs->host, bs->max_length);
+        uffd_change_protection(rs->uffdio_fd, block->host, block->max_length,
+                false, false);
+        uffd_unregister_memory(rs->uffdio_fd, block->host, block->max_length);
         /* Cleanup flags and remove reference */
-        bs->flags &= ~RAM_UF_WRITEPROTECT;
-        memory_region_unref(bs->mr);
+        block->flags &= ~RAM_UF_WRITEPROTECT;
+        memory_region_unref(block->mr);
     }
 
     uffd_close_fd(uffd_fd);
@@ -1683,24 +1684,25 @@ fail:
 void ram_write_tracking_stop(void)
 {
     RAMState *rs = ram_state;
-    RAMBlock *bs;
+    RAMBlock *block;
 
     RCU_READ_LOCK_GUARD();
 
-    RAMBLOCK_FOREACH_NOT_IGNORED(bs) {
-        if ((bs->flags & RAM_UF_WRITEPROTECT) == 0) {
+    RAMBLOCK_FOREACH_NOT_IGNORED(block) {
+        if ((block->flags & RAM_UF_WRITEPROTECT) == 0) {
             continue;
         }
         /* Remove protection and unregister all affected RAM blocks */
-        uffd_change_protection(rs->uffdio_fd, bs->host, bs->max_length, false, false);
-        uffd_unregister_memory(rs->uffdio_fd, bs->host, bs->max_length);
+        uffd_change_protection(rs->uffdio_fd, block->host, block->max_length,
+                false, false);
+        uffd_unregister_memory(rs->uffdio_fd, block->host, block->max_length);
 
-        trace_ram_write_tracking_ramblock_stop(bs->idstr, bs->page_size,
-                bs->host, bs->max_length);
+        trace_ram_write_tracking_ramblock_stop(block->idstr, block->page_size,
+                block->host, block->max_length);
 
         /* Cleanup flags and remove reference */
-        bs->flags &= ~RAM_UF_WRITEPROTECT;
-        memory_region_unref(bs->mr);
+        block->flags &= ~RAM_UF_WRITEPROTECT;
+        memory_region_unref(block->mr);
     }
 
     /* Finally close UFFD file descriptor */
-- 
2.31.1



^ permalink raw reply	[flat|nested] 13+ messages in thread

* [PULL 6/6] tests/migration: fix parameter of auto-converge migration
  2021-04-07 10:20 [PULL 0/6] migration + virtiofsd queue Dr. David Alan Gilbert (git)
                   ` (4 preceding siblings ...)
  2021-04-07 10:20 ` [PULL 5/6] migration: Rename 'bs' to 'block' in background snapshot code Dr. David Alan Gilbert (git)
@ 2021-04-07 10:20 ` Dr. David Alan Gilbert (git)
  2021-04-07 13:25 ` [PULL 0/6] migration + virtiofsd queue Peter Maydell
  6 siblings, 0 replies; 13+ messages in thread
From: Dr. David Alan Gilbert (git) @ 2021-04-07 10:20 UTC (permalink / raw)
  To: qemu-devel, andrey.gruzdev, huangy81

From: Hyman Huang(黄勇) <huangy81@chinatelecom.cn>

when execute the following test command:
$ ./guestperf-batch.py --auto-converge \
    --auto-converge-step {percent} ...
test aborts and error message be throwed as the following:
"Parameter 'x-cpu-throttle-increment' is unexpected"

The reason is that 'x-cpu-throttle-increment' has been
deprecated and 'cpu-throttle-increment' was introduced
Since v2.7. Use the new parameter instead.

Signed-off-by: Hyman Huang(黄勇) <huangy81@chinatelecom.cn>
Message-Id: <0195d34a317ce3cc417b3efd275e30cad35a7618.1616513998.git.huangy81@chinatelecom.cn>
Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
---
 tests/migration/guestperf/engine.py | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/tests/migration/guestperf/engine.py b/tests/migration/guestperf/engine.py
index e399447940..6b49aed579 100644
--- a/tests/migration/guestperf/engine.py
+++ b/tests/migration/guestperf/engine.py
@@ -102,7 +102,7 @@ def _migrate_progress(self, vm):
             info.get("downtime", 0),
             info.get("expected-downtime", 0),
             info.get("setup-time", 0),
-            info.get("x-cpu-throttle-percentage", 0),
+            info.get("cpu-throttle-percentage", 0),
         )
 
     def _migrate(self, hardware, scenario, src, dst, connect_uri):
@@ -135,7 +135,7 @@ def _migrate(self, hardware, scenario, src, dst, connect_uri):
                                      "state": True }
                                ])
             resp = src.command("migrate-set-parameters",
-                               x_cpu_throttle_increment=scenario._auto_converge_step)
+                               cpu_throttle_increment=scenario._auto_converge_step)
 
         if scenario._post_copy:
             resp = src.command("migrate-set-capabilities",
-- 
2.31.1



^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PULL 0/6] migration + virtiofsd queue
  2021-04-07 10:20 [PULL 0/6] migration + virtiofsd queue Dr. David Alan Gilbert (git)
                   ` (5 preceding siblings ...)
  2021-04-07 10:20 ` [PULL 6/6] tests/migration: fix parameter of auto-converge migration Dr. David Alan Gilbert (git)
@ 2021-04-07 13:25 ` Peter Maydell
  2021-04-07 16:50   ` Dr. David Alan Gilbert
  6 siblings, 1 reply; 13+ messages in thread
From: Peter Maydell @ 2021-04-07 13:25 UTC (permalink / raw)
  To: Dr. David Alan Gilbert (git); +Cc: huangy81, QEMU Developers, andrey.gruzdev

On Wed, 7 Apr 2021 at 11:22, Dr. David Alan Gilbert (git)
<dgilbert@redhat.com> wrote:
>
> From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
>
> The following changes since commit d0d3dd401b70168a353450e031727affee828527:
>
>   Update version for v6.0.0-rc2 release (2021-04-06 18:34:34 +0100)
>
> are available in the Git repository at:
>
>   git://github.com/dagrh/qemu.git tags/pull-migration-20210407a
>
> for you to fetch changes up to c4e232bb57aca19ca60f692ee830023a76eca78e:
>
>   tests/migration: fix parameter of auto-converge migration (2021-04-06 18:56:02 +0100)
>
> ----------------------------------------------------------------
> migration+virtiofs fixes pull 2021-04-07
>
> A seg fix in virtiofsd, a bunch of fixes for background snapshots, and
> a migration test fix.
>
> Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
>
> ----------------------------------------------------------------

Fails to link on non-Linux hosts:

Undefined symbols for architecture x86_64:
  "_ram_write_tracking_prepare", referenced from:
      _bg_migration_thread in migration_migration.c.o
ld: symbol(s) not found for architecture x86_64

The definition of ram_write_tracking_prepare() is inside an
#if defined(__linux__), but the callsite is not, I think.

thanks
-- PMM


^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PULL 0/6] migration + virtiofsd queue
  2021-04-07 13:25 ` [PULL 0/6] migration + virtiofsd queue Peter Maydell
@ 2021-04-07 16:50   ` Dr. David Alan Gilbert
  2021-04-08  9:16     ` Andrey Gruzdev
  0 siblings, 1 reply; 13+ messages in thread
From: Dr. David Alan Gilbert @ 2021-04-07 16:50 UTC (permalink / raw)
  To: Peter Maydell; +Cc: huangy81, QEMU Developers, andrey.gruzdev

* Peter Maydell (peter.maydell@linaro.org) wrote:
> On Wed, 7 Apr 2021 at 11:22, Dr. David Alan Gilbert (git)
> <dgilbert@redhat.com> wrote:
> >
> > From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
> >
> > The following changes since commit d0d3dd401b70168a353450e031727affee828527:
> >
> >   Update version for v6.0.0-rc2 release (2021-04-06 18:34:34 +0100)
> >
> > are available in the Git repository at:
> >
> >   git://github.com/dagrh/qemu.git tags/pull-migration-20210407a
> >
> > for you to fetch changes up to c4e232bb57aca19ca60f692ee830023a76eca78e:
> >
> >   tests/migration: fix parameter of auto-converge migration (2021-04-06 18:56:02 +0100)
> >
> > ----------------------------------------------------------------
> > migration+virtiofs fixes pull 2021-04-07
> >
> > A seg fix in virtiofsd, a bunch of fixes for background snapshots, and
> > a migration test fix.
> >
> > Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
> >
> > ----------------------------------------------------------------
> 
> Fails to link on non-Linux hosts:
> 
> Undefined symbols for architecture x86_64:
>   "_ram_write_tracking_prepare", referenced from:
>       _bg_migration_thread in migration_migration.c.o
> ld: symbol(s) not found for architecture x86_64
> 
> The definition of ram_write_tracking_prepare() is inside an
> #if defined(__linux__), but the callsite is not, I think.

OK, reproduced here.  Let me see.

Dave

> thanks
> -- PMM
> 
-- 
Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK



^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PULL 0/6] migration + virtiofsd queue
  2021-04-07 16:50   ` Dr. David Alan Gilbert
@ 2021-04-08  9:16     ` Andrey Gruzdev
  2021-04-08 10:50       ` Dr. David Alan Gilbert
  0 siblings, 1 reply; 13+ messages in thread
From: Andrey Gruzdev @ 2021-04-08  9:16 UTC (permalink / raw)
  To: Dr. David Alan Gilbert, Peter Maydell; +Cc: QEMU Developers, huangy81

[-- Attachment #1: Type: text/plain, Size: 1680 bytes --]

On 07.04.2021 19:50, Dr. David Alan Gilbert wrote:
> * Peter Maydell (peter.maydell@linaro.org) wrote:
>> On Wed, 7 Apr 2021 at 11:22, Dr. David Alan Gilbert (git)
>> <dgilbert@redhat.com> wrote:
>>> From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
>>>
>>> The following changes since commit d0d3dd401b70168a353450e031727affee828527:
>>>
>>>    Update version for v6.0.0-rc2 release (2021-04-06 18:34:34 +0100)
>>>
>>> are available in the Git repository at:
>>>
>>>    git://github.com/dagrh/qemu.git tags/pull-migration-20210407a
>>>
>>> for you to fetch changes up to c4e232bb57aca19ca60f692ee830023a76eca78e:
>>>
>>>    tests/migration: fix parameter of auto-converge migration (2021-04-06 18:56:02 +0100)
>>>
>>> ----------------------------------------------------------------
>>> migration+virtiofs fixes pull 2021-04-07
>>>
>>> A seg fix in virtiofsd, a bunch of fixes for background snapshots, and
>>> a migration test fix.
>>>
>>> Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
>>>
>>> ----------------------------------------------------------------
>> Fails to link on non-Linux hosts:
>>
>> Undefined symbols for architecture x86_64:
>>    "_ram_write_tracking_prepare", referenced from:
>>        _bg_migration_thread in migration_migration.c.o
>> ld: symbol(s) not found for architecture x86_64
>>
>> The definition of ram_write_tracking_prepare() is inside an
>> #if defined(__linux__), but the callsite is not, I think.
> OK, reproduced here.  Let me see.
>
> Dave
>
Seems that non-linux stub is missing, I'll respin.

>> thanks
>> -- PMM
>>


-- 
Andrey Gruzdev, Principal Engineer
Virtuozzo GmbH  +7-903-247-6397
                 virtuzzo.com


[-- Attachment #2: Type: text/html, Size: 2748 bytes --]

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PULL 0/6] migration + virtiofsd queue
  2021-04-08  9:16     ` Andrey Gruzdev
@ 2021-04-08 10:50       ` Dr. David Alan Gilbert
  2021-04-08 12:27         ` Andrey Gruzdev
  0 siblings, 1 reply; 13+ messages in thread
From: Dr. David Alan Gilbert @ 2021-04-08 10:50 UTC (permalink / raw)
  To: Andrey Gruzdev; +Cc: Peter Maydell, huangy81, QEMU Developers

* Andrey Gruzdev (andrey.gruzdev@virtuozzo.com) wrote:
> On 07.04.2021 19:50, Dr. David Alan Gilbert wrote:
> > * Peter Maydell (peter.maydell@linaro.org) wrote:
> > > On Wed, 7 Apr 2021 at 11:22, Dr. David Alan Gilbert (git)
> > > <dgilbert@redhat.com> wrote:
> > > > From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
> > > > 
> > > > The following changes since commit d0d3dd401b70168a353450e031727affee828527:
> > > > 
> > > >    Update version for v6.0.0-rc2 release (2021-04-06 18:34:34 +0100)
> > > > 
> > > > are available in the Git repository at:
> > > > 
> > > >    git://github.com/dagrh/qemu.git tags/pull-migration-20210407a
> > > > 
> > > > for you to fetch changes up to c4e232bb57aca19ca60f692ee830023a76eca78e:
> > > > 
> > > >    tests/migration: fix parameter of auto-converge migration (2021-04-06 18:56:02 +0100)
> > > > 
> > > > ----------------------------------------------------------------
> > > > migration+virtiofs fixes pull 2021-04-07
> > > > 
> > > > A seg fix in virtiofsd, a bunch of fixes for background snapshots, and
> > > > a migration test fix.
> > > > 
> > > > Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
> > > > 
> > > > ----------------------------------------------------------------
> > > Fails to link on non-Linux hosts:
> > > 
> > > Undefined symbols for architecture x86_64:
> > >    "_ram_write_tracking_prepare", referenced from:
> > >        _bg_migration_thread in migration_migration.c.o
> > > ld: symbol(s) not found for architecture x86_64
> > > 
> > > The definition of ram_write_tracking_prepare() is inside an
> > > #if defined(__linux__), but the callsite is not, I think.
> > OK, reproduced here.  Let me see.
> > 
> > Dave
> > 
> Seems that non-linux stub is missing, I'll respin.

I posted a v2 pull with an extra ifdef, lets get that in, and we can
tidy the stub in later.

Dave

> > > thanks
> > > -- PMM
> > > 
> 
> 
> -- 
> Andrey Gruzdev, Principal Engineer
> Virtuozzo GmbH  +7-903-247-6397
>                 virtuzzo.com
> 
-- 
Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK



^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PULL 0/6] migration + virtiofsd queue
  2021-04-08 10:50       ` Dr. David Alan Gilbert
@ 2021-04-08 12:27         ` Andrey Gruzdev
  0 siblings, 0 replies; 13+ messages in thread
From: Andrey Gruzdev @ 2021-04-08 12:27 UTC (permalink / raw)
  To: Dr. David Alan Gilbert; +Cc: Peter Maydell, QEMU Developers, huangy81

[-- Attachment #1: Type: text/plain, Size: 2112 bytes --]

On 08.04.2021 13:50, Dr. David Alan Gilbert wrote:
> * Andrey Gruzdev (andrey.gruzdev@virtuozzo.com) wrote:
>> On 07.04.2021 19:50, Dr. David Alan Gilbert wrote:
>>> * Peter Maydell (peter.maydell@linaro.org) wrote:
>>>> On Wed, 7 Apr 2021 at 11:22, Dr. David Alan Gilbert (git)
>>>> <dgilbert@redhat.com> wrote:
>>>>> From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
>>>>>
>>>>> The following changes since commit d0d3dd401b70168a353450e031727affee828527:
>>>>>
>>>>>     Update version for v6.0.0-rc2 release (2021-04-06 18:34:34 +0100)
>>>>>
>>>>> are available in the Git repository at:
>>>>>
>>>>>     git://github.com/dagrh/qemu.git tags/pull-migration-20210407a
>>>>>
>>>>> for you to fetch changes up to c4e232bb57aca19ca60f692ee830023a76eca78e:
>>>>>
>>>>>     tests/migration: fix parameter of auto-converge migration (2021-04-06 18:56:02 +0100)
>>>>>
>>>>> ----------------------------------------------------------------
>>>>> migration+virtiofs fixes pull 2021-04-07
>>>>>
>>>>> A seg fix in virtiofsd, a bunch of fixes for background snapshots, and
>>>>> a migration test fix.
>>>>>
>>>>> Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
>>>>>
>>>>> ----------------------------------------------------------------
>>>> Fails to link on non-Linux hosts:
>>>>
>>>> Undefined symbols for architecture x86_64:
>>>>     "_ram_write_tracking_prepare", referenced from:
>>>>         _bg_migration_thread in migration_migration.c.o
>>>> ld: symbol(s) not found for architecture x86_64
>>>>
>>>> The definition of ram_write_tracking_prepare() is inside an
>>>> #if defined(__linux__), but the callsite is not, I think.
>>> OK, reproduced here.  Let me see.
>>>
>>> Dave
>>>
>> Seems that non-linux stub is missing, I'll respin.
> I posted a v2 pull with an extra ifdef, lets get that in, and we can
> tidy the stub in later.
>
> Dave

Ok

>>>> thanks
>>>> -- PMM
>>>>
>>
>> -- 
>> Andrey Gruzdev, Principal Engineer
>> Virtuozzo GmbH  +7-903-247-6397
>>                  virtuzzo.com
>>


-- 
Andrey Gruzdev, Principal Engineer
Virtuozzo GmbH  +7-903-247-6397
                 virtuzzo.com


[-- Attachment #2: Type: text/html, Size: 3628 bytes --]

^ permalink raw reply	[flat|nested] 13+ messages in thread

* [PULL 1/6] virtiofsd: Fix security.capability comparison
  2021-04-07 17:54 [PULL 0/6] V2 " Dr. David Alan Gilbert (git)
@ 2021-04-07 17:54 ` Dr. David Alan Gilbert (git)
  0 siblings, 0 replies; 13+ messages in thread
From: Dr. David Alan Gilbert (git) @ 2021-04-07 17:54 UTC (permalink / raw)
  To: qemu-devel, andrey.gruzdev, huangy81

From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>

My security fix for the security.capability remap has a silly early
segfault in a simple case where there is an xattrmapping but it doesn't
remap the security.capability.

Fixes: e586edcb41054 ("virtiofs: drop remapped security.capability xattr as needed")
Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
Message-Id: <20210401145845.78445-1-dgilbert@redhat.com>
Reviewed-by: Connor Kuehl <ckuehl@redhat.com>
Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
---
 tools/virtiofsd/passthrough_ll.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/tools/virtiofsd/passthrough_ll.c b/tools/virtiofsd/passthrough_ll.c
index b144320e48..1553d2ef45 100644
--- a/tools/virtiofsd/passthrough_ll.c
+++ b/tools/virtiofsd/passthrough_ll.c
@@ -2636,7 +2636,8 @@ static void parse_xattrmap(struct lo_data *lo)
                 strerror(ret));
         exit(1);
     }
-    if (!strcmp(lo->xattr_security_capability, "security.capability")) {
+    if (!lo->xattr_security_capability ||
+        !strcmp(lo->xattr_security_capability, "security.capability")) {
         /* 1-1 mapping, don't need to do anything */
         free(lo->xattr_security_capability);
         lo->xattr_security_capability = NULL;
-- 
2.31.1



^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2021-04-08 12:28 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-04-07 10:20 [PULL 0/6] migration + virtiofsd queue Dr. David Alan Gilbert (git)
2021-04-07 10:20 ` [PULL 1/6] virtiofsd: Fix security.capability comparison Dr. David Alan Gilbert (git)
2021-04-07 10:20 ` [PULL 2/6] migration: Fix missing qemu_fflush() on buffer file in bg_migration_thread Dr. David Alan Gilbert (git)
2021-04-07 10:20 ` [PULL 3/6] migration: Inhibit virtio-balloon for the duration of background snapshot Dr. David Alan Gilbert (git)
2021-04-07 10:20 ` [PULL 4/6] migration: Pre-fault memory before starting background snasphot Dr. David Alan Gilbert (git)
2021-04-07 10:20 ` [PULL 5/6] migration: Rename 'bs' to 'block' in background snapshot code Dr. David Alan Gilbert (git)
2021-04-07 10:20 ` [PULL 6/6] tests/migration: fix parameter of auto-converge migration Dr. David Alan Gilbert (git)
2021-04-07 13:25 ` [PULL 0/6] migration + virtiofsd queue Peter Maydell
2021-04-07 16:50   ` Dr. David Alan Gilbert
2021-04-08  9:16     ` Andrey Gruzdev
2021-04-08 10:50       ` Dr. David Alan Gilbert
2021-04-08 12:27         ` Andrey Gruzdev
2021-04-07 17:54 [PULL 0/6] V2 " Dr. David Alan Gilbert (git)
2021-04-07 17:54 ` [PULL 1/6] virtiofsd: Fix security.capability comparison Dr. David Alan Gilbert (git)

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).