Commit bfea13d4a127aab4c10085b6f9b6e2ff4f023f79

Authored by Linus Torvalds

Merge master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6

* master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6:
  [IPV4]: Remove IPVS icmp hack from route.c for now.
  [IPV4]: Correct rp_filter help text.
  [TCP]: TCP_CONG_YEAH requires TCP_CONG_VEGAS
  [TCP] slow start: Make comments and code logic clearer.
  [BLUETOOTH]: Fix locking in hci_sock_dev_event().
  [NET]: Fix BMSR_100{HALF,FULL}2 defines in linux/mii.h
  [NET]: lockdep classes in register_netdevice

Showing 6 changed files Side-by-side Diff

... ... @@ -56,8 +56,8 @@
56 56 #define BMSR_ANEGCOMPLETE 0x0020 /* Auto-negotiation complete */
57 57 #define BMSR_RESV 0x00c0 /* Unused... */
58 58 #define BMSR_ESTATEN 0x0100 /* Extended Status in R15 */
59   -#define BMSR_100FULL2 0x0200 /* Can do 100BASE-T2 HDX */
60   -#define BMSR_100HALF2 0x0400 /* Can do 100BASE-T2 FDX */
  59 +#define BMSR_100HALF2 0x0200 /* Can do 100BASE-T2 HDX */
  60 +#define BMSR_100FULL2 0x0400 /* Can do 100BASE-T2 FDX */
61 61 #define BMSR_10HALF 0x0800 /* Can do 10mbps, half-duplex */
62 62 #define BMSR_10FULL 0x1000 /* Can do 10mbps, full-duplex */
63 63 #define BMSR_100HALF 0x2000 /* Can do 100mbps, half-duplex */
net/bluetooth/hci_sock.c
... ... @@ -665,7 +665,8 @@
665 665 /* Detach sockets from device */
666 666 read_lock(&hci_sk_list.lock);
667 667 sk_for_each(sk, node, &hci_sk_list.head) {
668   - lock_sock(sk);
  668 + local_bh_disable();
  669 + bh_lock_sock_nested(sk);
669 670 if (hci_pi(sk)->hdev == hdev) {
670 671 hci_pi(sk)->hdev = NULL;
671 672 sk->sk_err = EPIPE;
... ... @@ -674,7 +675,8 @@
674 675  
675 676 hci_dev_put(hdev);
676 677 }
677   - release_sock(sk);
  678 + bh_unlock_sock(sk);
  679 + local_bh_enable();
678 680 }
679 681 read_unlock(&hci_sk_list.lock);
680 682 }
... ... @@ -116,6 +116,7 @@
116 116 #include <linux/dmaengine.h>
117 117 #include <linux/err.h>
118 118 #include <linux/ctype.h>
  119 +#include <linux/if_arp.h>
119 120  
120 121 /*
121 122 * The list of packet types we will receive (as opposed to discard)
122 123  
... ... @@ -217,7 +218,74 @@
217 218 #define netdev_unregister_sysfs(dev) do { } while(0)
218 219 #endif
219 220  
  221 +#ifdef CONFIG_DEBUG_LOCK_ALLOC
  222 +/*
  223 + * register_netdevice() inits dev->_xmit_lock and sets lockdep class
  224 + * according to dev->type
  225 + */
  226 +static const unsigned short netdev_lock_type[] =
  227 + {ARPHRD_NETROM, ARPHRD_ETHER, ARPHRD_EETHER, ARPHRD_AX25,
  228 + ARPHRD_PRONET, ARPHRD_CHAOS, ARPHRD_IEEE802, ARPHRD_ARCNET,
  229 + ARPHRD_APPLETLK, ARPHRD_DLCI, ARPHRD_ATM, ARPHRD_METRICOM,
  230 + ARPHRD_IEEE1394, ARPHRD_EUI64, ARPHRD_INFINIBAND, ARPHRD_SLIP,
  231 + ARPHRD_CSLIP, ARPHRD_SLIP6, ARPHRD_CSLIP6, ARPHRD_RSRVD,
  232 + ARPHRD_ADAPT, ARPHRD_ROSE, ARPHRD_X25, ARPHRD_HWX25,
  233 + ARPHRD_PPP, ARPHRD_CISCO, ARPHRD_LAPB, ARPHRD_DDCMP,
  234 + ARPHRD_RAWHDLC, ARPHRD_TUNNEL, ARPHRD_TUNNEL6, ARPHRD_FRAD,
  235 + ARPHRD_SKIP, ARPHRD_LOOPBACK, ARPHRD_LOCALTLK, ARPHRD_FDDI,
  236 + ARPHRD_BIF, ARPHRD_SIT, ARPHRD_IPDDP, ARPHRD_IPGRE,
  237 + ARPHRD_PIMREG, ARPHRD_HIPPI, ARPHRD_ASH, ARPHRD_ECONET,
  238 + ARPHRD_IRDA, ARPHRD_FCPP, ARPHRD_FCAL, ARPHRD_FCPL,
  239 + ARPHRD_FCFABRIC, ARPHRD_IEEE802_TR, ARPHRD_IEEE80211,
  240 + ARPHRD_IEEE80211_PRISM, ARPHRD_IEEE80211_RADIOTAP, ARPHRD_VOID,
  241 + ARPHRD_NONE};
