VirtualBox

Changeset 64280 in vbox for trunk/src/VBox/Devices/Network


Ignore:
Timestamp:
Oct 14, 2016 7:49:26 PM (8 years ago)
Author:
vboxsync
Message:

Dev/E1000 (bugref:8624) Disable throttling by default, new TidEnabled config param

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/Network/DevE1000.cpp

    r64115 r64280  
    10961096    /** All: throttle RX interrupts. */
    10971097    bool        fItrRxEnabled;
    1098 
    1099     bool        Alignment2;
     1098    /** All: Delay TX interrupts using TIDV/TADV. */
     1099    bool        fTidEnabled;
    11001100    /** Link up delay (in milliseconds). */
    11011101    uint32_t    cMsLinkUpDelay;
     
    32453245# endif /* E1K_TX_DELAY */
    32463246
    3247 # ifdef E1K_USE_TX_TIMERS
     3247//# ifdef E1K_USE_TX_TIMERS
    32483248
    32493249/**
     
    32593259static DECLCALLBACK(void) e1kTxIntDelayTimer(PPDMDEVINS pDevIns, PTMTIMER pTimer, void *pvUser)
    32603260{
     3261    RT_NOREF(pDevIns);
     3262    RT_NOREF(pTimer);
    32613263    PE1KSTATE pThis = (PE1KSTATE )pvUser;
    32623264
     
    32813283static DECLCALLBACK(void) e1kTxAbsDelayTimer(PPDMDEVINS pDevIns, PTMTIMER pTimer, void *pvUser)
    32823284{
     3285    RT_NOREF(pDevIns);
     3286    RT_NOREF(pTimer);
    32833287    PE1KSTATE pThis = (PE1KSTATE )pvUser;
    32843288
     
    32893293}
    32903294
    3291 # endif /* E1K_USE_TX_TIMERS */
     3295//# endif /* E1K_USE_TX_TIMERS */
    32923296# ifdef E1K_USE_RX_TIMERS
    32933297
     
    44454449        if (pDesc->legacy.cmd.fEOP)
    44464450        {
    4447 #ifdef E1K_USE_TX_TIMERS
    4448             if (pDesc->legacy.cmd.fIDE)
     4451//#ifdef E1K_USE_TX_TIMERS
     4452            if (pThis->fTidEnabled && pDesc->legacy.cmd.fIDE)
    44494453            {
    44504454                E1K_INC_ISTAT_CNT(pThis->uStatTxIDE);
     
    44674471            else
    44684472            {
    4469                 E1kLog2(("%s No IDE set, cancel TAD timer and raise interrupt\n",
    4470                         pThis->szPrf));
     4473                if (pThis->fTidEnabled)
     4474                {
     4475                    E1kLog2(("%s No IDE set, cancel TAD timer and raise interrupt\n",
     4476                             pThis->szPrf));
     4477                    /* Cancel both timers if armed and fire immediately. */
    44714478# ifndef E1K_NO_TAD
    4472                 /* Cancel both timers if armed and fire immediately. */
    4473                 e1kCancelTimer(pThis, pThis->CTX_SUFF(pTADTimer));
     4479                    TMTimerStop(pThis->CTX_SUFF(pTADTimer));
    44744480# endif
    4475 #endif /* E1K_USE_TX_TIMERS */
     4481                    TMTimerStop(pThis->CTX_SUFF(pTIDTimer));
     4482                }
     4483//#endif /* E1K_USE_TX_TIMERS */
    44764484                E1K_INC_ISTAT_CNT(pThis->uStatIntTx);
    44774485                e1kRaiseInterrupt(pThis, VERR_SEM_BUSY, ICR_TXDW);
    4478 #ifdef E1K_USE_TX_TIMERS
     4486//#ifdef E1K_USE_TX_TIMERS
    44794487            }
    4480 #endif /* E1K_USE_TX_TIMERS */
     4488//#endif /* E1K_USE_TX_TIMERS */
    44814489        }
    44824490    }
     
    45104518    e1kPrintTDesc(pThis, pDesc, "vvv");
    45114519
    4512 #ifdef E1K_USE_TX_TIMERS
    4513     e1kCancelTimer(pThis, pThis->CTX_SUFF(pTIDTimer));
    4514 #endif /* E1K_USE_TX_TIMERS */
     4520//#ifdef E1K_USE_TX_TIMERS
     4521    if (pThis->fTidEnabled)
     4522        e1kCancelTimer(pThis, pThis->CTX_SUFF(pTIDTimer));
     4523//#endif /* E1K_USE_TX_TIMERS */
    45154524
    45164525    switch (e1kGetDescType(pDesc))
     
    47704779    e1kPrintTDesc(pThis, pDesc, "vvv");
    47714780
    4772 #ifdef E1K_USE_TX_TIMERS
    4773     e1kCancelTimer(pThis, pThis->CTX_SUFF(pTIDTimer));
    4774 #endif /* E1K_USE_TX_TIMERS */
     4781//#ifdef E1K_USE_TX_TIMERS
     4782    if (pThis->fTidEnabled)
     4783        TMTimerStop(pThis->CTX_SUFF(pTIDTimer));
     4784//#endif /* E1K_USE_TX_TIMERS */
    47754785
    47764786    switch (e1kGetDescType(pDesc))
     
    66446654    e1kCancelTimer(pThis, pThis->CTX_SUFF(pTXDTimer));
    66456655#endif /* E1K_TX_DELAY */
    6646 #ifdef E1K_USE_TX_TIMERS
    6647     e1kCancelTimer(pThis, pThis->CTX_SUFF(pTIDTimer));
     6656//#ifdef E1K_USE_TX_TIMERS
     6657    if (pThis->fTidEnabled)
     6658    {
     6659        e1kCancelTimer(pThis, pThis->CTX_SUFF(pTIDTimer));
    66486660#ifndef E1K_NO_TAD
    6649     e1kCancelTimer(pThis, pThis->CTX_SUFF(pTADTimer));
     6661        e1kCancelTimer(pThis, pThis->CTX_SUFF(pTADTimer));
    66506662#endif /* E1K_NO_TAD */
    6651 #endif /* E1K_USE_TX_TIMERS */
     6663    }
     6664//#endif /* E1K_USE_TX_TIMERS */
    66526665#ifdef E1K_USE_RX_TIMERS
    66536666    e1kCancelTimer(pThis, pThis->CTX_SUFF(pRIDTimer));
     
    73527365    pThis->pRADTimerRC   = TMTimerRCPtr(pThis->pRADTimerR3);
    73537366#endif /* E1K_USE_RX_TIMERS */
    7354 #ifdef E1K_USE_TX_TIMERS
    7355     pThis->pTIDTimerRC   = TMTimerRCPtr(pThis->pTIDTimerR3);
     7367//#ifdef E1K_USE_TX_TIMERS
     7368    if (pThis->fTidEnabled)
     7369    {
     7370        pThis->pTIDTimerRC   = TMTimerRCPtr(pThis->pTIDTimerR3);
    73567371# ifndef E1K_NO_TAD
    7357     pThis->pTADTimerRC   = TMTimerRCPtr(pThis->pTADTimerR3);
     7372        pThis->pTADTimerRC   = TMTimerRCPtr(pThis->pTADTimerR3);
    73587373# endif /* E1K_NO_TAD */
    7359 #endif /* E1K_USE_TX_TIMERS */
     7374    }
     7375//#endif /* E1K_USE_TX_TIMERS */
    73607376#ifdef E1K_TX_DELAY
    73617377    pThis->pTXDTimerRC   = TMTimerRCPtr(pThis->pTXDTimerR3);
     
    75387554    /** @todo LineSpeed unused! */
    75397555
    7540     pThis->fR0Enabled    = true;
    7541     pThis->fRCEnabled    = true;
    7542     pThis->fEthernetCRC  = true;
    7543     pThis->fGSOEnabled   = true;
    7544     pThis->fItrEnabled   = true;
    7545     pThis->fItrRxEnabled = true;
    7546 
    75477556    /* Get config params */
    75487557    rc = CFGMR3QueryBytes(pCfg, "MAC", pThis->macConfigured.au8, sizeof(pThis->macConfigured.au8));
     
    75797588                                N_("Configuration error: Failed to get the value of 'GSOEnabled'"));
    75807589
    7581     rc = CFGMR3QueryBoolDef(pCfg, "ItrEnabled", &pThis->fItrEnabled, true);
     7590    rc = CFGMR3QueryBoolDef(pCfg, "ItrEnabled", &pThis->fItrEnabled, false);
    75827591    if (RT_FAILURE(rc))
    75837592        return PDMDEV_SET_ERROR(pDevIns, rc,
     
    75887597        return PDMDEV_SET_ERROR(pDevIns, rc,
    75897598                                N_("Configuration error: Failed to get the value of 'ItrRxEnabled'"));
     7599
     7600    rc = CFGMR3QueryBoolDef(pCfg, "TidEnabled", &pThis->fTidEnabled, false);
     7601    if (RT_FAILURE(rc))
     7602        return PDMDEV_SET_ERROR(pDevIns, rc,
     7603                                N_("Configuration error: Failed to get the value of 'TidEnabled'"));
    75907604
    75917605    rc = CFGMR3QueryU32Def(pCfg, "LinkUpDelay", (uint32_t*)&pThis->cMsLinkUpDelay, 5000); /* ms */
     
    75997613        LogRel(("%s WARNING! Link up delay is disabled!\n", pThis->szPrf));
    76007614
    7601     LogRel(("%s Chip=%s LinkUpDelay=%ums EthernetCRC=%s GSO=%s Itr=%s ItrRx=%s R0=%s GC=%s\n", pThis->szPrf,
     7615    LogRel(("%s Chip=%s LinkUpDelay=%ums EthernetCRC=%s GSO=%s Itr=%s ItrRx=%s TID=%s R0=%s GC=%s\n", pThis->szPrf,
    76027616            g_aChips[pThis->eChip].pcszName, pThis->cMsLinkUpDelay,
    76037617            pThis->fEthernetCRC ? "on" : "off",
     
    76057619            pThis->fItrEnabled ? "enabled" : "disabled",
    76067620            pThis->fItrRxEnabled ? "enabled" : "disabled",
     7621            pThis->fTidEnabled ? "enabled" : "disabled",
    76077622            pThis->fR0Enabled ? "enabled" : "disabled",
    76087623            pThis->fRCEnabled ? "enabled" : "disabled"));
     
    77037718#endif /* E1K_TX_DELAY */
    77047719
    7705 #ifdef E1K_USE_TX_TIMERS
    7706     /* Create Transmit Interrupt Delay Timer */
    7707     rc = PDMDevHlpTMTimerCreate(pDevIns, TMCLOCK_VIRTUAL, e1kTxIntDelayTimer, pThis,
    7708                                 TMTIMER_FLAGS_NO_CRIT_SECT,
    7709                                 "E1000 Transmit Interrupt Delay Timer", &pThis->pTIDTimerR3);
    7710     if (RT_FAILURE(rc))
    7711         return rc;
    7712     pThis->pTIDTimerR0 = TMTimerR0Ptr(pThis->pTIDTimerR3);
    7713     pThis->pTIDTimerRC = TMTimerRCPtr(pThis->pTIDTimerR3);
     7720//#ifdef E1K_USE_TX_TIMERS
     7721    if (pThis->fTidEnabled)
     7722    {
     7723        /* Create Transmit Interrupt Delay Timer */
     7724        rc = PDMDevHlpTMTimerCreate(pDevIns, TMCLOCK_VIRTUAL, e1kTxIntDelayTimer, pThis,
     7725                                    TMTIMER_FLAGS_NO_CRIT_SECT,
     7726                                    "E1000 Transmit Interrupt Delay Timer", &pThis->pTIDTimerR3);
     7727        if (RT_FAILURE(rc))
     7728            return rc;
     7729        pThis->pTIDTimerR0 = TMTimerR0Ptr(pThis->pTIDTimerR3);
     7730        pThis->pTIDTimerRC = TMTimerRCPtr(pThis->pTIDTimerR3);
    77147731
    77157732# ifndef E1K_NO_TAD
    7716     /* Create Transmit Absolute Delay Timer */
    7717     rc = PDMDevHlpTMTimerCreate(pDevIns, TMCLOCK_VIRTUAL, e1kTxAbsDelayTimer, pThis,
    7718                                 TMTIMER_FLAGS_NO_CRIT_SECT,
    7719                                 "E1000 Transmit Absolute Delay Timer", &pThis->pTADTimerR3);
    7720     if (RT_FAILURE(rc))
    7721         return rc;
    7722     pThis->pTADTimerR0 = TMTimerR0Ptr(pThis->pTADTimerR3);
    7723     pThis->pTADTimerRC = TMTimerRCPtr(pThis->pTADTimerR3);
     7733        /* Create Transmit Absolute Delay Timer */
     7734        rc = PDMDevHlpTMTimerCreate(pDevIns, TMCLOCK_VIRTUAL, e1kTxAbsDelayTimer, pThis,
     7735                                    TMTIMER_FLAGS_NO_CRIT_SECT,
     7736                                    "E1000 Transmit Absolute Delay Timer", &pThis->pTADTimerR3);
     7737        if (RT_FAILURE(rc))
     7738            return rc;
     7739        pThis->pTADTimerR0 = TMTimerR0Ptr(pThis->pTADTimerR3);
     7740        pThis->pTADTimerRC = TMTimerRCPtr(pThis->pTADTimerR3);
    77247741# endif /* E1K_NO_TAD */
    7725 #endif /* E1K_USE_TX_TIMERS */
     7742    }
     7743//#endif /* E1K_USE_TX_TIMERS */
    77267744
    77277745#ifdef E1K_USE_RX_TIMERS
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