~ubuntu-branches/ubuntu/vivid/virtualbox-ose/vivid

« back to all changes in this revision

Viewing changes to src/VBox/VMM/VMMR0/HWSVMR0.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Felix Geyer
  • Date: 2009-10-13 23:06:00 UTC
  • mfrom: (0.3.2 upstream) (0.1.12 sid)
  • Revision ID: james.westby@ubuntu.com-20091013230600-xhu2pwizq0wo63l9
Tags: 3.0.8-dfsg-1ubuntu1
* Merge from debian unstable (LP: #444812), remaining changes:
  - Enable DKMS support on virtualbox host and guest modules (LP: #267097)
    - Drop virtualbox-ose{-guest,}-modules-* package templates
    - Recommend *-source instead of *-modules packages
    - Replace error messages related to missing/mismatched
      kernel module accordingly
  - Autoload kernel module
    - LOAD_VBOXDRV_MODULE=1 in virtualbox-ose.default
  - Disable update action
    - patches/u01-disable-update-action.dpatch
  - Virtualbox should go in Accessories, not in System tools (LP: #288590)
    - virtualbox-ose-qt.files/virtualbox-ose.desktop
  - Add apport hook
    - virtualbox-ose.files/source_virtualbox-ose.py
    - virtualbox-ose.install
  - Add launchpad integration
    - control
    - lpi-bug.xpm
    - patches/u02-lp-integration.dpatch
* Try to remove existing dkms modules before adding the new modules
  (LP: #434503)
  - debian/virtualbox-ose-source.postinst
  - debian/virtualbox-ose-guest-source.postinst
* Don't fail if dkms modules have already been removed
  - debian/virtualbox-ose-source.prerm
  - debian/virtualbox-ose-guest-source.prerm

Show diffs side-by-side

added added

removed removed

Lines of Context:
2407
2407
        break;
2408
2408
    }
2409
2409
 
 
2410
    case SVM_EXIT_TASK_SWITCH:          /* too complicated to emulate, so fall back to the recompiler*/
 
2411
        Log(("SVM_EXIT_TASK_SWITCH: exit2=%RX64\n", pVMCB->ctrl.u64ExitInfo2));
 
2412
        if (    !(pVMCB->ctrl.u64ExitInfo2 & (SVM_EXIT2_TASK_SWITCH_IRET | SVM_EXIT2_TASK_SWITCH_JMP))
 
2413
            &&  pVCpu->hwaccm.s.Event.fPending)
 
2414
        {
 
2415
            SVM_EVENT Event;
 
2416
 
 
2417
            Event.au64[0] = pVCpu->hwaccm.s.Event.intInfo;
 
2418
 
 
2419
            /* Caused by an injected interrupt. */
 
2420
            pVCpu->hwaccm.s.Event.fPending = false;
 
2421
 
 
2422
            switch (Event.n.u3Type)
 
2423
            {
 
2424
            case SVM_EVENT_EXTERNAL_IRQ:
 
2425
            case SVM_EVENT_NMI:
 
2426
                Log(("SVM_EXIT_TASK_SWITCH: reassert trap %d\n", Event.n.u8Vector));
 
2427
                Assert(!Event.n.u1ErrorCodeValid);
 
2428
                rc = TRPMAssertTrap(pVCpu, Event.n.u8Vector, TRPM_HARDWARE_INT);
 
2429
                AssertRC(rc);
 
2430
                break;
 
2431
 
 
2432
            default:
 
2433
                /* Exceptions and software interrupts can just be restarted. */
 
2434
                break;
 
2435
            }
 
2436
        }
 
2437
        rc = VERR_EM_INTERPRETER;
 
2438
        break;
 
2439
 
2410
2440
    case SVM_EXIT_MONITOR:
2411
2441
    case SVM_EXIT_PAUSE:
2412
2442
    case SVM_EXIT_MWAIT_ARMED:
2413
 
    case SVM_EXIT_TASK_SWITCH:          /* can change CR3; emulate */
2414
2443
        rc = VERR_EM_INTERPRETER;
2415
2444
        break;
2416
2445