]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
ldmvsw: disable tso and gso for bridge operations
authorShannon Nelson <shannon.nelson@oracle.com>
Mon, 13 Feb 2017 18:57:04 +0000 (10:57 -0800)
committerChuck Anderson <chuck.anderson@oracle.com>
Thu, 6 Apr 2017 07:13:53 +0000 (00:13 -0700)
The ldmvsw driver is specifically for supporting the ldom virtual
networking by running in the primary ldom and using the LDC to connect
the remaining ldoms to the outside world via a bridge.  With TSO and GSO
supported while connected the bridge, things tend to misbehave as seen
in our case by delayed packets, enough to begin triggering retransmits
and affecting overall throughput.  By turning off advertised support for
TSO and GSO we restore stable traffic flow through the bridge.

Orabug: 23293104

Signed-off-by: Shannon Nelson <shannon.nelson@oracle.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
(cherry picked from commit bc221a34ac473b444a7cfdd0c152b4c71f79326b)
Signed-off-by: Allen Pais <allen.pais@oracle.com>
drivers/net/ethernet/sun/ldmvsw.c
drivers/net/ethernet/sun/sunvnet_common.c

index cd359c282ddc554495dbd5ba5519a9a6cdb7b343..11726063ae6bcbcda79ba98450f3534ead324ed8 100644 (file)
@@ -236,8 +236,7 @@ static struct net_device *vsw_alloc_netdev(u8 hwaddr[],
        dev->ethtool_ops = &vsw_ethtool_ops;
        dev->watchdog_timeo = VSW_TX_TIMEOUT;
 
-       dev->hw_features = NETIF_F_TSO | NETIF_F_GSO | NETIF_F_GSO_SOFTWARE |
-                          NETIF_F_HW_CSUM | NETIF_F_SG;
+       dev->hw_features = NETIF_F_HW_CSUM | NETIF_F_SG;
        dev->features = dev->hw_features;
 
        SET_NETDEV_DEV(dev, &vdev->dev);
@@ -327,7 +326,7 @@ static int vsw_port_probe(struct vio_dev *vdev, const struct vio_device_id *id)
        port->vp = vp;
        port->dev = dev;
        port->switch_port = 1;
-       port->tso = true;
+       port->tso = false; /* no tso in vsw, misbehaves in bridge */
        port->tsolen = 0;
 
        /* Mark the port as belonging to ldmvsw which directs the
index 2e7ece0f0900178cbdd238597a527a4fed61dece..260ddb9b2ed9c87e84eb584344cb075c123f751e 100644 (file)
@@ -186,6 +186,7 @@ static int handle_attr_info(struct vio_driver_state *vio,
        } else {
                pkt->cflags &= ~VNET_LSO_IPV4_CAPAB;
                pkt->ipv4_lso_maxlen = 0;
+               port->tsolen = 0;
        }
 
        /* for version >= 1.6, ACK packet mode we support */
@@ -1667,7 +1668,7 @@ static void vnet_port_reset(struct vnet_port *port)
        del_timer(&port->clean_timer);
        sunvnet_port_free_tx_bufs_common(port);
        port->rmtu = 0;
-       port->tso = true;
+       port->tso = (port->vsw == 0);  /* no tso in vsw, misbehaves in bridge */
        port->tsolen = 0;
 }