From: Avnish Chouhan <avnish@linux.ibm.com>
To: hector.cao@canonical.com
Cc: grub-devel@gnu.org
Subject: Re: [RFC PATCH 1/2] target/i386: add compatibility property for arch_capabilities
Date: Thu, 11 Sep 2025 13:57:54 +0530 [thread overview]
Message-ID: <67943240d25ce5364e8e047b3fca3bda@linux.ibm.com> (raw)
In-Reply-To: <mailman.870.1757509050.1197.grub-devel@gnu.org>
On 2025-09-10 18:27, grub-devel-request@gnu.org wrote:
> Message: 2
> Date: Wed, 10 Sep 2025 10:24:31 +0200
> From: Hector Cao <hector.cao@canonical.com>
> To: grub-devel@gnu.org
> Subject: [RFC PATCH 1/2] target/i386: add compatibility property for
> arch_capabilities
> Message-ID: <20250910082432.14764-2-hector.cao@canonical.com>
>
> Prior to v10.1, if requested by user, arch-capabilities is always on
> despite the fact that CPUID advertises it to be off/unvailable.
> this causes a migration issue for VMs that are run on a machine
> without arch-capabilities and expect this feature to be present
> on the destination host with QEMU 10.1.
>
> This commit add a compatibility property to restore the legacy
> behavior for all machines with version prior to 10.1
>
> Signed-off-by: Hector Cao <hector.cao@canonical.com>
> ---
> hw/core/machine.c | 1 +
> migration/migration.h | 12 ++++++++++++
> migration/options.c | 3 +++
> target/i386/kvm/kvm.c | 5 ++++-
> 4 files changed, 20 insertions(+), 1 deletion(-)
>
> diff --git a/hw/core/machine.c b/hw/core/machine.c
> index 38c949c4f2..8ad5d79cb3 100644
> --- a/hw/core/machine.c
> +++ b/hw/core/machine.c
> @@ -45,6 +45,7 @@ GlobalProperty hw_compat_10_0[] = {
> { "vfio-pci", "x-migration-load-config-after-iter", "off" },
> { "ramfb", "use-legacy-x86-rom", "true"},
> { "vfio-pci-nohotplug", "use-legacy-x86-rom", "true" },
> + { "migration", "arch-cap-always-on", "true" },
> };
> const size_t hw_compat_10_0_len = G_N_ELEMENTS(hw_compat_10_0);
>
> diff --git a/migration/migration.h b/migration/migration.h
> index 01329bf824..5124ff3636 100644
> --- a/migration/migration.h
> +++ b/migration/migration.h
> @@ -510,6 +510,18 @@ struct MigrationState {
> bool rdma_migration;
>
> GSource *hup_source;
> +
> + /*
> + * This variable allows to keep the backward compatibility with
> QEMU (<10.1)
> + * on the arch-capabilities detection.
> + * With the commit d3a2413 (since 10.1), the arch-capabilities
> feature is gated
> + * with the CPUID bit (CPUID_7_0_EDX_ARCH_CAPABILITIES) instead
> of being always
> + * enabled when user requests for it. this new behavior breaks
> migration of VMs
> + * created and run with older QEMU on machines without
> IA32_ARCH_CAPABILITIES MSR,
> + * those VMs might have arch-capabilities enabled and break when
> migrating
> + * to a host with QEMU 10.1 with error : missing feature
> arch-capabilities
> + */
> + bool arch_cap_always_on;
> };
>
> void migrate_set_state(MigrationStatus *state, MigrationStatus
> old_state,
> diff --git a/migration/options.c b/migration/options.c
> index 4e923a2e07..3a80dba9c5 100644
> --- a/migration/options.c
> +++ b/migration/options.c
> @@ -203,6 +203,9 @@ const Property migration_properties[] = {
> MIGRATION_CAPABILITY_SWITCHOVER_ACK),
> DEFINE_PROP_MIG_CAP("x-dirty-limit",
> MIGRATION_CAPABILITY_DIRTY_LIMIT),
> DEFINE_PROP_MIG_CAP("mapped-ram",
> MIGRATION_CAPABILITY_MAPPED_RAM),
> +
> + DEFINE_PROP_BOOL("arch-cap-always-on", MigrationState,
Hi Hector,
Missing space before '('
> + arch_cap_always_on, false),
> };
> const size_t migration_properties_count =
> ARRAY_SIZE(migration_properties);
>
> diff --git a/target/i386/kvm/kvm.c b/target/i386/kvm/kvm.c
> index 306430a052..e2ec4e6de5 100644
> --- a/target/i386/kvm/kvm.c
> +++ b/target/i386/kvm/kvm.c
> @@ -42,6 +42,7 @@
> #include "xen-emu.h"
> #include "hyperv.h"
> #include "hyperv-proto.h"
> +#include "migration/migration.h"
>
> #include "gdbstub/enums.h"
> #include "qemu/host-utils.h"
> @@ -438,6 +439,7 @@ uint32_t kvm_arch_get_supported_cpuid(KVMState *s,
> uint32_t function,
> uint32_t ret = 0;
> uint32_t cpuid_1_edx, unused;
> uint64_t bitmask;
> + MigrationState *ms = migrate_get_current();
>
> cpuid = get_supported_cpuid(s);
>
> @@ -508,7 +510,8 @@ uint32_t kvm_arch_get_supported_cpuid(KVMState *s,
> uint32_t function,
> * mcahines at all, do not show the fake ARCH_CAPABILITIES MSR
> that
> * KVM sets up.
> */
> - if (!has_msr_arch_capabs || !(edx &
> CPUID_7_0_EDX_ARCH_CAPABILITIES)) {
> + if (!has_msr_arch_capabs
> + || (!(edx & CPUID_7_0_EDX_ARCH_CAPABILITIES) &&
> (!ms->arch_cap_always_on))) {
Please move '{' in the next line.
Thank you!
Regards,
Avnish Chouhan
> ret &= ~CPUID_7_0_EDX_ARCH_CAPABILITIES;
> }
> } else if (function == 7 && index == 1 && reg == R_EAX) {
> --
> 2.45.2
>
>
>
>
> ------------------------------
_______________________________________________
Grub-devel mailing list
Grub-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/grub-devel
next prev parent reply other threads:[~2025-09-11 8:29 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <mailman.870.1757509050.1197.grub-devel@gnu.org>
2025-09-11 6:59 ` [PATCH v2] kern: perform NULL check in unregister paths (command/extcmd) Avnish Chouhan
2025-09-11 8:09 ` Srish Srinivasan
2025-09-11 8:27 ` Avnish Chouhan [this message]
2025-09-11 10:39 ` [RFC PATCH 2/2] target/i386: add compatibility property for pdcm feature Avnish Chouhan
2025-09-04 14:35 Issues with pdcm in qemu 10.1-rc on migration and save/restore Hector Cao
2025-09-10 8:24 ` [RFC PATCH 0/2] Fix cross migration issue with missing features: pdcm, arch-capabilities Hector Cao
2025-09-10 8:24 ` [RFC PATCH 1/2] target/i386: add compatibility property for arch_capabilities Hector Cao
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=67943240d25ce5364e8e047b3fca3bda@linux.ibm.com \
--to=avnish@linux.ibm.com \
--cc=grub-devel@gnu.org \
--cc=hector.cao@canonical.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.