lkml.org 
[lkml]   [2018]   [Oct]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.9 62/71] net: speed up skb_rbtree_purge()
    Date
    4.9-stable review patch.  If anyone has any objections, please let me know.

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

    From: Eric Dumazet <edumazet@google.com>

    As measured in my prior patch ("sch_netem: faster rb tree removal"),
    rbtree_postorder_for_each_entry_safe() is nice looking but much slower
    than using rb_next() directly, except when tree is small enough
    to fit in CPU caches (then the cost is the same)

    Also note that there is not even an increase of text size :
    $ size net/core/skbuff.o.before net/core/skbuff.o
    text data bss dec hex filename
    40711 1298 0 42009 a419 net/core/skbuff.o.before
    40711 1298 0 42009 a419 net/core/skbuff.o

    From: Eric Dumazet <edumazet@google.com>

    Signed-off-by: David S. Miller <davem@davemloft.net>
    (cherry picked from commit 7c90584c66cc4b033a3b684b0e0950f79e7b7166)
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    net/core/skbuff.c | 11 +++++++----
    1 file changed, 7 insertions(+), 4 deletions(-)

    --- a/net/core/skbuff.c
    +++ b/net/core/skbuff.c
    @@ -2433,12 +2433,15 @@ EXPORT_SYMBOL(skb_queue_purge);
    */
    void skb_rbtree_purge(struct rb_root *root)
    {
    - struct sk_buff *skb, *next;
    + struct rb_node *p = rb_first(root);

    - rbtree_postorder_for_each_entry_safe(skb, next, root, rbnode)
    - kfree_skb(skb);
    + while (p) {
    + struct sk_buff *skb = rb_entry(p, struct sk_buff, rbnode);

    - *root = RB_ROOT;
    + p = rb_next(p);
    + rb_erase(&skb->rbnode, root);
    + kfree_skb(skb);
    + }
    }

    /**

    \
     
     \ /
      Last update: 2018-10-16 19:26    [W:4.946 / U:0.044 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site