VirtualBox

Changeset 55034 in vbox


Ignore:
Timestamp:
Mar 31, 2015 1:41:56 PM (10 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
99319
Message:

VMM: Added VMCPU_FF_UNHALT force-flag.

Location:
trunk
Files:
3 edited

Legend:

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

    r54898 r55034  
    371371/** PDM critical section unlocking is pending, process promptly upon return to R3. */
    372372#define VMCPU_FF_PDM_CRITSECT               RT_BIT_32(5)
     373/** This action forces the VCPU out of the halted state. */
     374#define VMCPU_FF_UNHALT                     RT_BIT_32(6)
    373375/** This action forces the VM to service pending requests from other
    374376 * thread or requests which must be executed in another context. */
     
    429431/** Externally forced VMCPU actions. Used to quit the idle/wait loop. */
    430432#define VMCPU_FF_EXTERNAL_HALTED_MASK           (  VMCPU_FF_INTERRUPT_APIC | VMCPU_FF_INTERRUPT_PIC | VMCPU_FF_REQUEST \
    431                                                  | VMCPU_FF_INTERRUPT_NMI  | VMCPU_FF_INTERRUPT_SMI | VMCPU_FF_TIMER)
     433                                                 | VMCPU_FF_INTERRUPT_NMI  | VMCPU_FF_INTERRUPT_SMI | VMCPU_FF_UNHALT \
     434                                                 | VMCPU_FF_TIMER)
    432435
    433436/** High priority VM pre-execution actions. */
     
    466469                                                 | VM_FF_EMT_RENDEZVOUS)
    467470/** Normal priority VMCPU actions. */
    468 #define VMCPU_FF_NORMAL_PRIORITY_MASK           (VMCPU_FF_REQUEST)
     471#define VMCPU_FF_NORMAL_PRIORITY_MASK           (VMCPU_FF_REQUEST | VMCPU_FF_UNHALT)
    469472
    470473/** Flags to clear before resuming guest execution. */
  • trunk/src/VBox/VMM/VMMR3/EM.cpp

    r55001 r55034  
    18551855        }
    18561856
     1857        /*
     1858         * Forced unhalting of EMT.
     1859         */
     1860        if (VMCPU_FF_IS_PENDING(pVCpu, VMCPU_FF_UNHALT))
     1861        {
     1862            VMCPU_FF_CLEAR(pVCpu, VMCPU_FF_UNHALT);
     1863            if (rc == VINF_EM_HALT)
     1864            {
     1865                rc2 = VINF_EM_RESCHEDULE;
     1866                UPDATE_RC();
     1867            }
     1868        }
     1869
    18571870        /* check that we got them all  */
    1858         Assert(!(VMCPU_FF_NORMAL_PRIORITY_MASK & ~(VMCPU_FF_REQUEST)));
     1871        Assert(!(VMCPU_FF_NORMAL_PRIORITY_MASK & ~(VMCPU_FF_REQUEST | VMCPU_FF_UNHALT)));
    18591872    }
    18601873
     
    25512564                        if (   rc == VINF_SUCCESS
    25522565                            && VMCPU_FF_IS_PENDING(pVCpu, VMCPU_FF_INTERRUPT_APIC | VMCPU_FF_INTERRUPT_PIC
    2553                                                         | VMCPU_FF_INTERRUPT_NMI  | VMCPU_FF_INTERRUPT_SMI))
     2566                                                        | VMCPU_FF_INTERRUPT_NMI  | VMCPU_FF_INTERRUPT_SMI | VMCPU_FF_UNHALT))
    25542567                        {
    25552568                            Log(("EMR3ExecuteVM: Triggering reschedule on pending IRQ after MWAIT\n"));
     
    25612574                        rc = VMR3WaitHalted(pVM, pVCpu, !(CPUMGetGuestEFlags(pVCpu) & X86_EFL_IF));
    25622575                        if (   rc == VINF_SUCCESS
    2563                             && VMCPU_FF_IS_PENDING(pVCpu, VMCPU_FF_INTERRUPT_NMI | VMCPU_FF_INTERRUPT_SMI))
     2576                            && VMCPU_FF_IS_PENDING(pVCpu, VMCPU_FF_INTERRUPT_NMI | VMCPU_FF_INTERRUPT_SMI | VMCPU_FF_UNHALT))
    25642577                        {
    2565                             Log(("EMR3ExecuteVM: Triggering reschedule on pending NMI/SMI after HLT\n"));
     2578                            Log(("EMR3ExecuteVM: Triggering reschedule on pending NMI/SMI/UNHALT after HLT\n"));
    25662579                            rc = VINF_EM_RESCHEDULE;
    25672580                        }
  • trunk/src/VBox/VMM/VMMR3/VMM.cpp

    r54737 r55034  
    24112411        PRINT_FLAG(VMCPU_FF_,INTERRUPT_SMI);
    24122412        PRINT_FLAG(VMCPU_FF_,PDM_CRITSECT);
     2413        PRINT_FLAG(VMCPU_FF_,UNHALT);
    24132414        PRINT_FLAG(VMCPU_FF_,REQUEST);
    24142415        PRINT_FLAG(VMCPU_FF_,HM_UPDATE_CR3);
Note: See TracChangeset for help on using the changeset viewer.

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