mirror of https://gitee.com/openkylin/qemu.git
apic: save apic_delivered flag
This patch implements saving/restoring of static apic_delivered variable. v8: saving static variable only for one of the APICs Signed-off-by: Pavel Dovgalyuk <pavel.dovgaluk@ispras.ru> Message-Id: <20170126123429.5412.94368.stgit@PASHA-ISP> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
8499c8fca1
commit
07bfa35477
|
@ -385,6 +385,25 @@ static bool apic_common_sipi_needed(void *opaque)
|
|||
return s->wait_for_sipi != 0;
|
||||
}
|
||||
|
||||
static bool apic_irq_delivered_needed(void *opaque)
|
||||
{
|
||||
APICCommonState *s = APIC_COMMON(opaque);
|
||||
return s->cpu == X86_CPU(first_cpu) && apic_irq_delivered != 0;
|
||||
}
|
||||
|
||||
static void apic_irq_delivered_pre_save(void *opaque)
|
||||
{
|
||||
APICCommonState *s = APIC_COMMON(opaque);
|
||||
s->apic_irq_delivered = apic_irq_delivered;
|
||||
}
|
||||
|
||||
static int apic_irq_delivered_post_load(void *opaque, int version_id)
|
||||
{
|
||||
APICCommonState *s = APIC_COMMON(opaque);
|
||||
apic_irq_delivered = s->apic_irq_delivered;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const VMStateDescription vmstate_apic_common_sipi = {
|
||||
.name = "apic_sipi",
|
||||
.version_id = 1,
|
||||
|
@ -397,6 +416,19 @@ static const VMStateDescription vmstate_apic_common_sipi = {
|
|||
}
|
||||
};
|
||||
|
||||
static const VMStateDescription vmstate_apic_irq_delivered = {
|
||||
.name = "apic_irq_delivered",
|
||||
.version_id = 1,
|
||||
.minimum_version_id = 1,
|
||||
.needed = apic_irq_delivered_needed,
|
||||
.pre_save = apic_irq_delivered_pre_save,
|
||||
.post_load = apic_irq_delivered_post_load,
|
||||
.fields = (VMStateField[]) {
|
||||
VMSTATE_INT32(apic_irq_delivered, APICCommonState),
|
||||
VMSTATE_END_OF_LIST()
|
||||
}
|
||||
};
|
||||
|
||||
static const VMStateDescription vmstate_apic_common = {
|
||||
.name = "apic",
|
||||
.version_id = 3,
|
||||
|
@ -431,6 +463,7 @@ static const VMStateDescription vmstate_apic_common = {
|
|||
},
|
||||
.subsections = (const VMStateDescription*[]) {
|
||||
&vmstate_apic_common_sipi,
|
||||
&vmstate_apic_irq_delivered,
|
||||
NULL
|
||||
}
|
||||
};
|
||||
|
|
|
@ -189,6 +189,8 @@ struct APICCommonState {
|
|||
DeviceState *vapic;
|
||||
hwaddr vapic_paddr; /* note: persistence via kvmvapic */
|
||||
bool legacy_instance_id;
|
||||
|
||||
int apic_irq_delivered; /* for saving static variable */
|
||||
};
|
||||
|
||||
typedef struct VAPICState {
|
||||
|
|
Loading…
Reference in New Issue