VirtualBox

Changeset 66006 in vbox


Ignore:
Timestamp:
Mar 8, 2017 9:49:43 PM (8 years ago)
Author:
vboxsync
Message:

Wrap entering/leaving the per controller lock to save a few code lines by avoiding replicating the profiling code again and again

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/Storage/DevATA.cpp

    r65997 r66006  
    11411141
    11421142# ifdef IN_RING3
     1143
     1144/**
     1145 * Enters the lock protecting the controller data against concurrent access.
     1146 *
     1147 * @returns nothing.
     1148 * @param   pCtl        The controller to lock.
     1149 */
     1150DECLINLINE(void) ataR3LockEnter(PATACONTROLLER pCtl)
     1151{
     1152    STAM_PROFILE_START(&pCtl->StatLockWait, a);
     1153    PDMCritSectEnter(&pCtl->lock, VINF_SUCCESS);
     1154    STAM_PROFILE_STOP(&pCtl->StatLockWait, a);
     1155}
     1156
     1157/**
     1158 * Leaves the lock protecting the controller against concurrent data access.
     1159 *
     1160 * @returns nothing.
     1161 * @param   pCtl        The controller to unlock.
     1162 */
     1163DECLINLINE(void) ataR3LockLeave(PATACONTROLLER pCtl)
     1164{
     1165    PDMCritSectLeave(&pCtl->lock);
     1166}
    11431167
    11441168static uint32_t ataR3GetNSectors(ATADevState *s)
     
    13601384    Assert(!s->cbElementaryTransfer);
    13611385
    1362     PDMCritSectLeave(&pCtl->lock);
     1386    ataR3LockLeave(pCtl);
    13631387
    13641388    STAM_PROFILE_START(&s->StatFlushes, f);
     
    13671391    STAM_PROFILE_STOP(&s->StatFlushes, f);
    13681392
    1369     STAM_PROFILE_START(&pCtl->StatLockWait, a);
    1370     PDMCritSectEnter(&pCtl->lock, VINF_SUCCESS);
    1371     STAM_PROFILE_STOP(&pCtl->StatLockWait, a);
     1393    ataR3LockEnter(pCtl);
    13721394    ataR3CmdOK(s, 0);
    13731395    return false;
     
    15991621    int rc;
    16001622
    1601     PDMCritSectLeave(&pCtl->lock);
     1623    ataR3LockLeave(pCtl);
    16021624
    16031625    STAM_PROFILE_ADV_START(&s->StatReads, r);
     
    16161638        *pfRedo = ataR3IsRedoSetWarning(s, rc);
    16171639
    1618     STAM_PROFILE_START(&pCtl->StatLockWait, a);
    1619     PDMCritSectEnter(&pCtl->lock, VINF_SUCCESS);
    1620     STAM_PROFILE_STOP(&pCtl->StatLockWait, a);
     1640    ataR3LockEnter(pCtl);
    16211641    return rc;
    16221642}
     
    16291649    int rc;
    16301650
    1631     PDMCritSectLeave(&pCtl->lock);
     1651    ataR3LockLeave(pCtl);
    16321652
    16331653    STAM_PROFILE_ADV_START(&s->StatWrites, w);
     
    16541674        *pfRedo = ataR3IsRedoSetWarning(s, rc);
    16551675
    1656     STAM_PROFILE_START(&pCtl->StatLockWait, a);
    1657     PDMCritSectEnter(&pCtl->lock, VINF_SUCCESS);
    1658     STAM_PROFILE_STOP(&pCtl->StatLockWait, a);
     1676    ataR3LockEnter(pCtl);
    16591677    return rc;
    16601678}
     
    18291847    Log(("%s: %d sectors at LBA %d\n", __FUNCTION__, cSectors, s->iATAPILBA));
    18301848
    1831     PDMCritSectLeave(&pCtl->lock);
     1849    ataR3LockLeave(pCtl);
    18321850
    18331851    STAM_PROFILE_ADV_START(&s->StatReads, r);
     
    18751893    STAM_PROFILE_ADV_STOP(&s->StatReads, r);
    18761894
    1877     STAM_PROFILE_START(&pCtl->StatLockWait, a);
    1878     PDMCritSectEnter(&pCtl->lock, VINF_SUCCESS);
    1879     STAM_PROFILE_STOP(&pCtl->StatLockWait, a);
     1895    ataR3LockEnter(pCtl);
    18801896
    18811897    if (RT_SUCCESS(rc))
     
    19441960    }
    19451961
    1946     PDMCritSectLeave(&pCtl->lock);
     1962    ataR3LockLeave(pCtl);
    19471963
    19481964# if defined(LOG_ENABLED)
     
    20172033                    LogRel(("PIIX3 ATA: LUN#%d: CD-ROM passthrough split error\n", s->iLUN));
    20182034                atapiR3CmdErrorSimple(s, SCSI_SENSE_ILLEGAL_REQUEST, SCSI_ASC_ILLEGAL_OPCODE);
    2019                 {
    2020                 STAM_PROFILE_START(&pCtl->StatLockWait, a);
    2021                 PDMCritSectEnter(&pCtl->lock, VINF_SUCCESS);
    2022                 STAM_PROFILE_STOP(&pCtl->StatLockWait, a);
    2023                 }
     2035                ataR3LockEnter(pCtl);
    20242036                return false;
    20252037        }
     
    21022114    if (pProf) { STAM_PROFILE_ADV_STOP(pProf, b); }
    21032115
    2104     STAM_PROFILE_START(&pCtl->StatLockWait, a);
    2105     PDMCritSectEnter(&pCtl->lock, VINF_SUCCESS);
    2106     STAM_PROFILE_STOP(&pCtl->StatLockWait, a);
     2116    ataR3LockEnter(pCtl);
    21072117
    21082118    /* Update the LEDs and the read/write statistics. */
     
    32603270                    PCIATAState *pThis = PDMINS_2_DATA(pDevIns, PCIATAState *);
    32613271
    3262                     PDMCritSectLeave(&pCtl->lock);
     3272                    ataR3LockLeave(pCtl);
    32633273                    rc = VMR3ReqPriorityCallWait(PDMDevHlpGetVM(pDevIns), VMCPUID_ANY,
    32643274                                                 (PFNRT)s->pDrvMount->pfnUnmount, 3,
     
    32723282                        AssertRC(rc);
    32733283                    }
    3274                     {
    3275                         STAM_PROFILE_START(&pCtl->StatLockWait, a);
    3276                         PDMCritSectEnter(&pCtl->lock, VINF_SUCCESS);
    3277                         STAM_PROFILE_STOP(&pCtl->StatLockWait, a);
    3278                     }
     3284
     3285                    ataR3LockEnter(pCtl);
    32793286                    break;
    32803287                }
     
    36393646    int rc;
    36403647
    3641     PDMCritSectLeave(&pCtl->lock);
     3648    ataR3LockLeave(pCtl);
    36423649
    36433650    TrimRange.offStart = u64Sector * s->cbSector;
     
    36533660        *pfRedo = ataR3IsRedoSetWarning(s, rc);
    36543661
    3655     STAM_PROFILE_START(&pCtl->StatLockWait, a);
    3656     PDMCritSectEnter(&pCtl->lock, VINF_SUCCESS);
    3657     STAM_PROFILE_STOP(&pCtl->StatLockWait, a);
     3662    ataR3LockEnter(pCtl);
    36583663    return rc;
    36593664}
     
    42214226#ifdef IN_RING3
    42224227                cBusy = 0;
    4223                 PDMCritSectLeave(&pCtl->lock);
     4228                ataR3LockLeave(pCtl);
    42244229
    42254230#ifndef RT_OS_WINDOWS
     
    42514256                RTThreadYield();
    42524257
    4253                 {
    4254                     STAM_PROFILE_START(&pCtl->StatLockWait, a);
    4255                     PDMCritSectEnter(&pCtl->lock, VINF_SUCCESS);
    4256                     STAM_PROFILE_STOP(&pCtl->StatLockWait, a);
    4257                 }
     4258                ataR3LockEnter(pCtl);
    42584259
    42594260                val = s->uATARegStatus;
     
    49704971     * necessary. This avoids long freezes should the guest access the
    49714972     * ATA registers etc. for some reason. */
    4972     PDMCritSectLeave(&pCtl->lock);
     4973    ataR3LockLeave(pCtl);
    49734974
    49744975    Log2(("%s: %s tx_size=%d elem_tx_size=%d index=%d end=%d\n",
     
    50285029                    cbElementaryTransfer = cbTotalTransfer;
    50295030
    5030                 {
    5031                 STAM_PROFILE_START(&pCtl->StatLockWait, a);
    5032                 PDMCritSectEnter(&pCtl->lock, VINF_SUCCESS);
    5033                 STAM_PROFILE_STOP(&pCtl->StatLockWait, a);
    5034                 }
     5031                ataR3LockEnter(pCtl);
    50355032
    50365033                /* The RESET handler could have cleared the DMA transfer
     
    50715068                }
    50725069
    5073                 PDMCritSectLeave(&pCtl->lock);
     5070                ataR3LockLeave(pCtl);
    50745071                if (RT_UNLIKELY(fRedo))
    50755072                    break;
     
    50845081            break;
    50855082
    5086         {
    5087         STAM_PROFILE_START(&pCtl->StatLockWait, a);
    5088         PDMCritSectEnter(&pCtl->lock, VINF_SUCCESS);
    5089         STAM_PROFILE_STOP(&pCtl->StatLockWait, a);
    5090         }
     5083        ataR3LockEnter(pCtl);
    50915084
    50925085        if (!(pCtl->BmDma.u8Cmd & BM_CMD_START) || pCtl->fReset)
     
    50995092        }
    51005093
    5101         PDMCritSectLeave(&pCtl->lock);
    5102     }
    5103 
    5104     {
    5105     STAM_PROFILE_START(&pCtl->StatLockWait, a);
    5106     PDMCritSectEnter(&pCtl->lock, VINF_SUCCESS);
    5107     STAM_PROFILE_STOP(&pCtl->StatLockWait, a);
    5108     }
    5109 
     5094        ataR3LockLeave(pCtl);
     5095    }
     5096
     5097    ataR3LockEnter(pCtl);
    51105098    if (RT_UNLIKELY(fRedo))
    51115099        return;
     
    52285216
    52295217        /* Do our work.  */
    5230         {
    5231         STAM_PROFILE_START(&pCtl->StatLockWait, a);
    5232         PDMCritSectEnter(&pCtl->lock, VINF_SUCCESS);
    5233         STAM_PROFILE_STOP(&pCtl->StatLockWait, a);
    5234         }
     5218        ataR3LockEnter(pCtl);
    52355219
    52365220        if (pCtl->uAsyncIOState == ATA_AIO_NEW && !pCtl->fChainedTransfer)
     
    54255409                     * solution has been found. */
    54265410                    Log(("%s: delay IRQ hack\n", __FUNCTION__));
    5427                     PDMCritSectLeave(&pCtl->lock);
     5411                    ataR3LockLeave(pCtl);
    54285412                    RTThreadSleep(pCtl->DelayIRQMillies);
    5429                     PDMCritSectEnter(&pCtl->lock, VINF_SUCCESS);
     5413                    ataR3LockEnter(pCtl);
    54305414                }
    54315415
     
    56345618        }
    56355619
    5636         PDMCritSectLeave(&pCtl->lock);
     5620        ataR3LockLeave(pCtl);
    56375621    }
    56385622
     
    57795763        default:
    57805764            AssertMsgFailed(("%s: Unsupported read from port %x size=%d\n", __FUNCTION__, Port, cb));
    5781             PDMCritSectLeave(&pCtl->lock);
    5782             return VERR_IOM_IOPORT_UNUSED;
     5765            rc = VERR_IOM_IOPORT_UNUSED;
     5766            break;
    57835767    }
    57845768    PDMCritSectLeave(&pCtl->lock);
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