Merge master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
authorLinus Torvalds <torvalds@g5.osdl.org>
Sat, 25 Mar 2006 16:39:20 +0000 (08:39 -0800)
committerLinus Torvalds <torvalds@g5.osdl.org>
Sat, 25 Mar 2006 16:39:20 +0000 (08:39 -0800)
* master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6:
  [NETFILTER] x_table.c: sem2mutex
  [IPV4]: Aggregate route entries with different TOS values
  [TCP]: Mark tcp_*mem[] __read_mostly.
  [TCP]: Set default max buffers from memory pool size
  [SCTP]: Fix up sctp_rcv return value
  [NET]: Take RTNL when unregistering notifier
  [WIRELESS]: Fix config dependencies.
  [NET]: Fill in a 32-bit hole in struct sock on 64-bit platforms.
  [NET]: Ensure device name passed to SO_BINDTODEVICE is NULL terminated.
  [MODULES]: Don't allow statically declared exports
  [BRIDGE]: Unaligned accesses in the ethernet bridge

1  2 
include/linux/module.h
net/ipv4/tcp.c

diff --combined include/linux/module.h
@@@ -183,6 -183,7 +183,7 @@@ void *__symbol_get_gpl(const char *symb
  
  /* For every exported symbol, place a struct in the __ksymtab section */
  #define __EXPORT_SYMBOL(sym, sec)                             \
+       extern typeof(sym) sym;                                 \
        __CRC_SYMBOL(sym, sec)                                  \
        static const char __kstrtab_##sym[]                     \
        __attribute__((section("__ksymtab_strings")))           \
@@@ -554,6 -555,25 +555,6 @@@ static inline void module_remove_driver
  
  /* BELOW HERE ALL THESE ARE OBSOLETE AND WILL VANISH */
  
 -struct obsolete_modparm {
 -      char name[64];
 -      char type[64-sizeof(void *)];
 -      void *addr;
 -};
 -
 -static inline void MODULE_PARM_(void) { }
 -#ifdef MODULE
 -/* DEPRECATED: Do not use. */
 -#define MODULE_PARM(var,type)                                             \
 -extern struct obsolete_modparm __parm_##var \
 -__attribute__((section("__obsparm"))); \
 -struct obsolete_modparm __parm_##var = \
 -{ __stringify(var), type, &MODULE_PARM_ }; \
 -__MODULE_PARM_TYPE(var, type);
 -#else
 -#define MODULE_PARM(var,type) static void __attribute__((__unused__)) *__parm_##var = &MODULE_PARM_;
 -#endif
 -
  #define __MODULE_STRING(x) __stringify(x)
  
  /* Use symbol_get and symbol_put instead.  You'll thank me. */
diff --combined net/ipv4/tcp.c
  #include <linux/fs.h>
  #include <linux/random.h>
  #include <linux/bootmem.h>
+ #include <linux/cache.h>
  
  #include <net/icmp.h>
  #include <net/tcp.h>
@@@ -275,9 -276,9 +276,9 @@@ atomic_t tcp_orphan_count = ATOMIC_INIT
  
  EXPORT_SYMBOL_GPL(tcp_orphan_count);
  
- int sysctl_tcp_mem[3];
- int sysctl_tcp_wmem[3] = { 4 * 1024, 16 * 1024, 128 * 1024 };
- int sysctl_tcp_rmem[3] = { 4 * 1024, 87380, 87380 * 2 };
+ int sysctl_tcp_mem[3] __read_mostly;
+ int sysctl_tcp_wmem[3] __read_mostly;
+ int sysctl_tcp_rmem[3] __read_mostly;
  
  EXPORT_SYMBOL(sysctl_tcp_mem);
  EXPORT_SYMBOL(sysctl_tcp_rmem);
@@@ -365,7 -366,7 +366,7 @@@ unsigned int tcp_poll(struct file *file
        if (sk->sk_shutdown == SHUTDOWN_MASK || sk->sk_state == TCP_CLOSE)
                mask |= POLLHUP;
        if (sk->sk_shutdown & RCV_SHUTDOWN)
 -              mask |= POLLIN | POLLRDNORM;
 +              mask |= POLLIN | POLLRDNORM | POLLRDHUP;
  
        /* Connected? */
        if ((1 << sk->sk_state) & ~(TCPF_SYN_SENT | TCPF_SYN_RECV)) {
@@@ -2081,7 -2082,8 +2082,8 @@@ __setup("thash_entries=", set_thash_ent
  void __init tcp_init(void)
  {
        struct sk_buff *skb = NULL;
-       int order, i;
+       unsigned long limit;
+       int order, i, max_share;
  
        if (sizeof(struct tcp_skb_cb) > sizeof(skb->cb))
                __skb_cb_too_small_for_tcp(sizeof(struct tcp_skb_cb),
        sysctl_tcp_mem[1] = 1024 << order;
        sysctl_tcp_mem[2] = 1536 << order;
  
-       if (order < 3) {
-               sysctl_tcp_wmem[2] = 64 * 1024;
-               sysctl_tcp_rmem[0] = PAGE_SIZE;
-               sysctl_tcp_rmem[1] = 43689;
-               sysctl_tcp_rmem[2] = 2 * 43689;
-       }
+       limit = ((unsigned long)sysctl_tcp_mem[1]) << (PAGE_SHIFT - 7);
+       max_share = min(4UL*1024*1024, limit);
+       sysctl_tcp_wmem[0] = SK_STREAM_MEM_QUANTUM;
+       sysctl_tcp_wmem[1] = 16*1024;
+       sysctl_tcp_wmem[2] = max(64*1024, max_share);
+       sysctl_tcp_rmem[0] = SK_STREAM_MEM_QUANTUM;
+       sysctl_tcp_rmem[1] = 87380;
+       sysctl_tcp_rmem[2] = max(87380, max_share);
  
        printk(KERN_INFO "TCP: Hash tables configured "
               "(established %d bind %d)\n",