aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/trace/events/xdp.h10
-rw-r--r--kernel/bpf/devmap.c5
2 files changed, 9 insertions, 6 deletions
diff --git a/include/trace/events/xdp.h b/include/trace/events/xdp.h
index 2e9ef0650144..1ecf4c67fcf7 100644
--- a/include/trace/events/xdp.h
+++ b/include/trace/events/xdp.h
@@ -234,9 +234,9 @@ TRACE_EVENT(xdp_devmap_xmit,
234 TP_PROTO(const struct bpf_map *map, u32 map_index, 234 TP_PROTO(const struct bpf_map *map, u32 map_index,
235 int sent, int drops, 235 int sent, int drops,
236 const struct net_device *from_dev, 236 const struct net_device *from_dev,
237 const struct net_device *to_dev), 237 const struct net_device *to_dev, int err),
238 238
239 TP_ARGS(map, map_index, sent, drops, from_dev, to_dev), 239 TP_ARGS(map, map_index, sent, drops, from_dev, to_dev, err),
240 240
241 TP_STRUCT__entry( 241 TP_STRUCT__entry(
242 __field(int, map_id) 242 __field(int, map_id)
@@ -246,6 +246,7 @@ TRACE_EVENT(xdp_devmap_xmit,
246 __field(int, sent) 246 __field(int, sent)
247 __field(int, from_ifindex) 247 __field(int, from_ifindex)
248 __field(int, to_ifindex) 248 __field(int, to_ifindex)
249 __field(int, err)
249 ), 250 ),
250 251
251 TP_fast_assign( 252 TP_fast_assign(
@@ -256,16 +257,17 @@ TRACE_EVENT(xdp_devmap_xmit,
256 __entry->sent = sent; 257 __entry->sent = sent;
257 __entry->from_ifindex = from_dev->ifindex; 258 __entry->from_ifindex = from_dev->ifindex;
258 __entry->to_ifindex = to_dev->ifindex; 259 __entry->to_ifindex = to_dev->ifindex;
260 __entry->err = err;
259 ), 261 ),
260 262
261 TP_printk("ndo_xdp_xmit" 263 TP_printk("ndo_xdp_xmit"
262 " map_id=%d map_index=%d action=%s" 264 " map_id=%d map_index=%d action=%s"
263 " sent=%d drops=%d" 265 " sent=%d drops=%d"
264 " from_ifindex=%d to_ifindex=%d", 266 " from_ifindex=%d to_ifindex=%d err=%d",
265 __entry->map_id, __entry->map_index, 267 __entry->map_id, __entry->map_index,
266 __print_symbolic(__entry->act, __XDP_ACT_SYM_TAB), 268 __print_symbolic(__entry->act, __XDP_ACT_SYM_TAB),
267 __entry->sent, __entry->drops, 269 __entry->sent, __entry->drops,
268 __entry->from_ifindex, __entry->to_ifindex) 270 __entry->from_ifindex, __entry->to_ifindex, __entry->err)
269); 271);
270 272
271#endif /* _TRACE_XDP_H */ 273#endif /* _TRACE_XDP_H */
diff --git a/kernel/bpf/devmap.c b/kernel/bpf/devmap.c
index 77908311ec98..ae16d0c373ef 100644
--- a/kernel/bpf/devmap.c
+++ b/kernel/bpf/devmap.c
@@ -220,7 +220,7 @@ static int bq_xmit_all(struct bpf_dtab_netdev *obj,
220 struct xdp_bulk_queue *bq) 220 struct xdp_bulk_queue *bq)
221{ 221{
222 struct net_device *dev = obj->dev; 222 struct net_device *dev = obj->dev;
223 int sent = 0, drops = 0; 223 int sent = 0, drops = 0, err = 0;
224 int i; 224 int i;
225 225
226 if (unlikely(!bq->count)) 226 if (unlikely(!bq->count))
@@ -234,6 +234,7 @@ static int bq_xmit_all(struct bpf_dtab_netdev *obj,
234 234
235 sent = dev->netdev_ops->ndo_xdp_xmit(dev, bq->count, bq->q); 235 sent = dev->netdev_ops->ndo_xdp_xmit(dev, bq->count, bq->q);
236 if (sent < 0) { 236 if (sent < 0) {
237 err = sent;
237 sent = 0; 238 sent = 0;
238 goto error; 239 goto error;
239 } 240 }
@@ -242,7 +243,7 @@ out:
242 bq->count = 0; 243 bq->count = 0;
243 244
244 trace_xdp_devmap_xmit(&obj->dtab->map, obj->bit, 245 trace_xdp_devmap_xmit(&obj->dtab->map, obj->bit,
245 sent, drops, bq->dev_rx, dev); 246 sent, drops, bq->dev_rx, dev, err);
246 bq->dev_rx = NULL; 247 bq->dev_rx = NULL;
247 return 0; 248 return 0;
248error: 249error: