@@ -333,9 +333,11 @@ static int dev_map_hash_get_next_key(struct bpf_map *map, void *key,
333333
334334static  int  dev_map_bpf_prog_run (struct  bpf_prog  * xdp_prog ,
335335				struct  xdp_frame  * * frames , int  n ,
336- 				struct  net_device  * dev )
336+ 				struct  net_device  * tx_dev ,
337+ 				struct  net_device  * rx_dev )
337338{
338- 	struct  xdp_txq_info  txq  =  { .dev  =  dev  };
339+ 	struct  xdp_txq_info  txq  =  { .dev  =  tx_dev  };
340+ 	struct  xdp_rxq_info  rxq  =  { .dev  =  rx_dev  };
339341	struct  xdp_buff  xdp ;
340342	int  i , nframes  =  0 ;
341343
@@ -346,6 +348,7 @@ static int dev_map_bpf_prog_run(struct bpf_prog *xdp_prog,
346348
347349		xdp_convert_frame_to_buff (xdpf , & xdp );
348350		xdp .txq  =  & txq ;
351+ 		xdp .rxq  =  & rxq ;
349352
350353		act  =  bpf_prog_run_xdp (xdp_prog , & xdp );
351354		switch  (act ) {
@@ -360,7 +363,7 @@ static int dev_map_bpf_prog_run(struct bpf_prog *xdp_prog,
360363			bpf_warn_invalid_xdp_action (NULL , xdp_prog , act );
361364			fallthrough ;
362365		case  XDP_ABORTED :
363- 			trace_xdp_exception (dev , xdp_prog , act );
366+ 			trace_xdp_exception (tx_dev , xdp_prog , act );
364367			fallthrough ;
365368		case  XDP_DROP :
366369			xdp_return_frame_rx_napi (xdpf );
@@ -388,7 +391,7 @@ static void bq_xmit_all(struct xdp_dev_bulk_queue *bq, u32 flags)
388391	}
389392
390393	if  (bq -> xdp_prog ) {
391- 		to_send  =  dev_map_bpf_prog_run (bq -> xdp_prog , bq -> q , cnt , dev );
394+ 		to_send  =  dev_map_bpf_prog_run (bq -> xdp_prog , bq -> q , cnt , dev ,  bq -> dev_rx );
392395		if  (!to_send )
393396			goto out ;
394397	}
0 commit comments