From f5c0225a4880eaff85d32d5aa5037c2c5ef6bbe3 Mon Sep 17 00:00:00 2001 From: Mieczyslaw Nalewaj Date: Tue, 6 Jan 2026 11:14:37 +0100 Subject: [PATCH] ramips: mtk_eth_soc: handle frag_cache on Linux >= 6.13 Fix fe_clean_rx to handle the changed frag_cache layout on newer kernels. For kernels >= 6.13 the fragment cache needs to be converted from its encoded_page value instead of using the old va field. Add an ifdef to use frag_cache.encoded_page & PAGE_MASK and virt_to_page for those kernels, keep the old path for older kernels. Signed-off-by: Mieczyslaw Nalewaj Link: https://github.com/openwrt/openwrt/pull/21418 Signed-off-by: Robert Marko --- .../files/drivers/net/ethernet/ralink/mtk_eth_soc.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/target/linux/ramips/files/drivers/net/ethernet/ralink/mtk_eth_soc.c b/target/linux/ramips/files/drivers/net/ethernet/ralink/mtk_eth_soc.c index a67dc145da..f53746eee8 100644 --- a/target/linux/ramips/files/drivers/net/ethernet/ralink/mtk_eth_soc.c +++ b/target/linux/ramips/files/drivers/net/ethernet/ralink/mtk_eth_soc.c @@ -34,6 +34,7 @@ #include #include #include +#include #include @@ -243,10 +244,18 @@ static void fe_clean_rx(struct fe_priv *priv) ring->rx_dma = NULL; } +#if LINUX_VERSION_CODE >= KERNEL_VERSION(6,13,0) + void *vaddr = (void *)(ring->frag_cache.encoded_page & PAGE_MASK); + if (!vaddr) + return; + + page = virt_to_page(vaddr); +#else if (!ring->frag_cache.va) return; page = virt_to_page(ring->frag_cache.va); +#endif __page_frag_cache_drain(page, ring->frag_cache.pagecnt_bias); memset(&ring->frag_cache, 0, sizeof(ring->frag_cache)); }