diff options
-rw-r--r-- | include/trace/events/xdp.h | 10 | ||||
-rw-r--r-- | kernel/bpf/devmap.c | 5 |
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; |
248 | error: | 249 | error: |