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