Re: [Qemu-devel] [RFC PATCH v3 07/49] kvmapic: fixing loading vmstate

2014-08-25 Thread Pavel Dovgaluk
 From: Paolo Bonzini [mailto:pbonz...@redhat.com]
 Il 31/07/2014 17:21, Pavel Dovgalyuk ha scritto:
  Pre load is necessary, because we switched off resetting VM while
  loading in the replay mode.
 
 Then you should not add it now, but rather when you add replay.  Treat
 this part of the series as merely fixing migration bugs.  In fact, I
 suggest that you start by progressively refining these patches.  You can
 also post the other patches that I mentioned were good to go in my
 review of v1.  Then pass to the next steps (in the meanwhile, Fred's
 icount reverse-exec patches might get merged too).

 Do you mean, that I should separate the migration patches from 
the replay ones and submit them in another series?

Pavel Dovgalyuk




Re: [Qemu-devel] [RFC PATCH v3 07/49] kvmapic: fixing loading vmstate

2014-08-25 Thread Paolo Bonzini
Il 25/08/2014 13:40, Pavel Dovgaluk ha scritto:
  Do you mean, that I should separate the migration patches from 
 the replay ones and submit them in another series?

Yes, that will help getting the less controversial pieces in first.

Paolo



Re: [Qemu-devel] [RFC PATCH v3 07/49] kvmapic: fixing loading vmstate

2014-07-31 Thread Paolo Bonzini
Il 31/07/2014 14:54, Pavel Dovgalyuk ha scritto:
 +static int apic_pre_load(void *opaque)
 +{
 +APICCommonState *s = APIC_COMMON(opaque);
 +s-sipi_vector = 0;
 +s-wait_for_sipi = 0;
 +s-vapic_paddr = 0;
 +return 0;

Is this necessary?  Or does reset already do that?

 +}
 +
  static void apic_dispatch_pre_save(void *opaque)
  {
  APICCommonState *s = APIC_COMMON(opaque);
 @@ -345,12 +354,46 @@ static int apic_dispatch_post_load(void *opaque, int 
 version_id)
  return 0;
  }
  
 +static bool apic_common_sipi_needed(void *opaque)
 +{
 +APICCommonState *s = APIC_COMMON(opaque);
 +return s-wait_for_sipi != 0;
 +}
 +
 +static const VMStateDescription vmstate_apic_common_sipi = {
 +.name = apic_sipi,
 +.version_id = 1,
 +.minimum_version_id = 1,
 +.fields = (VMStateField[]) {
 +VMSTATE_INT32(sipi_vector, APICCommonState),
 +VMSTATE_INT32(wait_for_sipi, APICCommonState),
 +VMSTATE_END_OF_LIST()
 +}
 +};
 +
 +static bool apic_common_vapic_paddr_needed(void *opaque)
 +{
 +APICCommonState *s = APIC_COMMON(opaque);
 +return s-vapic_paddr != 0;
 +}
 +
 +static const VMStateDescription vmstate_apic_common_vapic_paddr = {
 +.name = apic_vapic_paddr,
 +.version_id = 1,
 +.minimum_version_id = 1,
 +.fields = (VMStateField[]) {
 +VMSTATE_UINT64(vapic_paddr, APICCommonState),
 +VMSTATE_END_OF_LIST()
 +}
 +};
 +
  static const VMStateDescription vmstate_apic_common = {
  .name = apic,
 -.version_id = 3,
 +.version_id = 4,

You know what I'm going to say. :)

Paolo



Re: [Qemu-devel] [RFC PATCH v3 07/49] kvmapic: fixing loading vmstate

2014-07-31 Thread Pavel Dovgalyuk
Pre load is necessary, because we switched off resetting VM while loading in 
the replay mode. Calling reset handlers generates irqs, that make loading 
process non-deterministic.


Sent from mobile device



 Исходное сообщение 
От: Paolo Bonzini pbonz...@redhat.com 
Дата:31.07.2014  17:01  (GMT+04:00) 
Кому: Pavel Dovgalyuk pavel.dovga...@ispras.ru,qemu-devel@nongnu.org 
Копия: 
peter.mayd...@linaro.org,peter.crosthwa...@xilinx.com,mark.bur...@greensocs.com,r...@ispras.ru,batuz...@ispras.ru,maria.klimushenk...@ispras.ru,ebl...@redhat.com,afaer...@suse.de,fred.kon...@greensocs.com
 
Тема: Re: [RFC PATCH v3 07/49] kvmapic: fixing loading vmstate 

Il 31/07/2014 14:54, Pavel Dovgalyuk ha scritto:
 +static int apic_pre_load(void *opaque)
 +{
 +    APICCommonState *s = APIC_COMMON(opaque);
 +    s-sipi_vector = 0;
 +    s-wait_for_sipi = 0;
 +    s-vapic_paddr = 0;
 +    return 0;

Is this necessary?  Or does reset already do that?

 +}
 +
  static void apic_dispatch_pre_save(void *opaque)
  {
  APICCommonState *s = APIC_COMMON(opaque);
 @@ -345,12 +354,46 @@ static int apic_dispatch_post_load(void *opaque, int 
 version_id)
  return 0;
  }
  
 +static bool apic_common_sipi_needed(void *opaque)
 +{
 +    APICCommonState *s = APIC_COMMON(opaque);
 +    return s-wait_for_sipi != 0;
 +}
 +
 +static const VMStateDescription vmstate_apic_common_sipi = {
 +    .name = apic_sipi,
 +    .version_id = 1,
 +    .minimum_version_id = 1,
 +    .fields = (VMStateField[]) {
 +    VMSTATE_INT32(sipi_vector, APICCommonState),
 +    VMSTATE_INT32(wait_for_sipi, APICCommonState),
 +    VMSTATE_END_OF_LIST()
 +    }
 +};
 +
 +static bool apic_common_vapic_paddr_needed(void *opaque)
 +{
 +    APICCommonState *s = APIC_COMMON(opaque);
 +    return s-vapic_paddr != 0;
 +}
 +
 +static const VMStateDescription vmstate_apic_common_vapic_paddr = {
 +    .name = apic_vapic_paddr,
 +    .version_id = 1,
 +    .minimum_version_id = 1,
 +    .fields = (VMStateField[]) {
 +    VMSTATE_UINT64(vapic_paddr, APICCommonState),
 +    VMSTATE_END_OF_LIST()
 +    }
 +};
 +
  static const VMStateDescription vmstate_apic_common = {
  .name = apic,
 -    .version_id = 3,
 +    .version_id = 4,

You know what I'm going to say. :)

Paolo