]> git.proxmox.com Git - mirror_ubuntu-kernels.git/commitdiff
Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
authorDavid S. Miller <davem@davemloft.net>
Tue, 15 Mar 2011 22:15:17 +0000 (15:15 -0700)
committerDavid S. Miller <davem@davemloft.net>
Tue, 15 Mar 2011 22:15:17 +0000 (15:15 -0700)
13 files changed:
Documentation/networking/bonding.txt
drivers/net/ariadne.c
drivers/net/bnx2x/bnx2x_main.c
drivers/net/can/usb/esd_usb2.c
drivers/net/davinci_emac.c
drivers/net/macvlan.c
drivers/net/smsc911x.c
drivers/net/usb/cdc-phonet.c
drivers/net/xen-netfront.c
net/bridge/br_stp.c
net/ipv4/tcp_cubic.c
net/ipv4/tcp_input.c
net/unix/af_unix.c

index 25d2f4141d27aaa53d297688de68326c85571dcb..b36e741e94dbf9305a55535fa1eaaeed3fa3372e 100644 (file)
@@ -2558,18 +2558,15 @@ enslaved.
 16. Resources and Links
 =======================
 
-The latest version of the bonding driver can be found in the latest
+       The latest version of the bonding driver can be found in the latest
 version of the linux kernel, found on http://kernel.org
 
-The latest version of this document can be found in either the latest
-kernel source (named Documentation/networking/bonding.txt), or on the
-bonding sourceforge site:
+       The latest version of this document can be found in the latest kernel
+source (named Documentation/networking/bonding.txt).
 
-http://www.sourceforge.net/projects/bonding
-
-Discussions regarding the bonding driver take place primarily on the
-bonding-devel mailing list, hosted at sourceforge.net.  If you have
-questions or problems, post them to the list.  The list address is:
+       Discussions regarding the usage of the bonding driver take place on the
+bonding-devel mailing list, hosted at sourceforge.net. If you have questions or
+problems, post them to the list.  The list address is:
 
 bonding-devel@lists.sourceforge.net
 
@@ -2578,6 +2575,17 @@ be found at:
 
 https://lists.sourceforge.net/lists/listinfo/bonding-devel
 
+       Discussions regarding the developpement of the bonding driver take place
+on the main Linux network mailing list, hosted at vger.kernel.org. The list
+address is:
+
+netdev@vger.kernel.org
+
+       The administrative interface (to subscribe or unsubscribe) can
+be found at:
+
+http://vger.kernel.org/vger-lists.html#netdev
+
 Donald Becker's Ethernet Drivers and diag programs may be found at :
  - http://web.archive.org/web/*/http://www.scyld.com/network/ 
 
index 39214e51245225056c1cedf9c3404f6cdd51dc2f..7ca0eded2561c2261b16be4dbf1087214eb3b029 100644 (file)
@@ -425,11 +425,6 @@ static irqreturn_t ariadne_interrupt(int irq, void *data)
     int csr0, boguscnt;
     int handled = 0;
 
-    if (dev == NULL) {
-       printk(KERN_WARNING "ariadne_interrupt(): irq for unknown device.\n");
-       return IRQ_NONE;
-    }
-
     lance->RAP = CSR0;                 /* PCnet-ISA Controller Status */
 
     if (!(lance->RDP & INTR))          /* Check if any interrupt has been */
index bba21d5f708b6a3f14c726539605ee11c502d73c..9d48659e3b2867b56304cc5c4c205a6c4ba52286 100644 (file)
@@ -4229,7 +4229,7 @@ void bnx2x_update_coalesce(struct bnx2x *bp)
 
        for_each_eth_queue(bp, i)
                bnx2x_update_coalesce_sb(bp, bp->fp[i].fw_sb_id,
-                                        bp->rx_ticks, bp->tx_ticks);
+                                        bp->tx_ticks, bp->rx_ticks);
 }
 
 static void bnx2x_init_sp_ring(struct bnx2x *bp)
index 05a52754f486a73a3efe3cba72b309a3fb9f72f5..dc53c831ea956fac00f70895867918f688524ae5 100644 (file)
@@ -659,7 +659,7 @@ failed:
 static void unlink_all_urbs(struct esd_usb2 *dev)
 {
        struct esd_usb2_net_priv *priv;
-       int i;
+       int i, j;
 
        usb_kill_anchored_urbs(&dev->rx_submitted);
        for (i = 0; i < dev->net_count; i++) {
@@ -668,8 +668,8 @@ static void unlink_all_urbs(struct esd_usb2 *dev)
                        usb_kill_anchored_urbs(&priv->tx_submitted);
                        atomic_set(&priv->active_tx_jobs, 0);
 
-                       for (i = 0; i < MAX_TX_URBS; i++)
-                               priv->tx_contexts[i].echo_index = MAX_TX_URBS;
+                       for (j = 0; j < MAX_TX_URBS; j++)
+                               priv->tx_contexts[j].echo_index = MAX_TX_URBS;
                }
        }
 }
index 7018bfe408a4ecd6f21076e7093a06cb86ae2fab..082d6ea699206b2a2e0ff2ad7b5cfdd125620e31 100644 (file)
@@ -1730,7 +1730,7 @@ static struct net_device_stats *emac_dev_getnetstats(struct net_device *ndev)
                emac_read(EMAC_TXCARRIERSENSE);
        emac_write(EMAC_TXCARRIERSENSE, stats_clear_mask);
 
-       ndev->stats.tx_fifo_errors = emac_read(EMAC_TXUNDERRUN);
+       ndev->stats.tx_fifo_errors += emac_read(EMAC_TXUNDERRUN);
        emac_write(EMAC_TXUNDERRUN, stats_clear_mask);
 
        return &ndev->stats;
index 6ed577b065df136a18af5ee483810773ca4f43f8..497991bd3b64044f62e5a785efd733b90843b257 100644 (file)
@@ -219,9 +219,11 @@ static int macvlan_queue_xmit(struct sk_buff *skb, struct net_device *dev)
        const struct macvlan_dev *vlan = netdev_priv(dev);
        const struct macvlan_port *port = vlan->port;
        const struct macvlan_dev *dest;
+       __u8 ip_summed = skb->ip_summed;
 
        if (vlan->mode == MACVLAN_MODE_BRIDGE) {
                const struct ethhdr *eth = (void *)skb->data;
+               skb->ip_summed = CHECKSUM_UNNECESSARY;
 
                /* send to other bridge ports directly */
                if (is_multicast_ether_addr(eth->h_dest)) {
@@ -241,6 +243,7 @@ static int macvlan_queue_xmit(struct sk_buff *skb, struct net_device *dev)
        }
 
 xmit_world:
+       skb->ip_summed = ip_summed;
        skb_set_dev(skb, vlan->lowerdev);
        return dev_queue_xmit(skb);
 }
index d70bde95460ba24c53585783c9816db0425911b8..1566259c1f27aafe88f53a18fe31195773630524 100644 (file)
@@ -791,8 +791,8 @@ static int smsc911x_mii_probe(struct net_device *dev)
                return -ENODEV;
        }
 
-       SMSC_TRACE(PROBE, "PHY %d: addr %d, phy_id 0x%08X",
-                       phy_addr, phydev->addr, phydev->phy_id);
+       SMSC_TRACE(PROBE, "PHY: addr %d, phy_id 0x%08X",
+                       phydev->addr, phydev->phy_id);
 
        ret = phy_connect_direct(dev, phydev,
                        &smsc911x_phy_adjust_link, 0,
index 109751bad3bb39e39799bb9638e7a947fa11677d..f967913e11bc2b7becdcf6936f180d06f7dab6e1 100644 (file)
@@ -328,13 +328,13 @@ int usbpn_probe(struct usb_interface *intf, const struct usb_device_id *id)
 {
        static const char ifname[] = "usbpn%d";
        const struct usb_cdc_union_desc *union_header = NULL;
-       const struct usb_cdc_header_desc *phonet_header = NULL;
        const struct usb_host_interface *data_desc;
        struct usb_interface *data_intf;
        struct usb_device *usbdev = interface_to_usbdev(intf);
        struct net_device *dev;
        struct usbpn_dev *pnd;
        u8 *data;
+       int phonet = 0;
        int len, err;
 
        data = intf->altsetting->extra;
@@ -355,10 +355,7 @@ int usbpn_probe(struct usb_interface *intf, const struct usb_device_id *id)
                                        (struct usb_cdc_union_desc *)data;
                                break;
                        case 0xAB:
-                               if (phonet_header || dlen < 5)
-                                       break;
-                               phonet_header =
-                                       (struct usb_cdc_header_desc *)data;
+                               phonet = 1;
                                break;
                        }
                }
@@ -366,7 +363,7 @@ int usbpn_probe(struct usb_interface *intf, const struct usb_device_id *id)
                len -= dlen;
        }
 
-       if (!union_header || !phonet_header)
+       if (!union_header || !phonet)
                return -EINVAL;
 
        data_intf = usb_ifnum_to_if(usbdev, union_header->bSlaveInterface0);
@@ -392,7 +389,6 @@ int usbpn_probe(struct usb_interface *intf, const struct usb_device_id *id)
 
        pnd = netdev_priv(dev);
        SET_NETDEV_DEV(dev, &intf->dev);
-       netif_stop_queue(dev);
 
        pnd->dev = dev;
        pnd->usb = usb_get_dev(usbdev);
index da1f121203466c10bc668f84d1f511486273e292..5b399b54fef7058ecba5d5c6778246915a33ec18 100644 (file)
@@ -122,7 +122,7 @@ struct netfront_info {
        struct mmu_update rx_mmu[NET_RX_RING_SIZE];
 
        /* Statistics */
-       int rx_gso_checksum_fixup;
+       unsigned long rx_gso_checksum_fixup;
 };
 
 struct netfront_rx_info {
@@ -1692,7 +1692,7 @@ static void xennet_get_ethtool_stats(struct net_device *dev,
        int i;
 
        for (i = 0; i < ARRAY_SIZE(xennet_stats); i++)
-               data[i] = *(int *)(np + xennet_stats[i].offset);
+               data[i] = *(unsigned long *)(np + xennet_stats[i].offset);
 }
 
 static void xennet_get_strings(struct net_device *dev, u32 stringset, u8 * data)
index a5badd0f82260c630a7f53f176fc218fe1c85eaa..7370d14f634d71427d993dae89cd017067e8fcd1 100644 (file)
@@ -375,12 +375,12 @@ static void br_make_forwarding(struct net_bridge_port *p)
        if (p->state != BR_STATE_BLOCKING)
                return;
 
-       if (br->forward_delay == 0) {
+       if (br->stp_enabled == BR_NO_STP || br->forward_delay == 0) {
                p->state = BR_STATE_FORWARDING;
                br_topology_change_detection(br);
                del_timer(&p->forward_delay_timer);
        }
-       else if (p->br->stp_enabled == BR_KERNEL_STP)
+       else if (br->stp_enabled == BR_KERNEL_STP)
                p->state = BR_STATE_LISTENING;
        else
                p->state = BR_STATE_LEARNING;
index 62f775cb0863d6e17e89a6328d408224d0b70819..34340c9c95fab4f3c9aa108fbed4dd7f69028cd9 100644 (file)
@@ -39,7 +39,7 @@
 
 /* Number of delay samples for detecting the increase of delay */
 #define HYSTART_MIN_SAMPLES    8
-#define HYSTART_DELAY_MIN      (2U<<3)
+#define HYSTART_DELAY_MIN      (4U<<3)
 #define HYSTART_DELAY_MAX      (16U<<3)
 #define HYSTART_DELAY_THRESH(x)        clamp(x, HYSTART_DELAY_MIN, HYSTART_DELAY_MAX)
 
@@ -52,6 +52,7 @@ static int tcp_friendliness __read_mostly = 1;
 static int hystart __read_mostly = 1;
 static int hystart_detect __read_mostly = HYSTART_ACK_TRAIN | HYSTART_DELAY;
 static int hystart_low_window __read_mostly = 16;
+static int hystart_ack_delta __read_mostly = 2;
 
 static u32 cube_rtt_scale __read_mostly;
 static u32 beta_scale __read_mostly;
@@ -75,6 +76,8 @@ MODULE_PARM_DESC(hystart_detect, "hyrbrid slow start detection mechanisms"
                 " 1: packet-train 2: delay 3: both packet-train and delay");
 module_param(hystart_low_window, int, 0644);
 MODULE_PARM_DESC(hystart_low_window, "lower bound cwnd for hybrid slow start");
+module_param(hystart_ack_delta, int, 0644);
+MODULE_PARM_DESC(hystart_ack_delta, "spacing between ack's indicating train (msecs)");
 
 /* BIC TCP Parameters */
 struct bictcp {
@@ -85,7 +88,7 @@ struct bictcp {
        u32     last_time;      /* time when updated last_cwnd */
        u32     bic_origin_point;/* origin point of bic function */
        u32     bic_K;          /* time to origin point from the beginning of the current epoch */
-       u32     delay_min;      /* min delay */
+       u32     delay_min;      /* min delay (msec << 3) */
        u32     epoch_start;    /* beginning of an epoch */
        u32     ack_cnt;        /* number of acks */
        u32     tcp_cwnd;       /* estimated tcp cwnd */
@@ -95,7 +98,7 @@ struct bictcp {
        u8      found;          /* the exit point is found? */
        u32     round_start;    /* beginning of each round */
        u32     end_seq;        /* end_seq of the round */
-       u32     last_jiffies;   /* last time when the ACK spacing is close */
+       u32     last_ack;       /* last time when the ACK spacing is close */
        u32     curr_rtt;       /* the minimum rtt of current round */
 };
 
@@ -116,12 +119,21 @@ static inline void bictcp_reset(struct bictcp *ca)
        ca->found = 0;
 }
 
+static inline u32 bictcp_clock(void)
+{
+#if HZ < 1000
+       return ktime_to_ms(ktime_get_real());
+#else
+       return jiffies_to_msecs(jiffies);
+#endif
+}
+
 static inline void bictcp_hystart_reset(struct sock *sk)
 {
        struct tcp_sock *tp = tcp_sk(sk);
        struct bictcp *ca = inet_csk_ca(sk);
 
-       ca->round_start = ca->last_jiffies = jiffies;
+       ca->round_start = ca->last_ack = bictcp_clock();
        ca->end_seq = tp->snd_nxt;
        ca->curr_rtt = 0;
        ca->sample_cnt = 0;
@@ -236,8 +248,8 @@ static inline void bictcp_update(struct bictcp *ca, u32 cwnd)
         */
 
        /* change the unit from HZ to bictcp_HZ */
-       t = ((tcp_time_stamp + (ca->delay_min>>3) - ca->epoch_start)
-            << BICTCP_HZ) / HZ;
+       t = ((tcp_time_stamp + msecs_to_jiffies(ca->delay_min>>3)
+             - ca->epoch_start) << BICTCP_HZ) / HZ;
 
        if (t < ca->bic_K)              /* t - K */
                offs = ca->bic_K - t;
@@ -258,6 +270,13 @@ static inline void bictcp_update(struct bictcp *ca, u32 cwnd)
                ca->cnt = 100 * cwnd;              /* very small increment*/
        }
 
+       /*
+        * The initial growth of cubic function may be too conservative
+        * when the available bandwidth is still unknown.
+        */
+       if (ca->loss_cwnd == 0 && ca->cnt > 20)
+               ca->cnt = 20;   /* increase cwnd 5% per RTT */
+
        /* TCP Friendly */
        if (tcp_friendliness) {
                u32 scale = beta_scale;
@@ -339,12 +358,12 @@ static void hystart_update(struct sock *sk, u32 delay)
        struct bictcp *ca = inet_csk_ca(sk);
 
        if (!(ca->found & hystart_detect)) {
-               u32 curr_jiffies = jiffies;
+               u32 now = bictcp_clock();
 
                /* first detection parameter - ack-train detection */
-               if (curr_jiffies - ca->last_jiffies <= msecs_to_jiffies(2)) {
-                       ca->last_jiffies = curr_jiffies;
-                       if (curr_jiffies - ca->round_start >= ca->delay_min>>4)
+               if ((s32)(now - ca->last_ack) <= hystart_ack_delta) {
+                       ca->last_ack = now;
+                       if ((s32)(now - ca->round_start) > ca->delay_min >> 4)
                                ca->found |= HYSTART_ACK_TRAIN;
                }
 
@@ -391,7 +410,7 @@ static void bictcp_acked(struct sock *sk, u32 cnt, s32 rtt_us)
        if ((s32)(tcp_time_stamp - ca->epoch_start) < HZ)
                return;
 
-       delay = usecs_to_jiffies(rtt_us) << 3;
+       delay = (rtt_us << 3) / USEC_PER_MSEC;
        if (delay == 0)
                delay = 1;
 
@@ -447,6 +466,10 @@ static int __init cubictcp_register(void)
        /* divide by bic_scale and by constant Srtt (100ms) */
        do_div(cube_factor, bic_scale * 10);
 
+       /* hystart needs ms clock resolution */
+       if (hystart && HZ < 1000)
+               cubictcp.flags |= TCP_CONG_RTT_STAMP;
+
        return tcp_register_congestion_control(&cubictcp);
 }
 
index 08ea735b9d7299ca7391634dccde443589387246..da782e7ab16dfd3e9cf01c69a7240ba4c4ec48e7 100644 (file)
@@ -3350,7 +3350,7 @@ static int tcp_clean_rtx_queue(struct sock *sk, int prior_fackets,
                                                 net_invalid_timestamp()))
                                        rtt_us = ktime_us_delta(ktime_get_real(),
                                                                last_ackt);
-                               else if (ca_seq_rtt > 0)
+                               else if (ca_seq_rtt >= 0)
                                        rtt_us = jiffies_to_usecs(ca_seq_rtt);
                        }
 
index de870184e457fcb45abc010cbd79e3a3c2cdbb25..ef70615d41a114fdc91cb37306e391c9cb71c871 100644 (file)
@@ -1124,7 +1124,7 @@ restart:
 
        /* Latch our state.
 
-          It is tricky place. We need to grab write lock and cannot
+          It is tricky place. We need to grab our state lock and cannot
           drop lock on peer. It is dangerous because deadlock is
           possible. Connect to self case and simultaneous
           attempt to connect are eliminated by checking socket