[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH 06/12] kvmvapic: fixing loading vmstate
From: |
Paolo Bonzini |
Subject: |
Re: [Qemu-devel] [PATCH 06/12] kvmvapic: fixing loading vmstate |
Date: |
Wed, 27 Aug 2014 15:22:02 +0200 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.0 |
Il 27/08/2014 15:03, Pavel Dovgaluk ha scritto:
>> > Hmm, probably not. The bug would not be other timers accessing the
>> > APIC, because that would also call apic_sync_vapic and the only effect
>> > would be an extra useless synchronization. The bug would happen if the
>> > APIC is accessed by the CPU before the timer has the occasion to run.
> Sorry, but I don't understand which problem we will solve with
> apic_sync_vapic.
In KVM mode, it is not a problem to call apic_enable_vapic before APIC
state is loaded; all vapic processing is delayed anyway to after the
VCPUs are started.
In TCG mode, apic_enable_vapic calls apic_sync_vapic.
Taking inspiration from what KVM does, the fix could be even simpler
than a change state handler. run_on_cpu functions do not run while the
VM is stopped, so the following should work:
diff --git a/hw/intc/apic_common.c b/hw/intc/apic_common.c
index ce3d903..81d1ad7 100644
--- a/hw/intc/apic_common.c
+++ b/hw/intc/apic_common.c
@@ -91,13 +91,20 @@ void apic_enable_tpr_access_reporting(DeviceState
*dev, bool enable)
}
}
+static void do_apic_enable_vapic(void *data)
+{
+ APICCommonState *s = APIC_COMMON(data);
+ APICCommonClass *info = APIC_COMMON_GET_CLASS(s);
+
+ info->vapic_base_update(s);
+}
+
void apic_enable_vapic(DeviceState *dev, hwaddr paddr)
{
APICCommonState *s = APIC_COMMON(dev);
- APICCommonClass *info = APIC_COMMON_GET_CLASS(s);
s->vapic_paddr = paddr;
- info->vapic_base_update(s);
+ run_on_cpu(CPU(s->cpu), do_apic_enable_vapic, s);
}
void apic_handle_tpr_access_report(DeviceState *dev, target_ulong ip,
> All fields that were added to vmstate are not affected by this function.
The sipi_vector and wait_for_sipi parts of this patch are okay. You
should split those in a separate patch.
Paolo
- Re: [Qemu-devel] [PATCH 03/12] fdc: adding vmstate for save/restore, (continued)
[Qemu-devel] [PATCH 07/12] hpet: fixing saving and loading process, Pavel Dovgalyuk, 2014/08/26
[Qemu-devel] [PATCH 08/12] pckbd: adding new fields to vmstate, Pavel Dovgalyuk, 2014/08/26
[Qemu-devel] [PATCH 09/12] rtl8139: adding new fields to vmstate, Pavel Dovgalyuk, 2014/08/26
- Re: [Qemu-devel] [PATCH 09/12] rtl8139: adding new fields to vmstate, Paolo Bonzini, 2014/08/26
- Re: [Qemu-devel] [PATCH 09/12] rtl8139: adding new fields to vmstate, Pavel Dovgaluk, 2014/08/27
- Re: [Qemu-devel] [PATCH 09/12] rtl8139: adding new fields to vmstate, Paolo Bonzini, 2014/08/27
- Re: [Qemu-devel] [PATCH 09/12] rtl8139: adding new fields to vmstate, Pavel Dovgaluk, 2014/08/27
- Re: [Qemu-devel] [PATCH 09/12] rtl8139: adding new fields to vmstate, Paolo Bonzini, 2014/08/27
- Re: [Qemu-devel] [PATCH 09/12] rtl8139: adding new fields to vmstate, Pavel Dovgaluk, 2014/08/27