From: Paolo Bonzini <pbonzini@redhat.com>
To: "Michael S. Tsirkin" <mst@redhat.com>
Cc: amit.shah@redhat.com, quintela@redhat.com, qemu-devel@nongnu.org,
Pavel.Dovgaluk@ispras.ru, dgilbert@redhat.com
Subject: Re: [Qemu-devel] [PATCH 02/10] apic_common: vapic_paddr synchronization fix
Date: Tue, 09 Sep 2014 16:26:16 +0200 [thread overview]
Message-ID: <540F0E08.1030005@redhat.com> (raw)
In-Reply-To: <20140909140004.GB13212@redhat.com>
Il 09/09/2014 16:00, Michael S. Tsirkin ha scritto:
> On Tue, Sep 09, 2014 at 02:30:01PM +0200, Paolo Bonzini wrote:
>> From: Pavel Dovgalyuk <Pavel.Dovgaluk@ispras.ru>
>>
>> This patch postpones vapic_paddr initialization, which is performed
>> during migration. When vapic_paddr is synchronized within the migration
>> process, apic_common functions could operate with incorrect apic state,
>> if it hadn't loaded yet. This patch postpones the synchronization until
>> the virtual machine is started, ensuring that the whole virtual machine
>> state has been loaded.
>>
>> Signed-off-by: Pavel Dovgalyuk <Pavel.Dovgaluk@ispras.ru>
>> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
>> ---
>> hw/i386/kvmvapic.c | 37 ++++++++++++++++++++++++++-----------
>> 1 file changed, 26 insertions(+), 11 deletions(-)
>>
>> diff --git a/hw/i386/kvmvapic.c b/hw/i386/kvmvapic.c
>> index ee95963..2bcc249 100644
>> --- a/hw/i386/kvmvapic.c
>> +++ b/hw/i386/kvmvapic.c
>> @@ -59,6 +59,7 @@ typedef struct VAPICROMState {
>> GuestROMState rom_state;
>> size_t rom_size;
>> bool rom_mapped_writable;
>> + VMChangeStateEntry *vmsentry;
>> } VAPICROMState;
>>
>> #define TYPE_VAPIC "kvmvapic"
>> @@ -734,11 +735,34 @@ static void do_vapic_enable(void *data)
>> vapic_enable(s, cpu);
>> }
>>
>> -static int vapic_post_load(void *opaque, int version_id)
>> +static void kvmvapic_vm_state_change(void *opaque, int running,
>> + RunState state)
>> {
>> VAPICROMState *s = opaque;
>> uint8_t *zero;
>>
>> + if (!running) {
>> + return;
>> + }
>> +
>> + if (s->state == VAPIC_ACTIVE) {
>> + if (smp_cpus == 1) {
>
> maybe add a comment explaining why we need
> to special case smp_cpus?
I don't know honestly. I'm just moving code around.
>> + run_on_cpu(first_cpu, do_vapic_enable, s);
>
> Is this safe to do in vmstate handler? cpu isn't running yet is it?
Yes, it isn't running and run_on_cpu is synchronous.
Paolo
>> + } else {
>> + zero = g_malloc0(s->rom_state.vapic_size);
>> + cpu_physical_memory_write(s->vapic_paddr, zero,
>> + s->rom_state.vapic_size);
>> + g_free(zero);
>> + }
>> + }
>> +
>> + qemu_del_vm_change_state_handler(s->vmsentry);
>> +}
>> +
>> +static int vapic_post_load(void *opaque, int version_id)
>> +{
>> + VAPICROMState *s = opaque;
>> +
>> /*
>> * The old implementation of qemu-kvm did not provide the state
>> * VAPIC_STANDBY. Reconstruct it.
>> @@ -752,17 +776,8 @@ static int vapic_post_load(void *opaque, int version_id)
>> return -1;
>> }
>> }
>> - if (s->state == VAPIC_ACTIVE) {
>> - if (smp_cpus == 1) {
>> - run_on_cpu(first_cpu, do_vapic_enable, s);
>> - } else {
>> - zero = g_malloc0(s->rom_state.vapic_size);
>> - cpu_physical_memory_write(s->vapic_paddr, zero,
>> - s->rom_state.vapic_size);
>> - g_free(zero);
>> - }
>> - }
>>
>> + s->vmsentry = qemu_add_vm_change_state_handler(kvmvapic_vm_state_change, s);
>> return 0;
>> }
>>
>> --
>> 2.1.0
>>
>>
next prev parent reply other threads:[~2014-09-09 14:41 UTC|newest]
Thread overview: 52+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-09-09 12:29 [Qemu-devel] [PATCH 00/10] x86: migrate more data Paolo Bonzini
2014-09-09 12:30 ` [Qemu-devel] [PATCH 01/10] vl: use QLIST_FOREACH_SAFE to visit change state handlers Paolo Bonzini
2014-09-09 13:09 ` Juan Quintela
2014-09-09 12:30 ` [Qemu-devel] [PATCH 02/10] apic_common: vapic_paddr synchronization fix Paolo Bonzini
2014-09-09 13:10 ` Juan Quintela
2014-09-09 14:00 ` Michael S. Tsirkin
2014-09-09 14:26 ` Paolo Bonzini [this message]
2014-09-10 6:55 ` Pavel Dovgaluk
2014-09-09 12:30 ` [Qemu-devel] [PATCH 03/10] cpu: init vmstate for ticks and clock offset Paolo Bonzini
2014-09-09 13:25 ` Juan Quintela
2014-09-09 13:26 ` Paolo Bonzini
2014-09-09 12:30 ` [Qemu-devel] [PATCH 04/10] pcspk: adding vmstate for save/restore Paolo Bonzini
2014-09-09 13:26 ` Juan Quintela
2014-09-09 13:28 ` Paolo Bonzini
2014-09-10 12:02 ` Michael S. Tsirkin
2014-09-10 10:59 ` Paolo Bonzini
2014-09-10 12:20 ` Michael S. Tsirkin
2014-09-10 11:24 ` Paolo Bonzini
2014-09-09 12:30 ` [Qemu-devel] [PATCH 05/10] fdc: " Paolo Bonzini
2014-09-09 13:29 ` Juan Quintela
2014-09-09 12:30 ` [Qemu-devel] [PATCH 06/10] parallel: " Paolo Bonzini
2014-09-09 13:32 ` Juan Quintela
2014-09-09 13:40 ` Paolo Bonzini
2014-09-10 12:09 ` Michael S. Tsirkin
2014-09-10 11:16 ` Paolo Bonzini
2014-09-09 12:30 ` [Qemu-devel] [PATCH 07/10] serial: fixing " Paolo Bonzini
2014-09-09 13:59 ` Juan Quintela
2014-09-09 16:24 ` Paolo Bonzini
2014-09-10 11:24 ` Pavel Dovgaluk
2014-09-10 10:41 ` Paolo Bonzini
2014-09-09 12:30 ` [Qemu-devel] [PATCH 08/10] pckbd: adding new fields to vmstate Paolo Bonzini
2014-09-09 13:07 ` Juan Quintela
2014-09-10 10:14 ` Paolo Bonzini
2014-09-09 12:30 ` [Qemu-devel] [PATCH 09/10] piix: do not raise irq while loading vmstate Paolo Bonzini
2014-09-09 13:37 ` Juan Quintela
2014-09-09 13:54 ` Michael S. Tsirkin
2014-09-09 17:16 ` Paolo Bonzini
2014-09-09 20:51 ` Michael S. Tsirkin
2014-09-10 8:38 ` Paolo Bonzini
2014-09-10 8:51 ` Peter Maydell
2014-09-10 9:05 ` Paolo Bonzini
2014-09-10 10:20 ` Michael S. Tsirkin
2014-09-10 10:50 ` Michael S. Tsirkin
2014-09-10 9:58 ` Paolo Bonzini
2014-09-10 11:04 ` Michael S. Tsirkin
2014-09-10 10:07 ` Paolo Bonzini
2014-09-10 11:26 ` Michael S. Tsirkin
2014-09-09 12:30 ` [Qemu-devel] [PATCH 10/10] mc146818rtc: add missed field to vmstate Paolo Bonzini
2014-09-09 12:58 ` Juan Quintela
2014-09-10 10:50 ` [Qemu-devel] [PATCH 00/10] x86: migrate more data Paolo Bonzini
2014-09-10 11:56 ` Michael S. Tsirkin
2014-09-10 10:58 ` Paolo Bonzini
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=540F0E08.1030005@redhat.com \
--to=pbonzini@redhat.com \
--cc=Pavel.Dovgaluk@ispras.ru \
--cc=amit.shah@redhat.com \
--cc=dgilbert@redhat.com \
--cc=mst@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=quintela@redhat.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.