• Jesper Dangaard Brouer's avatar
    net: fix call location in kfree_skb_list_reason · a4650da2
    Jesper Dangaard Brouer authored
    The SKB drop reason uses __builtin_return_address(0) to give the call
    "location" to trace_kfree_skb() tracepoint skb:kfree_skb.
    
    To keep this stable for compilers kfree_skb_reason() is annotated with
    __fix_address (noinline __noclone) as fixed in commit c205cc75
    ("net: skb: prevent the split of kfree_skb_reason() by gcc").
    
    The function kfree_skb_list_reason() invoke kfree_skb_reason(), which
    cause the __builtin_return_address(0) "location" to report the
    unexpected address of kfree_skb_list_reason.
    
    Example output from 'perf script':
     kpktgend_0  1337 [000]    81.002597: skb:kfree_skb: skbaddr=0xffff888144824700 protocol=2048 location=kfree_skb_list_reason+0x1e reason: QDISC_DROP
    
    Patch creates an __always_inline __kfree_skb_reason() helper call that
    is called from both kfree_skb_list() and kfree_skb_list_reason().
    Suggestions for solutions that shares code better are welcome.
    
    As preparation for next patch move __kfree_skb() invocation out of
    this helper function.
    Reviewed-by: default avatarSaeed Mahameed <saeed@kernel.org>
    Signed-off-by: default avatarJesper Dangaard Brouer <brouer@redhat.com>
    Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
    a4650da2
skbuff.c 168 KB