diff options
-rw-r--r-- | drivers/net/iseries_veth.c | 48 |
1 files changed, 0 insertions, 48 deletions
diff --git a/drivers/net/iseries_veth.c b/drivers/net/iseries_veth.c index 5ce9f9348042..7d6ba5114a1e 100644 --- a/drivers/net/iseries_veth.c +++ b/drivers/net/iseries_veth.c | |||
@@ -830,49 +830,6 @@ static struct ethtool_ops ops = { | |||
830 | .get_link = veth_get_link, | 830 | .get_link = veth_get_link, |
831 | }; | 831 | }; |
832 | 832 | ||
833 | static void veth_tx_timeout(struct net_device *dev) | ||
834 | { | ||
835 | struct veth_port *port = (struct veth_port *)dev->priv; | ||
836 | struct net_device_stats *stats = &port->stats; | ||
837 | unsigned long flags; | ||
838 | int i; | ||
839 | |||
840 | stats->tx_errors++; | ||
841 | |||
842 | spin_lock_irqsave(&port->pending_gate, flags); | ||
843 | |||
844 | if (!port->pending_lpmask) { | ||
845 | spin_unlock_irqrestore(&port->pending_gate, flags); | ||
846 | return; | ||
847 | } | ||
848 | |||
849 | printk(KERN_WARNING "%s: Tx timeout! Resetting lp connections: %08x\n", | ||
850 | dev->name, port->pending_lpmask); | ||
851 | |||
852 | for (i = 0; i < HVMAXARCHITECTEDLPS; i++) { | ||
853 | struct veth_lpar_connection *cnx = veth_cnx[i]; | ||
854 | |||
855 | if (! (port->pending_lpmask & (1<<i))) | ||
856 | continue; | ||
857 | |||
858 | /* If we're pending on it, we must be connected to it, | ||
859 | * so we should certainly have a structure for it. */ | ||
860 | BUG_ON(! cnx); | ||
861 | |||
862 | /* Theoretically we could be kicking a connection | ||
863 | * which doesn't deserve it, but in practice if we've | ||
864 | * had a Tx timeout, the pending_lpmask will have | ||
865 | * exactly one bit set - the connection causing the | ||
866 | * problem. */ | ||
867 | spin_lock(&cnx->lock); | ||
868 | cnx->state |= VETH_STATE_RESET; | ||
869 | veth_kick_statemachine(cnx); | ||
870 | spin_unlock(&cnx->lock); | ||
871 | } | ||
872 | |||
873 | spin_unlock_irqrestore(&port->pending_gate, flags); | ||
874 | } | ||
875 | |||
876 | static struct net_device * __init veth_probe_one(int vlan, struct device *vdev) | 833 | static struct net_device * __init veth_probe_one(int vlan, struct device *vdev) |
877 | { | 834 | { |
878 | struct net_device *dev; | 835 | struct net_device *dev; |
@@ -921,9 +878,6 @@ static struct net_device * __init veth_probe_one(int vlan, struct device *vdev) | |||
921 | dev->set_multicast_list = veth_set_multicast_list; | 878 | dev->set_multicast_list = veth_set_multicast_list; |
922 | SET_ETHTOOL_OPS(dev, &ops); | 879 | SET_ETHTOOL_OPS(dev, &ops); |
923 | 880 | ||
924 | dev->watchdog_timeo = 2 * (VETH_ACKTIMEOUT * HZ / 1000000); | ||
925 | dev->tx_timeout = veth_tx_timeout; | ||
926 | |||
927 | SET_NETDEV_DEV(dev, vdev); | 881 | SET_NETDEV_DEV(dev, vdev); |
928 | 882 | ||
929 | rc = register_netdev(dev); | 883 | rc = register_netdev(dev); |
@@ -1058,8 +1012,6 @@ static int veth_start_xmit(struct sk_buff *skb, struct net_device *dev) | |||
1058 | 1012 | ||
1059 | lpmask = veth_transmit_to_many(skb, lpmask, dev); | 1013 | lpmask = veth_transmit_to_many(skb, lpmask, dev); |
1060 | 1014 | ||
1061 | dev->trans_start = jiffies; | ||
1062 | |||
1063 | if (! lpmask) { | 1015 | if (! lpmask) { |
1064 | dev_kfree_skb(skb); | 1016 | dev_kfree_skb(skb); |
1065 | } else { | 1017 | } else { |