• Petri Gynther's avatar
    net: bcmgenet: rewrite bcmgenet_rx_refill() · d6707bec
    Petri Gynther authored
    Currently, bcmgenet_desc_rx() calls bcmgenet_rx_refill() at the end of
    Rx packet processing loop, after the current Rx packet has already been
    passed to napi_gro_receive(). However, bcmgenet_rx_refill() might fail
    to allocate a new Rx skb, thus leaving a hole on the Rx queue where no
    valid Rx buffer exists.
    
    To eliminate this situation:
    1. Rewrite bcmgenet_rx_refill() to retain the current Rx skb on the Rx
       queue if a new replacement Rx skb can't be allocated and DMA-mapped.
       In this case, the data on the current Rx skb is effectively dropped.
    2. Modify bcmgenet_desc_rx() to call bcmgenet_rx_refill() at the top of
       Rx packet processing loop, so that the new replacement Rx skb is
       already in place before the current Rx skb is processed.
    Signed-off-by: default avatarPetri Gynther <pgynther@google.com>
    Tested-by: Jaedon Shin <jaedon.shin@gmail.com>--
    Reviewed-by: default avatarFlorian Fainelli <f.fainelli@gmail.com>
    Tested-by: default avatarFlorian Fainelli <f.fainelli@gmail.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    d6707bec
bcmgenet.c 78.8 KB