220 242  
  243 +static const char *netdev_lock_name[] =
  244 + {"_xmit_NETROM", "_xmit_ETHER", "_xmit_EETHER", "_xmit_AX25",
  245 + "_xmit_PRONET", "_xmit_CHAOS", "_xmit_IEEE802", "_xmit_ARCNET",
  246 + "_xmit_APPLETLK", "_xmit_DLCI", "_xmit_ATM", "_xmit_METRICOM",
  247 + "_xmit_IEEE1394", "_xmit_EUI64", "_xmit_INFINIBAND", "_xmit_SLIP",
  248 + "_xmit_CSLIP", "_xmit_SLIP6", "_xmit_CSLIP6", "_xmit_RSRVD",
  249 + "_xmit_ADAPT", "_xmit_ROSE", "_xmit_X25", "_xmit_HWX25",
  250 + "_xmit_PPP", "_xmit_CISCO", "_xmit_LAPB", "_xmit_DDCMP",
  251 + "_xmit_RAWHDLC", "_xmit_TUNNEL", "_xmit_TUNNEL6", "_xmit_FRAD",
  252 + "_xmit_SKIP", "_xmit_LOOPBACK", "_xmit_LOCALTLK", "_xmit_FDDI",
  253 + "_xmit_BIF", "_xmit_SIT", "_xmit_IPDDP", "_xmit_IPGRE",
  254 + "_xmit_PIMREG", "_xmit_HIPPI", "_xmit_ASH", "_xmit_ECONET",
  255 + "_xmit_IRDA", "_xmit_FCPP", "_xmit_FCAL", "_xmit_FCPL",
  256 + "_xmit_FCFABRIC", "_xmit_IEEE802_TR", "_xmit_IEEE80211",
  257 + "_xmit_IEEE80211_PRISM", "_xmit_IEEE80211_RADIOTAP", "_xmit_VOID",
  258 + "_xmit_NONE"};
  259 +
  260 +static struct lock_class_key netdev_xmit_lock_key[ARRAY_SIZE(netdev_lock_type)];
  261 +
  262 +static inline unsigned short netdev_lock_pos(unsigned short dev_type)
  263 +{
  264 + int i;
  265 +
  266 + for (i = 0; i < ARRAY_SIZE(netdev_lock_type); i++)
  267 + if (netdev_lock_type[i] == dev_type)
  268 + return i;
  269 + /* the last key is used by default */
  270 + return ARRAY_SIZE(netdev_lock_type) - 1;
  271 +}
  272 +
  273 +static inline void netdev_set_lockdep_class(spinlock_t *lock,
  274 + unsigned short dev_type)
  275 +{
  276 + int i;
  277 +
  278 + i = netdev_lock_pos(dev_type);
  279 + lockdep_set_class_and_name(lock, &netdev_xmit_lock_key[i],
  280 + netdev_lock_name[i]);
  281 +}
  282 +#else
  283 +static inline void netdev_set_lockdep_class(spinlock_t *lock,
  284 + unsigned short dev_type)
  285 +{
  286 +}
  287 +#endif
  288 +
