VirtualBox

Changeset 60804 in vbox for trunk/include


Ignore:
Timestamp:
May 3, 2016 2:13:51 PM (9 years ago)
Author:
vboxsync
Message:

VMM: Introduced the new APIC update force-flag and relevant fixes, Win8.1 SMP boots now.
VMM/HMVMXR0: Fixed the HLT exit to use instruction length and also keep the INHIBIT force-flag
more in sync with the VT-x's guest-interruptibility state.

Location:
trunk/include/VBox/vmm
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/include/VBox/vmm/apic.h

    r60689 r60804  
    901901AssertCompileMemberOffset(X2APICPAGE, self_ipi,    X2APIC_OFF_SELF_IPI);
    902902
    903 /**
    904  * APIC Pending Interrupt Bitmap (PIB).
    905  * @note This structure is used in saved-state, careful with changing layout or
    906  *       size!
    907  */
    908 typedef struct APICPIB
    909 {
    910     uint64_t volatile aVectorBitmap[4];
    911     uint32_t volatile fOutstandingNotification;
    912     uint8_t           au8Reserved[28];
    913 } APICPIB;
    914 AssertCompileMemberOffset(APICPIB, fOutstandingNotification, 256 / 8);
    915 AssertCompileSize(APICPIB, 64);
    916 /** Pointer to a pending interrupt bitmap. */
    917 typedef APICPIB *PAPICPIB;
    918 /** Pointer to a const pending interrupt bitmap. */
    919 typedef const APICPIB *PCAPICPIB;
    920 
    921903RT_C_DECLS_BEGIN
    922904
  • trunk/include/VBox/vmm/pdmapi.h

    r60716 r60804  
    5353VMMDECL(VBOXSTRICTRC)   PDMApicSetBaseMsr(PVMCPU pVCpu, uint64_t u64Base);
    5454VMMDECL(VBOXSTRICTRC)   PDMApicGetBaseMsr(PVMCPU pVCpu, uint64_t *pu64Base, bool fIgnoreErrors);
     55VMMDECL(void)           PDMApicUpdateInterrupts(PVMCPU pVCpu);
    5556VMMDECL(int)            PDMApicSetTPR(PVMCPU pVCpu, uint8_t u8TPR);
    5657VMMDECL(int)            PDMApicGetTPR(PVMCPU pVCpu, uint8_t *pu8TPR, bool *pfPending, uint8_t *pu8PendingIntr);
  • trunk/include/VBox/vmm/pdmdev.h

    r60716 r60804  
    13691369    /** ExtINT (HW interrupt via PIC). */
    13701370    PDMAPICIRQ_EXTINT,
     1371    /** Interrupt arrived, needs to be updated to the IRR. */
     1372    PDMAPICIRQ_UPDATE_PENDING,
    13711373    /** The usual 32-bit paranoia. */
    13721374    PDMAPICIRQ_32BIT_HACK = 0x7fffffff
  • trunk/include/VBox/vmm/vm.h

    r60542 r60804  
    132132     *          data could be lumped together at the end with a < 64 byte padding
    133133     *          following it (to grow into and align the struct size).
    134      *   */
     134     */
    135135    uint8_t                 abAlignment1[HC_ARCH_BITS == 64 ? 56 : 12+64];
    136136    /** State data for use by ad hoc profiling. */
     
    372372
    373373
    374 /** This action forces the VM to check any pending interrups on the APIC. */
     374/** This action forces the VM to check any pending interrupts on the APIC. */
    375375#define VMCPU_FF_INTERRUPT_APIC             RT_BIT_32(0)
    376376/** This action forces the VM to check any pending interrups on the PIC. */
     
    393393/** Pending IEM action (mask). */
    394394#define VMCPU_FF_IEM                        RT_BIT_32(VMCPU_FF_IEM_BIT)
     395/** Pending APIC action (bit number). */
     396#define VMCPU_FF_UPDATE_APIC_BIT            8
     397/** This action forces the VM to update APIC's asynchronously arrived
     398 *  interrupts as pending interrupts. */
     399#define VMCPU_FF_UPDATE_APIC                RT_BIT_32(VMCPU_FF_UPDATE_APIC_BIT)
     400
    395401/** This action forces the VM to service pending requests from other
    396402 * thread or requests which must be executed in another context. */
     
    450456                                                 | VM_FF_PDM_QUEUES | VM_FF_PDM_DMA | VM_FF_EMT_RENDEZVOUS)
    451457/** Externally forced VMCPU actions. Used to quit the idle/wait loop. */
    452 #define VMCPU_FF_EXTERNAL_HALTED_MASK           (  VMCPU_FF_INTERRUPT_APIC | VMCPU_FF_INTERRUPT_PIC | VMCPU_FF_REQUEST \
    453                                                  | VMCPU_FF_INTERRUPT_NMI  | VMCPU_FF_INTERRUPT_SMI | VMCPU_FF_UNHALT \
    454                                                  | VMCPU_FF_TIMER)
     458#define VMCPU_FF_EXTERNAL_HALTED_MASK           (  VMCPU_FF_UPDATE_APIC | VMCPU_FF_INTERRUPT_APIC | VMCPU_FF_INTERRUPT_PIC \
     459                                                 | VMCPU_FF_REQUEST     | VMCPU_FF_INTERRUPT_NMI | VMCPU_FF_INTERRUPT_SMI \
     460                                                 | VMCPU_FF_UNHALT      | VMCPU_FF_TIMER)
    455461
    456462/** High priority VM pre-execution actions. */
     
    460466/** High priority VMCPU pre-execution actions. */
    461467#define VMCPU_FF_HIGH_PRIORITY_PRE_MASK         (  VMCPU_FF_TIMER | VMCPU_FF_INTERRUPT_APIC | VMCPU_FF_INTERRUPT_PIC \
     468                                                 | VMCPU_FF_UPDATE_APIC \
    462469                                                 | VMCPU_FF_PGM_SYNC_CR3 | VMCPU_FF_PGM_SYNC_CR3_NON_GLOBAL \
    463470                                                 | VMCPU_FF_INHIBIT_INTERRUPTS \
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette