• C
    gianfar: Use Single-Queue polling for "fsl,etsec2" · 71ff9e3d
    Claudiu Manoil 提交于
    For the "fsl,etsec2" compatible models the driver currently
    supports 8 Tx and Rx DMA rings (aka HW queues).  However, there
    are only 2 pairs of Rx/Tx interrupt lines, as these controllers
    are integrated in low power SoCs with 2 CPUs at most.  As a result,
    there are at most 2 NAPI instances that have to service multiple
    Tx and Rx queues for these devices.  This complicates the NAPI
    polling routine having to iterate over the mutiple Rx/Tx queues
    hooked to the same interrupt lines.  And there's also an overhead
    at HW level, as the controller needs to service all the 8 Tx rings
    in a round robin manner.  The combined overhead shows up for multi
    parallel Tx flows transmitted by the kernel stack, when the driver
    usually starts returning NETDEV_TX_BUSY leading to NETDEV WATCHDOG
    Tx timeout triggering if the Tx path is congested for too long.
    
    As an alternative, this patch makes the driver support only one
    Tx/Rx DMA ring per NAPI instance (per interrupt group or pair
    of Tx/Rx interrupt lines) by default.  The simplified single queue
    polling routine (gfar_poll_sq) will be the default napi poll routine
    for the etsec2 devices too.  Some adjustments needed to be made to
    link the Tx/Rx HW queues with each NAPI instance (2 in this case).
    The gfar_poll_sq() is already successfully used by older SQ_SG_MODE
    (single interrupt group) controllers.
    This patch fixes Tx timeout triggering under heavy Tx traffic load
    (i.e. iperf -c -P 8) for the "fsl,etsec2" (currently the only
    MQ_MG_MODE devices).  There's also a significant memory footprint
    reduction by supporting 2 Rx/Tx DMA rings (at most), instead of 8,
    for these devices.
    Signed-off-by: NClaudiu Manoil <claudiu.manoil@freescale.com>
    Signed-off-by: NDavid S. Miller <davem@davemloft.net>
    71ff9e3d
gianfar.c 89.5 KB