221 289 /*******************************************************************************
222 290  
223 291 Protocol management and registration routines
... ... @@ -3001,6 +3069,7 @@
3001 3069  
3002 3070 spin_lock_init(&dev->queue_lock);
3003 3071 spin_lock_init(&dev->_xmit_lock);
  3072 + netdev_set_lockdep_class(&dev->_xmit_lock, dev->type);
3004 3073 dev->xmit_lock_owner = -1;
3005 3074 spin_lock_init(&dev->ingress_lock);
3006 3075  
... ... @@ -43,11 +43,11 @@
43 43 asymmetric routing (packets from you to a host take a different path
44 44 than packets from that host to you) or if you operate a non-routing
45 45 host which has several IP addresses on different interfaces. To turn
46   - rp_filter off use:
  46 + rp_filter on use:
47 47  
48   - echo 0 > /proc/sys/net/ipv4/conf/<device>/rp_filter
  48 + echo 1 > /proc/sys/net/ipv4/conf/<device>/rp_filter
49 49 or
50   - echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter
  50 + echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter
51 51  
52 52 If unsure, say N here.
53 53  
... ... @@ -577,6 +577,7 @@
577 577 config TCP_CONG_YEAH
578 578 tristate "YeAH TCP"
579 579 depends on EXPERIMENTAL
  580 + select TCP_CONG_VEGAS
580 581 default n
581 582 ---help---
582 583 YeAH-TCP is a sender-side high-speed enabled TCP congestion control
... ... @@ -2396,7 +2396,7 @@
2396 2396  
2397 2397 /* It is equivalent to inet_addr_type(saddr) == RTN_LOCAL */
2398 2398 dev_out = ip_dev_find(oldflp->fl4_src);
2399   - if ((dev_out == NULL) && !(sysctl_ip_nonlocal_bind))
  2399 + if (dev_out == NULL)
2400 2400 goto out;
2401 2401  
2402 2402 /* I removed check for oif == dev_out->oif here.
... ... @@ -2407,7 +2407,7 @@
2407 2407 of another iface. --ANK
2408 2408 */
2409 2409  
2410   - if (dev_out && oldflp->oif == 0
  2410 + if (oldflp->oif == 0
2411 2411 && (MULTICAST(oldflp->fl4_dst) || oldflp->fl4_dst == htonl(0xFFFFFFFF))) {
2412 2412 /* Special hack: user can direct multicasts
2413 2413 and limited broadcast via necessary interface
... ... @@ -276,30 +276,34 @@
276 276  
277 277  
278 278 /*
279   - * Slow start (exponential increase) with
280   - * RFC3742 Limited Slow Start (fast linear increase) support.
  279 + * Slow start is used when congestion window is less than slow start
  280 + * threshold. This version implements the basic RFC2581 version
  281 + * and optionally supports:
  282 + * RFC3742 Limited Slow Start - growth limited to max_ssthresh
  283 + * RFC3465 Appropriate Byte Counting - growth limited by bytes acknowledged
281 284 */
282 285 void tcp_slow_start(struct tcp_sock *tp)
283 286 {
284   - int cnt = 0;
  287 + int cnt; /* increase in packets */
285 288  
286   - if (sysctl_tcp_abc) {
287   - /* RFC3465: Slow Start
288   - * TCP sender SHOULD increase cwnd by the number of
289   - * previously unacknowledged bytes ACKed by each incoming
290   - * acknowledgment, provided the increase is not more than L
291   - */
292   - if (tp->bytes_acked < tp->mss_cache)
293   - return;
294   - }
  289 + /* RFC3465: ABC Slow start
  290 + * Increase only after a full MSS of bytes is acked
  291 + *
  292 + * TCP sender SHOULD increase cwnd by the number of
  293 + * previously unacknowledged bytes ACKed by each incoming
  294 + * acknowledgment, provided the increase is not more than L
  295 + */
  296 + if (sysctl_tcp_abc && tp->bytes_acked < tp->mss_cache)
  297 + return;
295 298  
296   - if (sysctl_tcp_max_ssthresh > 0 &&
297   - tp->snd_cwnd > sysctl_tcp_max_ssthresh)
298   - cnt += sysctl_tcp_max_ssthresh>>1;
  299 + if (sysctl_tcp_max_ssthresh > 0 && tp->snd_cwnd > sysctl_tcp_max_ssthresh)
  300 + cnt = sysctl_tcp_max_ssthresh >> 1; /* limited slow start */
299 301 else
300   - cnt += tp->snd_cwnd;
  302 + cnt = tp->snd_cwnd; /* exponential increase */
301 303  
302   - /* RFC3465: We MAY increase by 2 if discovered delayed ack */
  304 + /* RFC3465: ABC
  305 + * We MAY increase by 2 if discovered delayed ack
  306 + */
303 307 if (sysctl_tcp_abc > 1 && tp->bytes_acked >= 2*tp->mss_cache)
304 308 cnt <<= 1;
305 309 tp->bytes_acked = 0;