X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=palacios%2Fsrc%2Fdevices%2Fapic.c;h=6fdce71bc0395216576ec846ddef3ab8e7541596;hb=2201970a66ded078c9228c9e4053189a00f0a882;hp=d4343d260b63d8b249c6689cd76f0890f83f2511;hpb=33717ee76445b728dfa74df98863f14118c8d41d;p=palacios.git diff --git a/palacios/src/devices/apic.c b/palacios/src/devices/apic.c index d4343d2..6fdce71 100644 --- a/palacios/src/devices/apic.c +++ b/palacios/src/devices/apic.c @@ -24,7 +24,7 @@ #include -#ifndef DEBUG_APIC +#ifndef CONFIG_DEBUG_APIC #undef PrintDebug #define PrintDebug(fmt, args...) #endif @@ -333,11 +333,11 @@ static int apic_do_eoi(struct apic_state * apic) { uchar_t flag = 0x1 << minor_offset; uchar_t * svc_location = apic->int_svc_reg + major_offset; - PrintDebug("Received APIC EOI\n"); + PrintDebug("Received APIC EOI for IRQ %d\n", isr_irq); *svc_location &= ~flag; -#ifdef CRAY_XT +#ifdef CONFIG_CRAY_XT if ((isr_irq == 238) || (isr_irq == 239)) { @@ -875,7 +875,7 @@ static int apic_get_intr_number(void * private_data) { } static int apic_raise_intr(void * private_data, int irq) { -#ifdef CRAY_XT +#ifdef CONFIG_CRAY_XT // The Seastar is connected directly to the LAPIC via LINT0 on the ICC bus if (irq == 238) { @@ -904,7 +904,7 @@ static int apic_begin_irq(void * private_data, int irq) { *svc_location |= flag; *req_location &= ~flag; -#ifdef CRAY_XT +#ifdef CONFIG_CRAY_XT if ((irq == 238) || (irq == 239)) { PrintError("APIC: Begin IRQ %d (ISR=%x), (IRR=%x)\n", irq, *svc_location, *req_location); } @@ -979,7 +979,7 @@ static void apic_update_time(ullong_t cpu_cycles, ullong_t cpu_freq, void * priv } tmr_ticks = cpu_cycles >> shift_num; - PrintDebug("Timer Ticks: %p\n", (void *)tmr_ticks); + // PrintDebug("Timer Ticks: %p\n", (void *)tmr_ticks); if (tmr_ticks < apic->tmr_cur_cnt) { apic->tmr_cur_cnt -= tmr_ticks; @@ -991,6 +991,10 @@ static void apic_update_time(ullong_t cpu_cycles, ullong_t cpu_freq, void * priv PrintDebug("Raising APIC Timer interrupt (periodic=%d) (icnt=%d) (div=%d)\n", apic->tmr_vec_tbl.tmr_mode, apic->tmr_init_cnt, shift_num); + if (apic_intr_pending(priv_data)) { + PrintDebug("Overriding pending IRQ %d\n", apic_get_intr_number(priv_data)); + } + if (activate_internal_irq(apic, APIC_TMR_INT) == -1) { PrintError("Could not raise Timer interrupt\n"); } @@ -1066,4 +1070,4 @@ static int apic_init(struct guest_info * vm, void * cfg_data) { -device_register("LAPIC", &apic_init) +device_register("LAPIC", apic_init)