VirtualBox

Changeset 2646 in vbox for trunk/src/VBox/VMM


Ignore:
Timestamp:
May 15, 2007 11:33:27 AM (18 years ago)
Author:
vboxsync
Message:

Fix for 64-bit Vista host lockup.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/TRPM.cpp

    r2124 r2646  
    11611161    {
    11621162        /*
    1163          * Only replace the 0x2E handler; others need to be called indirectly via a trampoline in our GC handlers
     1163         * Only replace handlers for which we are 100% certain there won't be
     1164         * any host interrupts.
     1165         *
     1166         * 0x2E is safe on Windows because it's the system service interrupt gate. Not
     1167         * quite certain if this is safe or not on 64-bit Vista, it probably is.
     1168         *
     1169         * 0x80 is safe on Linux because it's the syscall vector and is part of the
     1170         * 32-bit usermode ABI. 64-bit Linux (usually) supports 32-bit processes
     1171         * and will therefor never assign hardware interrupts to 0x80.
     1172         *
     1173         * Exactly why 0x80 is safe on 32-bit Windows is a bit hazy, but it seems
     1174         * to work ok... However on 64-bit Vista (SMP?) is doesn't work reliably.
     1175         * Booting Linux/BSD guest will cause system lockups on most of the computers.
     1176         *
     1177         * PORTME - Check if your host keeps any of these gates free from hw ints.
     1178         *
     1179         * Note! SELMR3SyncTSS also has code related to this interrupt handler replacing.
    11641180         */
    1165         /** @note dependencies on trap gate numbers in SELMR3SyncTSS */
    11661181        /** @todo handle those dependencies better! */
    1167 # ifdef _WIN32 /** @todo Solve this in a proper manner. see defect #1186 */
     1182        /** @todo Solve this in a proper manner. see defect #1186 */
     1183#if defined(__WIN__) && defined(__X86__)
    11681184        if (iTrap == 0x2E || iTrap == 0x80)
    1169 # else
     1185#elif defined(__LINUX__)
    11701186        if (iTrap == 0x80)
    1171 # endif
     1187#else
     1188        if (0)
     1189#endif
    11721190        {
    11731191            if (     GuestIdte.Gen.u1Present
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