diff options
Diffstat (limited to 'kernel/bpf/devmap.c')
| -rw-r--r-- | kernel/bpf/devmap.c | 11 | 
1 files changed, 7 insertions, 4 deletions
diff --git a/kernel/bpf/devmap.c b/kernel/bpf/devmap.c index 9e0e3b0a18e4..7878be18e9d2 100644 --- a/kernel/bpf/devmap.c +++ b/kernel/bpf/devmap.c @@ -333,9 +333,11 @@ static int dev_map_hash_get_next_key(struct bpf_map *map, void *key,  static int dev_map_bpf_prog_run(struct bpf_prog *xdp_prog,  				struct xdp_frame **frames, int n, -				struct net_device *dev) +				struct net_device *tx_dev, +				struct net_device *rx_dev)  { -	struct xdp_txq_info txq = { .dev = dev }; +	struct xdp_txq_info txq = { .dev = tx_dev }; +	struct xdp_rxq_info rxq = { .dev = rx_dev };  	struct xdp_buff xdp;  	int i, nframes = 0; @@ -346,6 +348,7 @@ static int dev_map_bpf_prog_run(struct bpf_prog *xdp_prog,  		xdp_convert_frame_to_buff(xdpf, &xdp);  		xdp.txq = &txq; +		xdp.rxq = &rxq;  		act = bpf_prog_run_xdp(xdp_prog, &xdp);  		switch (act) { @@ -360,7 +363,7 @@ static int dev_map_bpf_prog_run(struct bpf_prog *xdp_prog,  			bpf_warn_invalid_xdp_action(NULL, xdp_prog, act);  			fallthrough;  		case XDP_ABORTED: -			trace_xdp_exception(dev, xdp_prog, act); +			trace_xdp_exception(tx_dev, xdp_prog, act);  			fallthrough;  		case XDP_DROP:  			xdp_return_frame_rx_napi(xdpf); @@ -388,7 +391,7 @@ static void bq_xmit_all(struct xdp_dev_bulk_queue *bq, u32 flags)  	}  	if (bq->xdp_prog) { -		to_send = dev_map_bpf_prog_run(bq->xdp_prog, bq->q, cnt, dev); +		to_send = dev_map_bpf_prog_run(bq->xdp_prog, bq->q, cnt, dev, bq->dev_rx);  		if (!to_send)  			goto out;  	}  | 
