@@ -325,9 +325,11 @@ static int dev_map_hash_get_next_key(struct bpf_map *map, void *key,
325325
326326static int dev_map_bpf_prog_run (struct bpf_prog * xdp_prog ,
327327 struct xdp_frame * * frames , int n ,
328- struct net_device * dev )
328+ struct net_device * tx_dev ,
329+ struct net_device * rx_dev )
329330{
330- struct xdp_txq_info txq = { .dev = dev };
331+ struct xdp_txq_info txq = { .dev = tx_dev };
332+ struct xdp_rxq_info rxq = { .dev = rx_dev };
331333 struct xdp_buff xdp ;
332334 int i , nframes = 0 ;
333335
@@ -338,6 +340,7 @@ static int dev_map_bpf_prog_run(struct bpf_prog *xdp_prog,
338340
339341 xdp_convert_frame_to_buff (xdpf , & xdp );
340342 xdp .txq = & txq ;
343+ xdp .rxq = & rxq ;
341344
342345 act = bpf_prog_run_xdp (xdp_prog , & xdp );
343346 switch (act ) {
@@ -352,7 +355,7 @@ static int dev_map_bpf_prog_run(struct bpf_prog *xdp_prog,
352355 bpf_warn_invalid_xdp_action (act );
353356 fallthrough ;
354357 case XDP_ABORTED :
355- trace_xdp_exception (dev , xdp_prog , act );
358+ trace_xdp_exception (tx_dev , xdp_prog , act );
356359 fallthrough ;
357360 case XDP_DROP :
358361 xdp_return_frame_rx_napi (xdpf );
@@ -380,7 +383,7 @@ static void bq_xmit_all(struct xdp_dev_bulk_queue *bq, u32 flags)
380383 }
381384
382385 if (bq -> xdp_prog ) {
383- to_send = dev_map_bpf_prog_run (bq -> xdp_prog , bq -> q , cnt , dev );
386+ to_send = dev_map_bpf_prog_run (bq -> xdp_prog , bq -> q , cnt , dev , bq -> dev_rx );
384387 if (!to_send )
385388 goto out ;
386389 }
0 commit comments