@ -107,7 +107,7 @@ static void apic_sync_vapic(APICCommonState *s, int sync_type)
length = offsetof ( VAPICState , enabled ) - offsetof ( VAPICState , isr ) ;
if ( sync_type & SYNC_TO_VAPIC ) {
assert ( qemu_cpu_is_self ( s - > cpu_ env ) ) ;
assert ( qemu_cpu_is_self ( & s - > cpu - > env ) ) ;
vapic_state . tpr = s - > tpr ;
vapic_state . enabled = 1 ;
@ -151,15 +151,15 @@ static void apic_local_deliver(APICCommonState *s, int vector)
switch ( ( lvt > > 8 ) & 7 ) {
case APIC_DM_SMI :
cpu_interrupt ( s - > cpu_ env , CPU_INTERRUPT_SMI ) ;
cpu_interrupt ( & s - > cpu - > env , CPU_INTERRUPT_SMI ) ;
break ;
case APIC_DM_NMI :
cpu_interrupt ( s - > cpu_ env , CPU_INTERRUPT_NMI ) ;
cpu_interrupt ( & s - > cpu - > env , CPU_INTERRUPT_NMI ) ;
break ;
case APIC_DM_EXTINT :
cpu_interrupt ( s - > cpu_ env , CPU_INTERRUPT_HARD ) ;
cpu_interrupt ( & s - > cpu - > env , CPU_INTERRUPT_HARD ) ;
break ;
case APIC_DM_FIXED :
@ -187,7 +187,7 @@ void apic_deliver_pic_intr(DeviceState *d, int level)
reset_bit ( s - > irr , lvt & 0xff ) ;
/* fall through */
case APIC_DM_EXTINT :
cpu_reset_interrupt ( s - > cpu_ env , CPU_INTERRUPT_HARD ) ;
cpu_reset_interrupt ( & s - > cpu - > env , CPU_INTERRUPT_HARD ) ;
break ;
}
}
@ -248,18 +248,22 @@ static void apic_bus_deliver(const uint32_t *deliver_bitmask,
case APIC_DM_SMI :
foreach_apic ( apic_iter , deliver_bitmask ,
cpu_interrupt ( apic_iter - > cpu_env , CPU_INTERRUPT_SMI ) ) ;
cpu_interrupt ( & apic_iter - > cpu - > env , CPU_INTERRUPT_SMI )
) ;
return ;
case APIC_DM_NMI :
foreach_apic ( apic_iter , deliver_bitmask ,
cpu_interrupt ( apic_iter - > cpu_env , CPU_INTERRUPT_NMI ) ) ;
cpu_interrupt ( & apic_iter - > cpu - > env , CPU_INTERRUPT_NMI )
) ;
return ;
case APIC_DM_INIT :
/* normal INIT IPI sent to processors */
foreach_apic ( apic_iter , deliver_bitmask ,
cpu_interrupt ( apic_iter - > cpu_env , CPU_INTERRUPT_INIT ) ) ;
cpu_interrupt ( & apic_iter - > cpu - > env ,
CPU_INTERRUPT_INIT )
) ;
return ;
case APIC_DM_EXTINT :
@ -293,7 +297,7 @@ static void apic_set_base(APICCommonState *s, uint64_t val)
/* if disabled, cannot be enabled again */
if ( ! ( val & MSR_IA32_APICBASE_ENABLE ) ) {
s - > apicbase & = ~ MSR_IA32_APICBASE_ENABLE ;
cpu_clear_apic_feature ( s - > cpu_ env ) ;
cpu_clear_apic_feature ( & s - > cpu - > env ) ;
s - > spurious_vec & = ~ APIC_SV_ENABLE ;
}
}
@ -362,10 +366,10 @@ static void apic_update_irq(APICCommonState *s)
if ( ! ( s - > spurious_vec & APIC_SV_ENABLE ) ) {
return ;
}
if ( ! qemu_cpu_is_self ( s - > cpu_ env ) ) {
cpu_interrupt ( s - > cpu_ env , CPU_INTERRUPT_POLL ) ;
if ( ! qemu_cpu_is_self ( & s - > cpu - > env ) ) {
cpu_interrupt ( & s - > cpu - > env , CPU_INTERRUPT_POLL ) ;
} else if ( apic_irq_pending ( s ) > 0 ) {
cpu_interrupt ( s - > cpu_ env , CPU_INTERRUPT_HARD ) ;
cpu_interrupt ( & s - > cpu - > env , CPU_INTERRUPT_HARD ) ;
}
}
@ -472,18 +476,18 @@ static void apic_get_delivery_bitmask(uint32_t *deliver_bitmask,
static void apic_startup ( APICCommonState * s , int vector_num )
{
s - > sipi_vector = vector_num ;
cpu_interrupt ( s - > cpu_ env , CPU_INTERRUPT_SIPI ) ;
cpu_interrupt ( & s - > cpu - > env , CPU_INTERRUPT_SIPI ) ;
}
void apic_sipi ( DeviceState * d )
{
APICCommonState * s = DO_UPCAST ( APICCommonState , busdev . qdev , d ) ;
cpu_reset_interrupt ( s - > cpu_ env , CPU_INTERRUPT_SIPI ) ;
cpu_reset_interrupt ( & s - > cpu - > env , CPU_INTERRUPT_SIPI ) ;
if ( ! s - > wait_for_sipi )
return ;
cpu_x86_load_seg_cache_sipi ( s - > cpu_ env , s - > sipi_vector ) ;
cpu_x86_load_seg_cache_sipi ( & s - > cpu - > env , s - > sipi_vector ) ;
s - > wait_for_sipi = 0 ;
}
@ -672,7 +676,7 @@ static uint32_t apic_mem_readl(void *opaque, hwaddr addr)
case 0x08 :
apic_sync_vapic ( s , SYNC_FROM_VAPIC ) ;
if ( apic_report_tpr_access ) {
cpu_report_tpr_access ( s - > cpu_ env , TPR_ACCESS_READ ) ;
cpu_report_tpr_access ( & s - > cpu - > env , TPR_ACCESS_READ ) ;
}
val = s - > tpr ;
break ;
@ -774,7 +778,7 @@ static void apic_mem_writel(void *opaque, hwaddr addr, uint32_t val)
break ;
case 0x08 :
if ( apic_report_tpr_access ) {
cpu_report_tpr_access ( s - > cpu_ env , TPR_ACCESS_WRITE ) ;
cpu_report_tpr_access ( & s - > cpu - > env , TPR_ACCESS_WRITE ) ;
}
s - > tpr = val ;
apic_sync_vapic ( s , SYNC_TO_VAPIC ) ;