VirtualBox

Changeset 23198 in vbox


Ignore:
Timestamp:
Sep 21, 2009 4:07:16 PM (16 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
52635
Message:

Fall back to RTMpOnSpecific for those host platforms that don't implement RTMpPokeCpu.

Location:
trunk/src/VBox/VMM/VMMAll
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMAll/HWACCMAll.cpp

    r23167 r23198  
    146146}
    147147
     148
     149/**
     150 * Dummy RTMpOnSpecific handler since RTMpPokeCpu couldn't be used.
     151 *
     152 */
     153static DECLCALLBACK(void) hwaccmFlushHandler(RTCPUID idCpu, void *pvUser1, void *pvUser2)
     154{
     155    return;
     156}
     157
     158
    148159/**
    149160 * Flush the TLBs of all VCPUs
     
    177188            RTCPUID idHostCpu = pVCpu->hwaccm.s.idEnteredCpu;
    178189            if (idHostCpu != NIL_RTCPUID)
    179                 RTMpPokeCpu(idHostCpu);
     190            {
     191                int rc = RTMpPokeCpu(idHostCpu);
     192# ifdef RT_OS_WINDOWS
     193                AssertRC(rc);
     194# else
     195                /* Not implemented on some platforms (Darwin, Linux kernel < 2.6.19); fall back to a less efficient implementation (broadcast). */
     196                if (rc == VERR_NOT_SUPPORTED)
     197                    RTMpOnSpecific(idHostCpu, hwaccmFlushHandler, 0, 0);
     198# endif
     199            }
    180200#else
    181201            VMR3NotifyCpuFFU(pVCpu->pUVCpu, VMNOTIFYFF_FLAGS_POKE);
  • trunk/src/VBox/VMM/VMMAll/PGMAllPool.cpp

    r23145 r23198  
    6464#ifdef LOG_ENABLED
    6565static const char *pgmPoolPoolKindToStr(uint8_t enmKind);
     66#endif
     67#if defined(VBOX_STRICT) && defined(PGMPOOL_WITH_OPTIMIZED_DIRTY_PT)
     68static void pgmPoolTrackCheckPTPaePae(PPGMPOOL pPool, PPGMPOOLPAGE pPage, PX86PTPAE pShwPT, PCX86PTPAE pGstPT);
    6669#endif
    6770
     
    11661169        return VINF_SUCCESS;
    11671170    }
     1171#ifdef PGMPOOL_WITH_OPTIMIZED_DIRTY_PT
     1172    if (pPage->fDirty)
     1173    {
     1174        Assert(VMCPU_FF_ISSET(pVCpu, VMCPU_FF_TLB_FLUSH));
     1175        return VINF_SUCCESS;    /* SMP guest case where we were blocking on the pgm lock while the same page was being marked dirty. */
     1176    }
     1177#endif
     1178
     1179#if defined(VBOX_STRICT) && defined(PGMPOOL_WITH_OPTIMIZED_DIRTY_PT)
     1180    if (pPage->enmKind == PGMPOOLKIND_PAE_PT_FOR_PAE_PT)
     1181    {
     1182        void *pvShw = PGMPOOL_PAGE_2_LOCKED_PTR(pPool->CTX_SUFF(pVM), pPage);
     1183        void *pvGst;
     1184        int rc = PGM_GCPHYS_2_PTR(pPool->CTX_SUFF(pVM), pPage->GCPhys, &pvGst); AssertReleaseRC(rc);
     1185        pgmPoolTrackCheckPTPaePae(pPool, pPage, (PX86PTPAE)pvShw, (PCX86PTPAE)pvGst);
     1186    }
     1187#endif
    11681188
    11691189    /*
     
    11811201     */
    11821202    Assert(pPage->iMonitoredPrev == NIL_PGMPOOL_IDX);
    1183     Assert(!pPage->fDirty);
    11841203
    11851204#ifdef IN_RING0
     
    14211440 * @param   pGstPT      The guest page table.
    14221441 */
    1423 DECLINLINE(void) pgmPoolTrackCheckPTPaePae(PPGMPOOL pPool, PPGMPOOLPAGE pPage, PX86PTPAE pShwPT, PCX86PTPAE pGstPT)
     1442static void pgmPoolTrackCheckPTPaePae(PPGMPOOL pPool, PPGMPOOLPAGE pPage, PX86PTPAE pShwPT, PCX86PTPAE pGstPT)
    14241443{
    14251444    unsigned cErrors = 0;
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