Index: linux-4.9.17/drivers/net/ethernet/mediatek/mtk_eth_soc.c =================================================================== --- linux-4.9.17.orig/drivers/net/ethernet/mediatek/mtk_eth_soc.c +++ linux-4.9.17/drivers/net/ethernet/mediatek/mtk_eth_soc.c @@ -2459,15 +2459,23 @@ static int mtk_probe(struct platform_dev goto err_deinit_hw; } + for (i = 0; i < 3; i++) { + int cpu = i % num_online_cpus(); + + cpumask_set_cpu(cpu, ð->affinity_mask[i]); + } + err = devm_request_irq(eth->dev, eth->irq[1], mtk_handle_irq_tx, 0, dev_name(eth->dev), eth); if (err) goto err_free_dev; + irq_set_affinity_hint(eth->irq[1], ð->affinity_mask[1]); err = devm_request_irq(eth->dev, eth->irq[2], mtk_handle_irq_rx, 0, dev_name(eth->dev), eth); if (err) goto err_free_dev; + irq_set_affinity_hint(eth->irq[2], ð->affinity_mask[2]); err = mtk_mdio_init(eth); if (err) Index: linux-4.9.17/drivers/net/ethernet/mediatek/mtk_eth_soc.h =================================================================== --- linux-4.9.17.orig/drivers/net/ethernet/mediatek/mtk_eth_soc.h +++ linux-4.9.17/drivers/net/ethernet/mediatek/mtk_eth_soc.h @@ -539,6 +539,7 @@ struct mtk_eth { struct net_device *netdev[MTK_MAX_DEVS]; struct mtk_mac *mac[MTK_MAX_DEVS]; int irq[3]; + cpumask_t affinity_mask[3]; u32 msg_enable; unsigned long sysclk; struct regmap *ethsys;