xdp/trace: extend tracepoint in devmap with an err
Extending tracepoint xdp:xdp_devmap_xmit in devmap with an err code allow people to easier identify the reason behind the ndo_xdp_xmit call to a given driver is failing. Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com> Signed-off-by: Alexei Starovoitov <ast@kernel.org>
This commit is contained in:
committed by
Alexei Starovoitov
parent
735fc4054b
commit
e74de52e55
@ -234,9 +234,9 @@ TRACE_EVENT(xdp_devmap_xmit,
|
|||||||
TP_PROTO(const struct bpf_map *map, u32 map_index,
|
TP_PROTO(const struct bpf_map *map, u32 map_index,
|
||||||
int sent, int drops,
|
int sent, int drops,
|
||||||
const struct net_device *from_dev,
|
const struct net_device *from_dev,
|
||||||
const struct net_device *to_dev),
|
const struct net_device *to_dev, int err),
|
||||||
|
|
||||||
TP_ARGS(map, map_index, sent, drops, from_dev, to_dev),
|
TP_ARGS(map, map_index, sent, drops, from_dev, to_dev, err),
|
||||||
|
|
||||||
TP_STRUCT__entry(
|
TP_STRUCT__entry(
|
||||||
__field(int, map_id)
|
__field(int, map_id)
|
||||||
@ -246,6 +246,7 @@ TRACE_EVENT(xdp_devmap_xmit,
|
|||||||
__field(int, sent)
|
__field(int, sent)
|
||||||
__field(int, from_ifindex)
|
__field(int, from_ifindex)
|
||||||
__field(int, to_ifindex)
|
__field(int, to_ifindex)
|
||||||
|
__field(int, err)
|
||||||
),
|
),
|
||||||
|
|
||||||
TP_fast_assign(
|
TP_fast_assign(
|
||||||
@ -256,16 +257,17 @@ TRACE_EVENT(xdp_devmap_xmit,
|
|||||||
__entry->sent = sent;
|
__entry->sent = sent;
|
||||||
__entry->from_ifindex = from_dev->ifindex;
|
__entry->from_ifindex = from_dev->ifindex;
|
||||||
__entry->to_ifindex = to_dev->ifindex;
|
__entry->to_ifindex = to_dev->ifindex;
|
||||||
|
__entry->err = err;
|
||||||
),
|
),
|
||||||
|
|
||||||
TP_printk("ndo_xdp_xmit"
|
TP_printk("ndo_xdp_xmit"
|
||||||
" map_id=%d map_index=%d action=%s"
|
" map_id=%d map_index=%d action=%s"
|
||||||
" sent=%d drops=%d"
|
" sent=%d drops=%d"
|
||||||
" from_ifindex=%d to_ifindex=%d",
|
" from_ifindex=%d to_ifindex=%d err=%d",
|
||||||
__entry->map_id, __entry->map_index,
|
__entry->map_id, __entry->map_index,
|
||||||
__print_symbolic(__entry->act, __XDP_ACT_SYM_TAB),
|
__print_symbolic(__entry->act, __XDP_ACT_SYM_TAB),
|
||||||
__entry->sent, __entry->drops,
|
__entry->sent, __entry->drops,
|
||||||
__entry->from_ifindex, __entry->to_ifindex)
|
__entry->from_ifindex, __entry->to_ifindex, __entry->err)
|
||||||
);
|
);
|
||||||
|
|
||||||
#endif /* _TRACE_XDP_H */
|
#endif /* _TRACE_XDP_H */
|
||||||
|
@ -220,7 +220,7 @@ static int bq_xmit_all(struct bpf_dtab_netdev *obj,
|
|||||||
struct xdp_bulk_queue *bq)
|
struct xdp_bulk_queue *bq)
|
||||||
{
|
{
|
||||||
struct net_device *dev = obj->dev;
|
struct net_device *dev = obj->dev;
|
||||||
int sent = 0, drops = 0;
|
int sent = 0, drops = 0, err = 0;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
if (unlikely(!bq->count))
|
if (unlikely(!bq->count))
|
||||||
@ -234,6 +234,7 @@ static int bq_xmit_all(struct bpf_dtab_netdev *obj,
|
|||||||
|
|
||||||
sent = dev->netdev_ops->ndo_xdp_xmit(dev, bq->count, bq->q);
|
sent = dev->netdev_ops->ndo_xdp_xmit(dev, bq->count, bq->q);
|
||||||
if (sent < 0) {
|
if (sent < 0) {
|
||||||
|
err = sent;
|
||||||
sent = 0;
|
sent = 0;
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
@ -242,7 +243,7 @@ out:
|
|||||||
bq->count = 0;
|
bq->count = 0;
|
||||||
|
|
||||||
trace_xdp_devmap_xmit(&obj->dtab->map, obj->bit,
|
trace_xdp_devmap_xmit(&obj->dtab->map, obj->bit,
|
||||||
sent, drops, bq->dev_rx, dev);
|
sent, drops, bq->dev_rx, dev, err);
|
||||||
bq->dev_rx = NULL;
|
bq->dev_rx = NULL;
|
||||||
return 0;
|
return 0;
|
||||||
error:
|
error:
|
||||||
|
Reference in New Issue
Block a user