VirtualBox

忽略:
時間撮記:
2008-9-17 下午03:11:37 (16 年 以前)
作者:
vboxsync
訊息:

Updates for per-cpu MMIO range registration. (APIC)

檔案:
修改 1 筆資料

圖例:

未更動
新增
刪除
  • trunk/src/VBox/VMM/VMMAll/IOMAllMMIO.cpp

    r11458 r12545  
    8484#endif
    8585
     86    unsigned idCPU = (pRange->enmCtx == MMIO_REGCTX_GLOBAL) ? 0 : pVM->idCPU;
     87    Assert(pRange->u[idCPU].CTXALLSUFF(pDevIns));
     88
    8689    int rc;
    8790    if (RT_LIKELY(pRange->CTXALLSUFF(pfnWriteCallback)))
    88         rc = pRange->CTXALLSUFF(pfnWriteCallback)(pRange->CTXALLSUFF(pDevIns), pRange->CTXALLSUFF(pvUser), GCPhysFault, (void *)pvData, cb); /* @todo fix const!! */
     91        rc = pRange->CTXALLSUFF(pfnWriteCallback)(pRange->u[idCPU].CTXALLSUFF(pDevIns), pRange->u[idCPU].CTXALLSUFF(pvUser), GCPhysFault, (void *)pvData, cb); /* @todo fix const!! */
    8992    else
    9093        rc = VINF_SUCCESS;
     
    104107#endif
    105108
     109    unsigned idCPU = (pRange->enmCtx == MMIO_REGCTX_GLOBAL) ? 0 : pVM->idCPU;
     110    Assert(pRange->u[idCPU].CTXALLSUFF(pDevIns));
     111
    106112    int rc;
    107113    if (RT_LIKELY(pRange->CTXALLSUFF(pfnReadCallback)))
    108         rc = pRange->CTXALLSUFF(pfnReadCallback)(pRange->CTXALLSUFF(pDevIns), pRange->CTXALLSUFF(pvUser), GCPhysFault, pvData, cb);
     114        rc = pRange->CTXALLSUFF(pfnReadCallback)(pRange->u[idCPU].CTXALLSUFF(pDevIns), pRange->u[idCPU].CTXALLSUFF(pvUser), GCPhysFault, pvData, cb);
    109115    else
    110116    {
     
    583589    if (pRange->CTXALLSUFF(pfnFillCallback))
    584590    {
     591        unsigned idCPU = (pRange->enmCtx == MMIO_REGCTX_GLOBAL) ? 0 : pVM->idCPU;
     592        Assert(pRange->u[idCPU].CTXALLSUFF(pDevIns));
     593
    585594        /*
    586595         * Use the fill callback.
     
    590599        {
    591600            /* addr++ variant. */
    592             rc = pRange->CTXALLSUFF(pfnFillCallback)(pRange->CTXALLSUFF(pDevIns), pRange->CTXALLSUFF(pvUser), Phys, u32Data, cb, cTransfers);
     601            rc = pRange->CTXALLSUFF(pfnFillCallback)(pRange->u[idCPU].CTXALLSUFF(pDevIns), pRange->u[idCPU].CTXALLSUFF(pvUser), Phys, u32Data, cb, cTransfers);
    593602            if (rc == VINF_SUCCESS)
    594603            {
     
    602611        {
    603612            /* addr-- variant. */
    604             rc = pRange->CTXALLSUFF(pfnFillCallback)(pRange->CTXALLSUFF(pDevIns), pRange->CTXALLSUFF(pvUser), (Phys - (cTransfers - 1)) << SIZE_2_SHIFT(cb), u32Data, cb, cTransfers);
     613            rc = pRange->CTXALLSUFF(pfnFillCallback)(pRange->u[idCPU].CTXALLSUFF(pDevIns), pRange->u[idCPU].CTXALLSUFF(pvUser), (Phys - (cTransfers - 1)) << SIZE_2_SHIFT(cb), u32Data, cb, cTransfers);
    605614            if (rc == VINF_SUCCESS)
    606615            {
     
    12681277         * Perform the read and deal with the result.
    12691278         */
     1279        unsigned idCPU = (pRange->enmCtx == MMIO_REGCTX_GLOBAL) ? 0 : pVM->idCPU;
     1280        Assert(pRange->u[idCPU].CTXALLSUFF(pDevIns));
     1281
    12701282#ifdef VBOX_WITH_STATISTICS
    12711283        if (pStats)
    12721284            STAM_PROFILE_ADV_START(&pStats->CTXALLSUFF(ProfRead), a);
    12731285#endif
    1274         int rc = pRange->CTXALLSUFF(pfnReadCallback)(pRange->CTXALLSUFF(pDevIns), pRange->CTXALLSUFF(pvUser), GCPhys, pu32Value, cbValue);
     1286        int rc = pRange->CTXALLSUFF(pfnReadCallback)(pRange->u[idCPU].CTXALLSUFF(pDevIns), pRange->u[idCPU].CTXALLSUFF(pvUser), GCPhys, pu32Value, cbValue);
    12751287#ifdef VBOX_WITH_STATISTICS
    12761288        if (pStats)
     
    13751387    if (pRange->CTXALLSUFF(pfnWriteCallback))
    13761388    {
     1389        unsigned idCPU = (pRange->enmCtx == MMIO_REGCTX_GLOBAL) ? 0 : pVM->idCPU;
     1390        Assert(pRange->u[idCPU].CTXALLSUFF(pDevIns));
     1391
    13771392#ifdef VBOX_WITH_STATISTICS
    13781393        if (pStats)
    13791394            STAM_PROFILE_ADV_START(&pStats->CTXALLSUFF(ProfWrite), a);
    13801395#endif
    1381         int rc = pRange->CTXALLSUFF(pfnWriteCallback)(pRange->CTXALLSUFF(pDevIns), pRange->CTXALLSUFF(pvUser), GCPhys, &u32Value, cbValue);
     1396        int rc = pRange->CTXALLSUFF(pfnWriteCallback)(pRange->u[idCPU].CTXALLSUFF(pDevIns), pRange->u[idCPU].CTXALLSUFF(pvUser), GCPhys, &u32Value, cbValue);
    13821397#ifdef VBOX_WITH_STATISTICS
    13831398        if (pStats)
注意: 瀏覽 TracChangeset 來幫助您使用更動檢視器

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