• Alexander Duyck's avatar
    net: Pull out core bits of __netdev_alloc_skb and add __napi_alloc_skb · fd11a83d
    Alexander Duyck authored
    This change pulls the core functionality out of __netdev_alloc_skb and
    places them in a new function named __alloc_rx_skb.  The reason for doing
    this is to make these bits accessible to a new function __napi_alloc_skb.
    In addition __alloc_rx_skb now has a new flags value that is used to
    determine which page frag pool to allocate from.  If the SKB_ALLOC_NAPI
    flag is set then the NAPI pool is used.  The advantage of this is that we
    do not have to use local_irq_save/restore when accessing the NAPI pool from
    NAPI context.
    
    In my test setup I saw at least 11ns of savings using the napi_alloc_skb
    function versus the netdev_alloc_skb function, most of this being due to
    the fact that we didn't have to call local_irq_save/restore.
    
    The main use case for napi_alloc_skb would be for things such as copybreak
    or page fragment based receive paths where an skb is allocated after the
    data has been received instead of before.
    Signed-off-by: default avatarAlexander Duyck <alexander.h.duyck@redhat.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    fd11a83d
skbuff.c 110 KB