VirtualBox

Opened 15 years ago

Last modified 14 years ago

#2573 closed defect

Local APIC timer dies — at Version 1

Reported by: Vladimir Owned by:
Component: other Version: VirtualBox 2.0.4
Keywords: Cc:
Guest type: other Host type: other

Description (last modified by Frank Mehnert)

An APIC timer is initialized as periodic:

// lapic_base: u32_t *lapic_base;

    // Disable timer first
    lapic_base[APIC_DWREG_LVT_TMR]      = APIC_TIMER_VECTOR |
                                          APIC_LVT_D_STAT_IDLE |
                                          APIC_LVT_TMR_PERIODIC |
                                          APIC_LVT_TRIGGER_LEVEL |
                                          APIC_LVT_MASK;
    // Write counters
    lapic_base[APIC_DWREG_TMR_DIVIDE]   = div;
    lapic_base[APIC_DWREG_TMR_INIT]     = counter;

    // Enable if it is enabled in configruation
    if (enabled)
        lapic_base[APIC_DWREG_LVT_TMR]  = APIC_TIMER_VECTOR |
                                          APIC_LVT_D_STAT_IDLE |
                                          APIC_LVT_TRIGGER_LEVEL |
                                          APIC_LVT_TMR_PERIODIC;

Timer interrupt is ok (a counter in a handler is periodically incremented). Then a system is sending INIT IPI:

lapic_base[APIC_DWREG_ICR0] = APIC_ICR0_DST_ALL_NO_SELF |
                              APIC_ICR0_D_MODE_INIT;

And whoops... A timer dies. And no timer re-initialization helps.

Change History (1)

comment:1 by Frank Mehnert, 15 years ago

Description: modified (diff)
Note: See TracTickets for help on using tickets.

© 2023 Oracle
ContactPrivacy policyTerms of Use