Commit c337ffb68e1e71bad069b14d2246fa1e0c31699c
Exists in
master
and in
4 other branches
Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
Showing 13 changed files Side-by-side Diff
- 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
Documentation/networking/bonding.txt
... | ... | @@ -2558,25 +2558,33 @@ |
2558 | 2558 | 16. Resources and Links |
2559 | 2559 | ======================= |
2560 | 2560 | |
2561 | -The latest version of the bonding driver can be found in the latest | |
2561 | + The latest version of the bonding driver can be found in the latest | |
2562 | 2562 | version of the linux kernel, found on http://kernel.org |
2563 | 2563 | |
2564 | -The latest version of this document can be found in either the latest | |
2565 | -kernel source (named Documentation/networking/bonding.txt), or on the | |
2566 | -bonding sourceforge site: | |
2564 | + The latest version of this document can be found in the latest kernel | |
2565 | +source (named Documentation/networking/bonding.txt). | |
2567 | 2566 | |
2568 | -http://www.sourceforge.net/projects/bonding | |
2567 | + Discussions regarding the usage of the bonding driver take place on the | |
2568 | +bonding-devel mailing list, hosted at sourceforge.net. If you have questions or | |
2569 | +problems, post them to the list. The list address is: | |
2569 | 2570 | |
2570 | -Discussions regarding the bonding driver take place primarily on the | |
2571 | -bonding-devel mailing list, hosted at sourceforge.net. If you have | |
2572 | -questions or problems, post them to the list. The list address is: | |
2573 | - | |
2574 | 2571 | bonding-devel@lists.sourceforge.net |
2575 | 2572 | |
2576 | 2573 | The administrative interface (to subscribe or unsubscribe) can |
2577 | 2574 | be found at: |
2578 | 2575 | |
2579 | 2576 | https://lists.sourceforge.net/lists/listinfo/bonding-devel |
2577 | + | |
2578 | + Discussions regarding the developpement of the bonding driver take place | |
2579 | +on the main Linux network mailing list, hosted at vger.kernel.org. The list | |
2580 | +address is: | |
2581 | + | |
2582 | +netdev@vger.kernel.org | |
2583 | + | |
2584 | + The administrative interface (to subscribe or unsubscribe) can | |
2585 | +be found at: | |
2586 | + | |
2587 | +http://vger.kernel.org/vger-lists.html#netdev | |
2580 | 2588 | |
2581 | 2589 | Donald Becker's Ethernet Drivers and diag programs may be found at : |
2582 | 2590 | - http://web.archive.org/web/*/http://www.scyld.com/network/ |
drivers/net/ariadne.c
... | ... | @@ -425,11 +425,6 @@ |
425 | 425 | int csr0, boguscnt; |
426 | 426 | int handled = 0; |
427 | 427 | |
428 | - if (dev == NULL) { | |
429 | - printk(KERN_WARNING "ariadne_interrupt(): irq for unknown device.\n"); | |
430 | - return IRQ_NONE; | |
431 | - } | |
432 | - | |
433 | 428 | lance->RAP = CSR0; /* PCnet-ISA Controller Status */ |
434 | 429 | |
435 | 430 | if (!(lance->RDP & INTR)) /* Check if any interrupt has been */ |
drivers/net/bnx2x/bnx2x_main.c
drivers/net/can/usb/esd_usb2.c
... | ... | @@ -659,7 +659,7 @@ |
659 | 659 | static void unlink_all_urbs(struct esd_usb2 *dev) |
660 | 660 | { |
661 | 661 | struct esd_usb2_net_priv *priv; |
662 | - int i; | |
662 | + int i, j; | |
663 | 663 | |
664 | 664 | usb_kill_anchored_urbs(&dev->rx_submitted); |
665 | 665 | for (i = 0; i < dev->net_count; i++) { |
... | ... | @@ -668,8 +668,8 @@ |
668 | 668 | usb_kill_anchored_urbs(&priv->tx_submitted); |
669 | 669 | atomic_set(&priv->active_tx_jobs, 0); |
670 | 670 | |
671 | - for (i = 0; i < MAX_TX_URBS; i++) | |
672 | - priv->tx_contexts[i].echo_index = MAX_TX_URBS; | |
671 | + for (j = 0; j < MAX_TX_URBS; j++) | |
672 | + priv->tx_contexts[j].echo_index = MAX_TX_URBS; | |
673 | 673 | } |
674 | 674 | } |
675 | 675 | } |
drivers/net/davinci_emac.c
... | ... | @@ -1730,7 +1730,7 @@ |
1730 | 1730 | emac_read(EMAC_TXCARRIERSENSE); |
1731 | 1731 | emac_write(EMAC_TXCARRIERSENSE, stats_clear_mask); |
1732 | 1732 | |
1733 | - ndev->stats.tx_fifo_errors = emac_read(EMAC_TXUNDERRUN); | |
1733 | + ndev->stats.tx_fifo_errors += emac_read(EMAC_TXUNDERRUN); | |
1734 | 1734 | emac_write(EMAC_TXUNDERRUN, stats_clear_mask); |
1735 | 1735 | |
1736 | 1736 | return &ndev->stats; |
drivers/net/macvlan.c
... | ... | @@ -219,9 +219,11 @@ |
219 | 219 | const struct macvlan_dev *vlan = netdev_priv(dev); |
220 | 220 | const struct macvlan_port *port = vlan->port; |
221 | 221 | const struct macvlan_dev *dest; |
222 | + __u8 ip_summed = skb->ip_summed; | |
222 | 223 | |
223 | 224 | if (vlan->mode == MACVLAN_MODE_BRIDGE) { |
224 | 225 | const struct ethhdr *eth = (void *)skb->data; |
226 | + skb->ip_summed = CHECKSUM_UNNECESSARY; | |
225 | 227 | |
226 | 228 | /* send to other bridge ports directly */ |
227 | 229 | if (is_multicast_ether_addr(eth->h_dest)) { |
... | ... | @@ -241,6 +243,7 @@ |
241 | 243 | } |
242 | 244 | |
243 | 245 | xmit_world: |
246 | + skb->ip_summed = ip_summed; | |
244 | 247 | skb_set_dev(skb, vlan->lowerdev); |
245 | 248 | return dev_queue_xmit(skb); |
246 | 249 | } |
drivers/net/smsc911x.c
... | ... | @@ -791,8 +791,8 @@ |
791 | 791 | return -ENODEV; |
792 | 792 | } |
793 | 793 | |
794 | - SMSC_TRACE(PROBE, "PHY %d: addr %d, phy_id 0x%08X", | |
795 | - phy_addr, phydev->addr, phydev->phy_id); | |
794 | + SMSC_TRACE(PROBE, "PHY: addr %d, phy_id 0x%08X", | |
795 | + phydev->addr, phydev->phy_id); | |
796 | 796 | |
797 | 797 | ret = phy_connect_direct(dev, phydev, |
798 | 798 | &smsc911x_phy_adjust_link, 0, |
drivers/net/usb/cdc-phonet.c
... | ... | @@ -328,13 +328,13 @@ |
328 | 328 | { |
329 | 329 | static const char ifname[] = "usbpn%d"; |
330 | 330 | const struct usb_cdc_union_desc *union_header = NULL; |
331 | - const struct usb_cdc_header_desc *phonet_header = NULL; | |
332 | 331 | const struct usb_host_interface *data_desc; |
333 | 332 | struct usb_interface *data_intf; |
334 | 333 | struct usb_device *usbdev = interface_to_usbdev(intf); |
335 | 334 | struct net_device *dev; |
336 | 335 | struct usbpn_dev *pnd; |
337 | 336 | u8 *data; |
337 | + int phonet = 0; | |
338 | 338 | int len, err; |
339 | 339 | |
340 | 340 | data = intf->altsetting->extra; |
... | ... | @@ -355,10 +355,7 @@ |
355 | 355 | (struct usb_cdc_union_desc *)data; |
356 | 356 | break; |
357 | 357 | case 0xAB: |
358 | - if (phonet_header || dlen < 5) | |
359 | - break; | |
360 | - phonet_header = | |
361 | - (struct usb_cdc_header_desc *)data; | |
358 | + phonet = 1; | |
362 | 359 | break; |
363 | 360 | } |
364 | 361 | } |
... | ... | @@ -366,7 +363,7 @@ |
366 | 363 | len -= dlen; |
367 | 364 | } |
368 | 365 | |
369 | - if (!union_header || !phonet_header) | |
366 | + if (!union_header || !phonet) | |
370 | 367 | return -EINVAL; |
371 | 368 | |
372 | 369 | data_intf = usb_ifnum_to_if(usbdev, union_header->bSlaveInterface0); |
... | ... | @@ -392,7 +389,6 @@ |
392 | 389 | |
393 | 390 | pnd = netdev_priv(dev); |
394 | 391 | SET_NETDEV_DEV(dev, &intf->dev); |
395 | - netif_stop_queue(dev); | |
396 | 392 | |
397 | 393 | pnd->dev = dev; |
398 | 394 | pnd->usb = usb_get_dev(usbdev); |
drivers/net/xen-netfront.c
... | ... | @@ -122,7 +122,7 @@ |
122 | 122 | struct mmu_update rx_mmu[NET_RX_RING_SIZE]; |
123 | 123 | |
124 | 124 | /* Statistics */ |
125 | - int rx_gso_checksum_fixup; | |
125 | + unsigned long rx_gso_checksum_fixup; | |
126 | 126 | }; |
127 | 127 | |
128 | 128 | struct netfront_rx_info { |
... | ... | @@ -1692,7 +1692,7 @@ |
1692 | 1692 | int i; |
1693 | 1693 | |
1694 | 1694 | for (i = 0; i < ARRAY_SIZE(xennet_stats); i++) |
1695 | - data[i] = *(int *)(np + xennet_stats[i].offset); | |
1695 | + data[i] = *(unsigned long *)(np + xennet_stats[i].offset); | |
1696 | 1696 | } |
1697 | 1697 | |
1698 | 1698 | static void xennet_get_strings(struct net_device *dev, u32 stringset, u8 * data) |
net/bridge/br_stp.c
... | ... | @@ -375,12 +375,12 @@ |
375 | 375 | if (p->state != BR_STATE_BLOCKING) |
376 | 376 | return; |
377 | 377 | |
378 | - if (br->forward_delay == 0) { | |
378 | + if (br->stp_enabled == BR_NO_STP || br->forward_delay == 0) { | |
379 | 379 | p->state = BR_STATE_FORWARDING; |
380 | 380 | br_topology_change_detection(br); |
381 | 381 | del_timer(&p->forward_delay_timer); |
382 | 382 | } |
383 | - else if (p->br->stp_enabled == BR_KERNEL_STP) | |
383 | + else if (br->stp_enabled == BR_KERNEL_STP) | |
384 | 384 | p->state = BR_STATE_LISTENING; |
385 | 385 | else |
386 | 386 | p->state = BR_STATE_LEARNING; |
net/ipv4/tcp_cubic.c
... | ... | @@ -39,7 +39,7 @@ |
39 | 39 | |
40 | 40 | /* Number of delay samples for detecting the increase of delay */ |
41 | 41 | #define HYSTART_MIN_SAMPLES 8 |
42 | -#define HYSTART_DELAY_MIN (2U<<3) | |
42 | +#define HYSTART_DELAY_MIN (4U<<3) | |
43 | 43 | #define HYSTART_DELAY_MAX (16U<<3) |
44 | 44 | #define HYSTART_DELAY_THRESH(x) clamp(x, HYSTART_DELAY_MIN, HYSTART_DELAY_MAX) |
45 | 45 | |
... | ... | @@ -52,6 +52,7 @@ |
52 | 52 | static int hystart __read_mostly = 1; |
53 | 53 | static int hystart_detect __read_mostly = HYSTART_ACK_TRAIN | HYSTART_DELAY; |
54 | 54 | static int hystart_low_window __read_mostly = 16; |
55 | +static int hystart_ack_delta __read_mostly = 2; | |
55 | 56 | |
56 | 57 | static u32 cube_rtt_scale __read_mostly; |
57 | 58 | static u32 beta_scale __read_mostly; |
... | ... | @@ -75,6 +76,8 @@ |
75 | 76 | " 1: packet-train 2: delay 3: both packet-train and delay"); |
76 | 77 | module_param(hystart_low_window, int, 0644); |
77 | 78 | MODULE_PARM_DESC(hystart_low_window, "lower bound cwnd for hybrid slow start"); |
79 | +module_param(hystart_ack_delta, int, 0644); | |
80 | +MODULE_PARM_DESC(hystart_ack_delta, "spacing between ack's indicating train (msecs)"); | |
78 | 81 | |
79 | 82 | /* BIC TCP Parameters */ |
80 | 83 | struct bictcp { |
... | ... | @@ -85,7 +88,7 @@ |
85 | 88 | u32 last_time; /* time when updated last_cwnd */ |
86 | 89 | u32 bic_origin_point;/* origin point of bic function */ |
87 | 90 | u32 bic_K; /* time to origin point from the beginning of the current epoch */ |
88 | - u32 delay_min; /* min delay */ | |
91 | + u32 delay_min; /* min delay (msec << 3) */ | |
89 | 92 | u32 epoch_start; /* beginning of an epoch */ |
90 | 93 | u32 ack_cnt; /* number of acks */ |
91 | 94 | u32 tcp_cwnd; /* estimated tcp cwnd */ |
... | ... | @@ -95,7 +98,7 @@ |
95 | 98 | u8 found; /* the exit point is found? */ |
96 | 99 | u32 round_start; /* beginning of each round */ |
97 | 100 | u32 end_seq; /* end_seq of the round */ |
98 | - u32 last_jiffies; /* last time when the ACK spacing is close */ | |
101 | + u32 last_ack; /* last time when the ACK spacing is close */ | |
99 | 102 | u32 curr_rtt; /* the minimum rtt of current round */ |
100 | 103 | }; |
101 | 104 | |
102 | 105 | |
... | ... | @@ -116,12 +119,21 @@ |
116 | 119 | ca->found = 0; |
117 | 120 | } |
118 | 121 | |
122 | +static inline u32 bictcp_clock(void) | |
123 | +{ | |
124 | +#if HZ < 1000 | |
125 | + return ktime_to_ms(ktime_get_real()); | |
126 | +#else | |
127 | + return jiffies_to_msecs(jiffies); | |
128 | +#endif | |
129 | +} | |
130 | + | |
119 | 131 | static inline void bictcp_hystart_reset(struct sock *sk) |
120 | 132 | { |
121 | 133 | struct tcp_sock *tp = tcp_sk(sk); |
122 | 134 | struct bictcp *ca = inet_csk_ca(sk); |
123 | 135 | |
124 | - ca->round_start = ca->last_jiffies = jiffies; | |
136 | + ca->round_start = ca->last_ack = bictcp_clock(); | |
125 | 137 | ca->end_seq = tp->snd_nxt; |
126 | 138 | ca->curr_rtt = 0; |
127 | 139 | ca->sample_cnt = 0; |
... | ... | @@ -236,8 +248,8 @@ |
236 | 248 | */ |
237 | 249 | |
238 | 250 | /* change the unit from HZ to bictcp_HZ */ |
239 | - t = ((tcp_time_stamp + (ca->delay_min>>3) - ca->epoch_start) | |
240 | - << BICTCP_HZ) / HZ; | |
251 | + t = ((tcp_time_stamp + msecs_to_jiffies(ca->delay_min>>3) | |
252 | + - ca->epoch_start) << BICTCP_HZ) / HZ; | |
241 | 253 | |
242 | 254 | if (t < ca->bic_K) /* t - K */ |
243 | 255 | offs = ca->bic_K - t; |
... | ... | @@ -258,6 +270,13 @@ |
258 | 270 | ca->cnt = 100 * cwnd; /* very small increment*/ |
259 | 271 | } |
260 | 272 | |
273 | + /* | |
274 | + * The initial growth of cubic function may be too conservative | |
275 | + * when the available bandwidth is still unknown. | |
276 | + */ | |
277 | + if (ca->loss_cwnd == 0 && ca->cnt > 20) | |
278 | + ca->cnt = 20; /* increase cwnd 5% per RTT */ | |
279 | + | |
261 | 280 | /* TCP Friendly */ |
262 | 281 | if (tcp_friendliness) { |
263 | 282 | u32 scale = beta_scale; |
264 | 283 | |
... | ... | @@ -339,12 +358,12 @@ |
339 | 358 | struct bictcp *ca = inet_csk_ca(sk); |
340 | 359 | |
341 | 360 | if (!(ca->found & hystart_detect)) { |
342 | - u32 curr_jiffies = jiffies; | |
361 | + u32 now = bictcp_clock(); | |
343 | 362 | |
344 | 363 | /* first detection parameter - ack-train detection */ |
345 | - if (curr_jiffies - ca->last_jiffies <= msecs_to_jiffies(2)) { | |
346 | - ca->last_jiffies = curr_jiffies; | |
347 | - if (curr_jiffies - ca->round_start >= ca->delay_min>>4) | |
364 | + if ((s32)(now - ca->last_ack) <= hystart_ack_delta) { | |
365 | + ca->last_ack = now; | |
366 | + if ((s32)(now - ca->round_start) > ca->delay_min >> 4) | |
348 | 367 | ca->found |= HYSTART_ACK_TRAIN; |
349 | 368 | } |
350 | 369 | |
... | ... | @@ -391,7 +410,7 @@ |
391 | 410 | if ((s32)(tcp_time_stamp - ca->epoch_start) < HZ) |
392 | 411 | return; |
393 | 412 | |
394 | - delay = usecs_to_jiffies(rtt_us) << 3; | |
413 | + delay = (rtt_us << 3) / USEC_PER_MSEC; | |
395 | 414 | if (delay == 0) |
396 | 415 | delay = 1; |
397 | 416 | |
... | ... | @@ -446,6 +465,10 @@ |
446 | 465 | |
447 | 466 | /* divide by bic_scale and by constant Srtt (100ms) */ |
448 | 467 | do_div(cube_factor, bic_scale * 10); |
468 | + | |
469 | + /* hystart needs ms clock resolution */ | |
470 | + if (hystart && HZ < 1000) | |
471 | + cubictcp.flags |= TCP_CONG_RTT_STAMP; | |
449 | 472 | |
450 | 473 | return tcp_register_congestion_control(&cubictcp); |
451 | 474 | } |
net/ipv4/tcp_input.c
net/unix/af_unix.c
... | ... | @@ -1124,7 +1124,7 @@ |
1124 | 1124 | |
1125 | 1125 | /* Latch our state. |
1126 | 1126 | |
1127 | - It is tricky place. We need to grab write lock and cannot | |
1127 | + It is tricky place. We need to grab our state lock and cannot | |
1128 | 1128 | drop lock on peer. It is dangerous because deadlock is |
1129 | 1129 | possible. Connect to self case and simultaneous |
1130 | 1130 | attempt to connect are eliminated by checking socket |