When netvsc is accelerated by the lower device, we can advertise the
lower device max tso size in order to get better performance.
While a long-term migration to user-space bonding is planned, current
users on RHEL 10 / Azure are experiencing significant performance
regressions in 802.3ad environments. This patch provides a localized,
safe fix within netvsc without introducing new core networking helpers.

Signed-off-by: Li Tian <[email protected]>
---
 drivers/net/hyperv/netvsc_drv.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/drivers/net/hyperv/netvsc_drv.c b/drivers/net/hyperv/netvsc_drv.c
index ee5ab5ceb2be..971607c7406f 100644
--- a/drivers/net/hyperv/netvsc_drv.c
+++ b/drivers/net/hyperv/netvsc_drv.c
@@ -2428,10 +2428,14 @@ static int netvsc_vf_changed(struct net_device 
*vf_netdev, unsigned long event)
                 * This value is only increased for netvsc NIC when datapath is
                 * switched over to the VF
                 */
-               if (vf_is_up)
+               if (vf_is_up) {
                        netif_set_tso_max_size(ndev, vf_netdev->tso_max_size);
-               else
+                       WRITE_ONCE(ndev->gso_max_size, 
READ_ONCE(vf_netdev->gso_max_size));
+                       WRITE_ONCE(ndev->gso_ipv4_max_size,
+                                  READ_ONCE(vf_netdev->gso_ipv4_max_size));
+               } else {
                        netif_set_tso_max_size(ndev, 
netvsc_dev->netvsc_gso_max_size);
+               }
        }
 
        return NOTIFY_OK;
-- 
2.53.0


Reply via email to