Message ID | 20241126134707.253572-2-mail@tk154.de (mailing list archive) |
---|---|
State | New |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | [net] mediathek: mtk_eth_soc: fix netdev inside xdp_rxq_info | expand |
diff --git a/drivers/net/ethernet/mediatek/mtk_eth_soc.c b/drivers/net/ethernet/mediatek/mtk_eth_soc.c index 53485142938c..9c6d4477e536 100644 --- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c +++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c @@ -2069,6 +2069,7 @@ static int mtk_poll_rx(struct napi_struct *napi, int budget, netdev = eth->netdev[mac]; ppe_idx = eth->mac[mac]->ppe_idx; + ring->xdp_q.dev = netdev; if (unlikely(test_bit(MTK_RESETTING, ð->state))) goto release_desc;
Currently, the network device isn't set inside the xdp_rxq_info of the mtk_rx_ring, which means that an XDP program attached to the Mediathek ethernet driver cannot retrieve the index of the interface that received the package since it's always 0 inside the xdp_md struct. This patch sets the network device pointer inside the xdp_rxq_info struct, which is later used to initialize the xdp_buff struct via xdp_init_buff. This was tested using the following eBPF/XDP program attached to a network interface of the mtk_eth_soc driver. As said before, ingress_ifindex always had a value of zero. After applying the patch, ingress_ifindex holds the correct interface index. #include <linux/bpf.h> #include <bpf/bpf_helpers.h> SEC("pass") int pass_func(struct xdp_md *xdp) { bpf_printk("ingress_ifindex: %u", xdp->ingress_ifindex); return XDP_PASS; } char _license[] SEC("license") = "GPL"; Signed-off-by: Til Kaiser <mail@tk154.de> --- drivers/net/ethernet/mediatek/mtk_eth_soc.c | 1 + 1 file changed, 1 insertion(+)