VirtualBox

Changeset 64807 in vbox for trunk


Ignore:
Timestamp:
Dec 8, 2016 11:27:49 AM (8 years ago)
Author:
vboxsync
Message:

Dev/E1000: (bugref:8624) Bring link up immediately, interrupt later (500 ms, MacOS fix).

File:
1 edited

Legend:

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

    r64740 r64807  
    6666 */
    6767#define E1K_LSC_ON_SLU
    68 /** @def E1K_INIT_LINKUP_DELAY
    69  * E1K_INIT_LINKUP_DELAY prevents the link going up while the driver is still
    70  * in init (see @bugref{8624}).
    71  */
    72 //#define E1K_INIT_LINKUP_DELAY (500 * 1000)
     68/** @def E1K_INIT_LINKUP_DELAY_US
     69 * E1K_INIT_LINKUP_DELAY_US prevents the link going up while the driver is still
     70 * in init (see @bugref{8624}). The units are microseconds.
     71 */
     72#define E1K_INIT_LINKUP_DELAY_US (500 * 1000)
    7373/** @def E1K_IMS_INT_DELAY_NS
    7474 * E1K_IMS_INT_DELAY_NS prevents interrupt storms in Windows guests on enabling
     
    26782678            && !(STATUS & STATUS_LU))
    26792679        {
    2680 #ifdef E1K_INIT_LINKUP_DELAY
    26812680            /*
    2682              * The driver indicates that we should bring up the link. Our default 5-second delay is too long,
    2683              * as Linux guests detect Tx hang after 2 seconds. Let's use 500 ms delay instead. */
    2684             e1kArmTimer(pThis, pThis->CTX_SUFF(pLUTimer), E1K_INIT_LINKUP_DELAY);
    2685 #else /* !E1K_INIT_LINKUP_DELAY */
    2686             /* Bring up the link immediately, no need for an interrupt though. */
     2681             * Arch Linux guests urge us to bring up the link immediately or risk
     2682             * hitting Tx unit hang detection by the driver. The interrupt must
     2683             * be delayed though, to avoid interrupt storms in Windows guests.
     2684             * See @bugref{8624} for details. */
    26872685            STATUS |= STATUS_LU;
    26882686            Phy::setLinkStatus(&pThis->phy, true);
     2687#ifdef E1K_INIT_LINKUP_DELAY
     2688            /* We need to deliver a link-up interrupt for macOS guests. */
     2689            e1kArmTimer(pThis, pThis->CTX_SUFF(pLUTimer), E1K_INIT_LINKUP_DELAY_US);
     2690#else /* !E1K_INIT_LINKUP_DELAY */
     2691            /*
     2692             * Raising an interrupt immediately may cause an interrupt storm in
     2693             * Windows guests when the guest's driver enables interrupts from
     2694             * e1000 during init. Usually the driver will have interrupts
     2695             * disabled when it sets CTRL_SLU, so we won't actually raise an
     2696             * interrupt here, but we will do it as soon as the guest enables
     2697             * interrupts via IMS. See @bugref{8624} for details.
     2698             */
     2699            e1kRaiseInterrupt(pThis, VERR_SEM_BUSY, ICR_LSC);
    26892700#endif /* !E1K_INIT_LINKUP_DELAY */
    26902701        }
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