lkml.org 
[lkml]   [2019]   [Apr]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.0 029/146] thunderx: enable page recycling for non-XDP case
    Date
    5.0-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Dean Nelson <dnelson@redhat.com>

    [ Upstream commit b3e208069477588c06f4d5d986164b435bb06e6d ]

    Commit 773225388dae15e72790 ("net: thunderx: Optimize page recycling for XDP")
    added code to nicvf_alloc_page() that inadvertently disables receive buffer
    page recycling for the non-XDP case by always NULL'ng the page pointer.

    This patch corrects two if-conditionals to allow for the recycling of non-XDP
    mode pages by only setting the page pointer to NULL when the page is not ready
    for recycling.

    Fixes: 773225388dae ("net: thunderx: Optimize page recycling for XDP")
    Signed-off-by: Dean Nelson <dnelson@redhat.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    drivers/net/ethernet/cavium/thunder/nicvf_queues.c | 23 ++++++++++-----------
    1 file changed, 11 insertions(+), 12 deletions(-)

    --- a/drivers/net/ethernet/cavium/thunder/nicvf_queues.c
    +++ b/drivers/net/ethernet/cavium/thunder/nicvf_queues.c
    @@ -105,20 +105,19 @@ static inline struct pgcache *nicvf_allo
    /* Check if page can be recycled */
    if (page) {
    ref_count = page_ref_count(page);
    - /* Check if this page has been used once i.e 'put_page'
    - * called after packet transmission i.e internal ref_count
    - * and page's ref_count are equal i.e page can be recycled.
    + /* This page can be recycled if internal ref_count and page's
    + * ref_count are equal, indicating that the page has been used
    + * once for packet transmission. For non-XDP mode, internal
    + * ref_count is always '1'.
    */
    - if (rbdr->is_xdp && (ref_count == pgcache->ref_count))
    - pgcache->ref_count--;
    - else
    - page = NULL;
    -
    - /* In non-XDP mode, page's ref_count needs to be '1' for it
    - * to be recycled.
    - */
    - if (!rbdr->is_xdp && (ref_count != 1))
    + if (rbdr->is_xdp) {
    + if (ref_count == pgcache->ref_count)
    + pgcache->ref_count--;
    + else
    + page = NULL;
    + } else if (ref_count != 1) {
    page = NULL;
    + }
    }

    if (!page) {

    \
     
     \ /
      Last update: 2019-04-01 20:12    [W:4.125 / U:0.048 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site