@@ -333,9 +333,11 @@ static int dev_map_hash_get_next_key(struct bpf_map *map, void *key,
333
333
334
334
static int dev_map_bpf_prog_run (struct bpf_prog * xdp_prog ,
335
335
struct xdp_frame * * frames , int n ,
336
- struct net_device * dev )
336
+ struct net_device * tx_dev ,
337
+ struct net_device * rx_dev )
337
338
{
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 };
339
341
struct xdp_buff xdp ;
340
342
int i , nframes = 0 ;
341
343
@@ -346,6 +348,7 @@ static int dev_map_bpf_prog_run(struct bpf_prog *xdp_prog,
346
348
347
349
xdp_convert_frame_to_buff (xdpf , & xdp );
348
350
xdp .txq = & txq ;
351
+ xdp .rxq = & rxq ;
349
352
350
353
act = bpf_prog_run_xdp (xdp_prog , & xdp );
351
354
switch (act ) {
@@ -360,7 +363,7 @@ static int dev_map_bpf_prog_run(struct bpf_prog *xdp_prog,
360
363
bpf_warn_invalid_xdp_action (NULL , xdp_prog , act );
361
364
fallthrough ;
362
365
case XDP_ABORTED :
363
- trace_xdp_exception (dev , xdp_prog , act );
366
+ trace_xdp_exception (tx_dev , xdp_prog , act );
364
367
fallthrough ;
365
368
case XDP_DROP :
366
369
xdp_return_frame_rx_napi (xdpf );
@@ -388,7 +391,7 @@ static void bq_xmit_all(struct xdp_dev_bulk_queue *bq, u32 flags)
388
391
}
389
392
390
393
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 );
392
395
if (!to_send )
393
396
goto out ;
394
397
}
0 commit comments