Re: [Qemu-devel] [RFC PATCH v3 07/49] kvmapic: fixing loading vmstate
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
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
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
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