diff mbox series

[1/3] hw/intc/arm_gicv3_common: Give no-migration-shift-bug subsection a needed function

Message ID 20180803163646.31068-2-peter.maydell@linaro.org
State Superseded
Headers show
Series Arm migration fixes for 3.0 | expand

Commit Message

Peter Maydell Aug. 3, 2018, 4:36 p.m. UTC
Currently the migration code incorrectly treats a subsection with
no .needed function pointer as if it was the subsection list
terminator -- it is ignored and so is everything after it.
Work around this by giving vmstate_gicv3_gicd_no_migration_shift_bug
a 'needed' function that always returns true.

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>

---
This should go into 3.0 to avoid awkward migration compat problems:
the no-migration-shift-bug subsection is new in 3.0.
---
 hw/intc/arm_gicv3_common.c | 6 ++++++
 1 file changed, 6 insertions(+)

-- 
2.17.1

Comments

Dr. David Alan Gilbert Aug. 3, 2018, 5:29 p.m. UTC | #1
* Peter Maydell (peter.maydell@linaro.org) wrote:
> Currently the migration code incorrectly treats a subsection with

> no .needed function pointer as if it was the subsection list

> terminator -- it is ignored and so is everything after it.

> Work around this by giving vmstate_gicv3_gicd_no_migration_shift_bug

> a 'needed' function that always returns true.

> 

> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>


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


> ---

> This should go into 3.0 to avoid awkward migration compat problems:

> the no-migration-shift-bug subsection is new in 3.0.

> ---

>  hw/intc/arm_gicv3_common.c | 6 ++++++

>  1 file changed, 6 insertions(+)

> 

> diff --git a/hw/intc/arm_gicv3_common.c b/hw/intc/arm_gicv3_common.c

> index ff326b374ad..e58bc8b8105 100644

> --- a/hw/intc/arm_gicv3_common.c

> +++ b/hw/intc/arm_gicv3_common.c

> @@ -203,10 +203,16 @@ static int gicv3_gicd_no_migration_shift_bug_post_load(void *opaque,

>      return 0;

>  }

>  

> +static bool needed_always(void *opaque)

> +{

> +    return true;

> +}

> +

>  const VMStateDescription vmstate_gicv3_gicd_no_migration_shift_bug = {

>      .name = "arm_gicv3/gicd_no_migration_shift_bug",

>      .version_id = 1,

>      .minimum_version_id = 1,

> +    .needed = needed_always,

>      .pre_load = gicv3_gicd_no_migration_shift_bug_pre_load,

>      .post_load = gicv3_gicd_no_migration_shift_bug_post_load,

>      .fields = (VMStateField[]) {

> -- 

> 2.17.1

> 

--
Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK
Peter Maydell Aug. 6, 2018, 10 a.m. UTC | #2
Forgot to cc Shannon on this one. Given that the missing .needed
function meant we weren't ever transmitting the subsection with
the no-shift-bug flag, this ought to mean that for current
master migration of KVM goes wrong (since the destination thinks
the source has the bug when it does not). I'm just going to try
to set up to test this...

thanks
-- PMM

On 3 August 2018 at 17:36, Peter Maydell <peter.maydell@linaro.org> wrote:
> Currently the migration code incorrectly treats a subsection with

> no .needed function pointer as if it was the subsection list

> terminator -- it is ignored and so is everything after it.

> Work around this by giving vmstate_gicv3_gicd_no_migration_shift_bug

> a 'needed' function that always returns true.

>

> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>

> ---

> This should go into 3.0 to avoid awkward migration compat problems:

> the no-migration-shift-bug subsection is new in 3.0.

> ---

>  hw/intc/arm_gicv3_common.c | 6 ++++++

>  1 file changed, 6 insertions(+)

>

> diff --git a/hw/intc/arm_gicv3_common.c b/hw/intc/arm_gicv3_common.c

> index ff326b374ad..e58bc8b8105 100644

> --- a/hw/intc/arm_gicv3_common.c

> +++ b/hw/intc/arm_gicv3_common.c

> @@ -203,10 +203,16 @@ static int gicv3_gicd_no_migration_shift_bug_post_load(void *opaque,

>      return 0;

>  }

>

> +static bool needed_always(void *opaque)

> +{

> +    return true;

> +}

> +

>  const VMStateDescription vmstate_gicv3_gicd_no_migration_shift_bug = {

>      .name = "arm_gicv3/gicd_no_migration_shift_bug",

>      .version_id = 1,

>      .minimum_version_id = 1,

> +    .needed = needed_always,

>      .pre_load = gicv3_gicd_no_migration_shift_bug_pre_load,

>      .post_load = gicv3_gicd_no_migration_shift_bug_post_load,

>      .fields = (VMStateField[]) {

> --

> 2.17.1
diff mbox series

Patch

diff --git a/hw/intc/arm_gicv3_common.c b/hw/intc/arm_gicv3_common.c
index ff326b374ad..e58bc8b8105 100644
--- a/hw/intc/arm_gicv3_common.c
+++ b/hw/intc/arm_gicv3_common.c
@@ -203,10 +203,16 @@  static int gicv3_gicd_no_migration_shift_bug_post_load(void *opaque,
     return 0;
 }
 
+static bool needed_always(void *opaque)
+{
+    return true;
+}
+
 const VMStateDescription vmstate_gicv3_gicd_no_migration_shift_bug = {
     .name = "arm_gicv3/gicd_no_migration_shift_bug",
     .version_id = 1,
     .minimum_version_id = 1,
+    .needed = needed_always,
     .pre_load = gicv3_gicd_no_migration_shift_bug_pre_load,
     .post_load = gicv3_gicd_no_migration_shift_bug_post_load,
     .fields = (VMStateField[]) {