Message ID | 20210203161340.55210-1-aaron@os.amperecomputing.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | target/arm: Don't migrate CPUARMState.features | expand |
On 2/3/21 5:13 PM, Aaron Lindsay wrote: > As feature flags are added or removed, the meanings of bits in the > `features` field can change between QEMU versions, causing migration > failures. Additionally, migrating the field is not useful because it is > a constant function of the CPU being used. Please don't bury patches within mailing list threads. BTW you found yet another 13 years old problem :) 918f5dca18d ("target-arm: Extend feature flags to 64 bits") aa941b94450 ("Savevm/loadvm bits for ARM core, the PXA2xx peripherals and Spitz hardware.") > > Signed-off-by: Aaron Lindsay <aaron@os.amperecomputing.com> > Suggested-by: Peter Maydell <peter.maydell@linaro.org> > --- > target/arm/machine.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/target/arm/machine.c b/target/arm/machine.c > index c9e9fd0a12..7f2511b6ed 100644 > --- a/target/arm/machine.c > +++ b/target/arm/machine.c > @@ -834,7 +834,7 @@ const VMStateDescription vmstate_arm_cpu = { > VMSTATE_UINT64(env.exclusive_addr, ARMCPU), > VMSTATE_UINT64(env.exclusive_val, ARMCPU), > VMSTATE_UINT64(env.exclusive_high, ARMCPU), > - VMSTATE_UINT64(env.features, ARMCPU), > + VMSTATE_UNUSED(sizeof(uint64_t)), > VMSTATE_UINT32(env.exception.syndrome, ARMCPU), > VMSTATE_UINT32(env.exception.fsr, ARMCPU), > VMSTATE_UINT64(env.exception.vaddress, ARMCPU), >
On Wed, Feb 03, 2021 at 11:13:40AM -0500, Aaron Lindsay wrote: > As feature flags are added or removed, the meanings of bits in the > `features` field can change between QEMU versions, causing migration > failures. Additionally, migrating the field is not useful because it is > a constant function of the CPU being used. > > Signed-off-by: Aaron Lindsay <aaron@os.amperecomputing.com> > Suggested-by: Peter Maydell <peter.maydell@linaro.org> > --- > target/arm/machine.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/target/arm/machine.c b/target/arm/machine.c > index c9e9fd0a12..7f2511b6ed 100644 > --- a/target/arm/machine.c > +++ b/target/arm/machine.c > @@ -834,7 +834,7 @@ const VMStateDescription vmstate_arm_cpu = { > VMSTATE_UINT64(env.exclusive_addr, ARMCPU), > VMSTATE_UINT64(env.exclusive_val, ARMCPU), > VMSTATE_UINT64(env.exclusive_high, ARMCPU), > - VMSTATE_UINT64(env.features, ARMCPU), > + VMSTATE_UNUSED(sizeof(uint64_t)), > VMSTATE_UINT32(env.exception.syndrome, ARMCPU), > VMSTATE_UINT32(env.exception.fsr, ARMCPU), > VMSTATE_UINT64(env.exception.vaddress, ARMCPU), > -- > 2.17.1 > I tested this with a KVM guest. Prior to this patch, a migration of a 4.1 guest from a 4.1 build of QEMU to a build of the latest bits of QEMU would fail with a segmentation fault. With this patch, the migration succeeds. However, migrating a virt-4.1 machine type from a QEMU of the latest bits to a 4.1 build of QEMU still fails with qemu-system-aarch64: error while loading state for instance 0x0 of device 'pl011' qemu-system-aarch64: load of migration failed: No such file or directory This means "ping-pong" migrations fail, which is another thing we would prefer to work. But, as that appears to be a different bug, regarding this patch Reviewed-by: Andrew Jones <drjones@redhat.com> Tested-by: Andrew Jones <drjones@redhat.com> Thanks, drew
On Wed, 3 Feb 2021 at 16:14, Aaron Lindsay <aaron@os.amperecomputing.com> wrote: > > As feature flags are added or removed, the meanings of bits in the > `features` field can change between QEMU versions, causing migration > failures. Additionally, migrating the field is not useful because it is > a constant function of the CPU being used. > > Signed-off-by: Aaron Lindsay <aaron@os.amperecomputing.com> > Suggested-by: Peter Maydell <peter.maydell@linaro.org> > --- > target/arm/machine.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) Applied to target-arm.next, thanks. -- PMM
diff --git a/target/arm/machine.c b/target/arm/machine.c index c9e9fd0a12..7f2511b6ed 100644 --- a/target/arm/machine.c +++ b/target/arm/machine.c @@ -834,7 +834,7 @@ const VMStateDescription vmstate_arm_cpu = { VMSTATE_UINT64(env.exclusive_addr, ARMCPU), VMSTATE_UINT64(env.exclusive_val, ARMCPU), VMSTATE_UINT64(env.exclusive_high, ARMCPU), - VMSTATE_UINT64(env.features, ARMCPU), + VMSTATE_UNUSED(sizeof(uint64_t)), VMSTATE_UINT32(env.exception.syndrome, ARMCPU), VMSTATE_UINT32(env.exception.fsr, ARMCPU), VMSTATE_UINT64(env.exception.vaddress, ARMCPU),
As feature flags are added or removed, the meanings of bits in the `features` field can change between QEMU versions, causing migration failures. Additionally, migrating the field is not useful because it is a constant function of the CPU being used. Signed-off-by: Aaron Lindsay <aaron@os.amperecomputing.com> Suggested-by: Peter Maydell <peter.maydell@linaro.org> --- target/arm/machine.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)