Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e74de52e authored by Jesper Dangaard Brouer's avatar Jesper Dangaard Brouer Committed by Alexei Starovoitov
Browse files

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: default avatarJesper Dangaard Brouer <brouer@redhat.com>
Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
parent 735fc405
Loading
Loading
Loading
Loading
+6 −4
Original line number Diff line number Diff line
@@ -234,9 +234,9 @@ TRACE_EVENT(xdp_devmap_xmit,
	TP_PROTO(const struct bpf_map *map, u32 map_index,
		 int sent, int drops,
		 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(
		__field(int, map_id)
@@ -246,6 +246,7 @@ TRACE_EVENT(xdp_devmap_xmit,
		__field(int, sent)
		__field(int, from_ifindex)
		__field(int, to_ifindex)
		__field(int, err)
	),

	TP_fast_assign(
@@ -256,16 +257,17 @@ TRACE_EVENT(xdp_devmap_xmit,
		__entry->sent		= sent;
		__entry->from_ifindex	= from_dev->ifindex;
		__entry->to_ifindex	= to_dev->ifindex;
		__entry->err		= err;
	),

	TP_printk("ndo_xdp_xmit"
		  " map_id=%d map_index=%d action=%s"
		  " sent=%d drops=%d"
		  " from_ifindex=%d to_ifindex=%d",
		  " from_ifindex=%d to_ifindex=%d err=%d",
		  __entry->map_id, __entry->map_index,
		  __print_symbolic(__entry->act, __XDP_ACT_SYM_TAB),
		  __entry->sent, __entry->drops,
		  __entry->from_ifindex, __entry->to_ifindex)
		  __entry->from_ifindex, __entry->to_ifindex, __entry->err)
);

#endif /* _TRACE_XDP_H */
+3 −2
Original line number Diff line number Diff line
@@ -220,7 +220,7 @@ static int bq_xmit_all(struct bpf_dtab_netdev *obj,
			 struct xdp_bulk_queue *bq)
{
	struct net_device *dev = obj->dev;
	int sent = 0, drops = 0;
	int sent = 0, drops = 0, err = 0;
	int i;

	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);
	if (sent < 0) {
		err = sent;
		sent = 0;
		goto error;
	}
@@ -242,7 +243,7 @@ static int bq_xmit_all(struct bpf_dtab_netdev *obj,
	bq->count = 0;

	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;
	return 0;
error: