Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6
authorLinus Torvalds <torvalds@linux-foundation.org>
Wed, 23 Apr 2008 19:23:45 +0000 (12:23 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Wed, 23 Apr 2008 19:23:45 +0000 (12:23 -0700)
* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6:
  iwlwifi: Fix built-in compilation of iwlcore
  net: Unexport move_addr_to_{kernel,user}
  rt2x00: Select LEDS_CLASS.
  iwlwifi: Select LEDS_CLASS.
  leds: Do not guard NEW_LEDS with HAS_IOMEM
  [IPSEC]: Fix catch-22 with algorithm IDs above 31
  time: Export set_normalized_timespec.
  tcp: Make use of before macro in tcp_input.c
  hamradio: Remove unneeded and deprecated cli()/sti() calls in dmascc.c
  [NETNS]: Remove empty ->init callback.
  [DCCP]: Convert do_gettimeofday() to getnstimeofday().
  [NETNS]: Don't initialize err variable twice.
  [NETNS]: The ip6_fib_timer can work with garbage on net namespace stop.
  [IPV4]: Convert do_gettimeofday() to getnstimeofday().
  [IPV4]: Make icmp_sk_init() static.
  [IPV6]: Make struct ip6_prohibit_entry_template static.
  tcp: Trivial fix to correct function name in a comment in net/ipv4/tcp.c
  [NET]: Expose netdevice dev_id through sysfs
  skbuff: fix missing kernel-doc notation
  [ROSE]: Fix soft lockup wrt. rose_node_list_lock

21 files changed:
drivers/leds/Kconfig
drivers/net/hamradio/dmascc.c
drivers/net/wireless/iwlwifi/Kconfig
drivers/net/wireless/iwlwifi/Makefile
drivers/net/wireless/rt2x00/Kconfig
include/net/xfrm.h
kernel/time.c
net/core/net-sysfs.c
net/dccp/probe.c
net/ipv4/icmp.c
net/ipv4/ip_options.c
net/ipv4/tcp.c
net/ipv4/tcp_input.c
net/ipv6/addrconf.c
net/ipv6/ip6_fib.c
net/ipv6/route.c
net/key/af_key.c
net/rose/rose_route.c
net/socket.c
net/xfrm/xfrm_policy.c
net/xfrm/xfrm_user.c

index a3a6199..eb97c41 100644 (file)
@@ -1,6 +1,5 @@
 menuconfig NEW_LEDS
        bool "LED Support"
-       depends on HAS_IOMEM
        help
          Say Y to enable Linux LED support.  This allows control of supported
          LEDs from both userspace and optionally, by kernel events (triggers).
index e04bf99..0b94833 100644 (file)
@@ -1083,15 +1083,12 @@ static void start_timer(struct scc_priv *priv, int t, int r15)
        if (t == 0) {
                tm_isr(priv);
        } else if (t > 0) {
-               save_flags(flags);
-               cli();
                outb(t & 0xFF, priv->tmr_cnt);
                outb((t >> 8) & 0xFF, priv->tmr_cnt);
                if (priv->type != TYPE_TWIN) {
                        write_scc(priv, R15, r15 | CTSIE);
                        priv->rr0 |= CTS;
                }
-               restore_flags(flags);
        }
 }
 
index f844b73..c4e631d 100644 (file)
@@ -49,7 +49,9 @@ config IWL4965_HT
 
 config IWL4965_LEDS
        bool "Enable LEDS features in iwl4965 driver"
-       depends on IWL4965 && MAC80211_LEDS && LEDS_CLASS
+       depends on IWL4965
+       select MAC80211_LEDS
+       select LEDS_CLASS
        select IWLWIFI_LEDS
        ---help---
          This option enables LEDS for the iwlwifi drivers
@@ -134,7 +136,9 @@ config IWL3945_SPECTRUM_MEASUREMENT
 
 config IWL3945_LEDS
        bool "Enable LEDS features in iwl3945 driver"
-       depends on IWL3945 && MAC80211_LEDS && LEDS_CLASS
+       depends on IWL3945
+       select MAC80211_LEDS
+       select LEDS_CLASS
        ---help---
          This option enables LEDS for the iwl3945 driver.
 
index 4f3e88b..ec6187b 100644 (file)
@@ -1,4 +1,4 @@
-obj-$(CONFIG_IWLCORE)  := iwlcore.o
+obj-$(CONFIG_IWLCORE)  += iwlcore.o
 iwlcore-objs           := iwl-core.o iwl-eeprom.o iwl-hcmd.o
 iwlcore-$(CONFIG_IWLWIFI_DEBUGFS) += iwl-debugfs.o
 iwlcore-$(CONFIG_IWLWIFI_LEDS) += iwl-led.o
index a1e3938..ab1029e 100644 (file)
@@ -60,7 +60,8 @@ config RT2400PCI_RFKILL
 
 config RT2400PCI_LEDS
        bool "RT2400 leds support"
-       depends on RT2400PCI && LEDS_CLASS
+       depends on RT2400PCI
+       select LEDS_CLASS
        select RT2X00_LIB_LEDS
        ---help---
          This adds support for led triggers provided my mac80211.
@@ -86,7 +87,8 @@ config RT2500PCI_RFKILL
 
 config RT2500PCI_LEDS
        bool "RT2500 leds support"
-       depends on RT2500PCI && LEDS_CLASS
+       depends on RT2500PCI
+       select LEDS_CLASS
        select RT2X00_LIB_LEDS
        ---help---
          This adds support for led triggers provided my mac80211.
@@ -114,7 +116,8 @@ config RT61PCI_RFKILL
 
 config RT61PCI_LEDS
        bool "RT61 leds support"
-       depends on RT61PCI && LEDS_CLASS
+       depends on RT61PCI
+       select LEDS_CLASS
        select RT2X00_LIB_LEDS
        ---help---
          This adds support for led triggers provided my mac80211.
@@ -130,7 +133,8 @@ config RT2500USB
 
 config RT2500USB_LEDS
        bool "RT2500 leds support"
-       depends on RT2500USB && LEDS_CLASS
+       depends on RT2500USB
+       select LEDS_CLASS
        select RT2X00_LIB_LEDS
        ---help---
          This adds support for led triggers provided my mac80211.
@@ -148,7 +152,8 @@ config RT73USB
 
 config RT73USB_LEDS
        bool "RT73 leds support"
-       depends on RT73USB && LEDS_CLASS
+       depends on RT73USB
+       select LEDS_CLASS
        select RT2X00_LIB_LEDS
        ---help---
          This adds support for led triggers provided my mac80211.
index b56b6a1..baa9f37 100644 (file)
@@ -436,6 +436,9 @@ struct xfrm_tmpl
 /* May skip this transfomration if no SA is found */
        __u8                    optional;
 
+/* Skip aalgos/ealgos/calgos checks. */
+       __u8                    allalgs;
+
 /* Bit mask of algos allowed for acquisition */
        __u32                   aalgos;
        __u32                   ealgos;
index a5ec013..35d373a 100644 (file)
@@ -379,6 +379,7 @@ void set_normalized_timespec(struct timespec *ts, time_t sec, long nsec)
        ts->tv_sec = sec;
        ts->tv_nsec = nsec;
 }
+EXPORT_SYMBOL(set_normalized_timespec);
 
 /**
  * ns_to_timespec - Convert nanoseconds to timespec
index 7635d3f..4e7b847 100644 (file)
@@ -87,6 +87,7 @@ static ssize_t netdev_store(struct device *dev, struct device_attribute *attr,
        return ret;
 }
 
+NETDEVICE_SHOW(dev_id, fmt_hex);
 NETDEVICE_SHOW(addr_len, fmt_dec);
 NETDEVICE_SHOW(iflink, fmt_dec);
 NETDEVICE_SHOW(ifindex, fmt_dec);
@@ -210,6 +211,7 @@ static ssize_t store_tx_queue_len(struct device *dev,
 
 static struct device_attribute net_class_attributes[] = {
        __ATTR(addr_len, S_IRUGO, show_addr_len, NULL),
+       __ATTR(dev_id, S_IRUGO, show_dev_id, NULL),
        __ATTR(iflink, S_IRUGO, show_iflink, NULL),
        __ATTR(ifindex, S_IRUGO, show_ifindex, NULL),
        __ATTR(features, S_IRUGO, show_features, NULL),
index 7053bb8..6e1df62 100644 (file)
@@ -46,29 +46,24 @@ struct {
        struct kfifo      *fifo;
        spinlock_t        lock;
        wait_queue_head_t wait;
-       struct timeval    tstart;
+       struct timespec   tstart;
 } dccpw;
 
 static void printl(const char *fmt, ...)
 {
        va_list args;
        int len;
-       struct timeval now;
+       struct timespec now;
        char tbuf[256];
 
        va_start(args, fmt);
-       do_gettimeofday(&now);
+       getnstimeofday(&now);
 
-       now.tv_sec -= dccpw.tstart.tv_sec;
-       now.tv_usec -= dccpw.tstart.tv_usec;
-       if (now.tv_usec < 0) {
-               --now.tv_sec;
-               now.tv_usec += 1000000;
-       }
+       now = timespec_sub(now, dccpw.tstart);
 
        len = sprintf(tbuf, "%lu.%06lu ",
                      (unsigned long) now.tv_sec,
-                     (unsigned long) now.tv_usec);
+                     (unsigned long) now.tv_nsec / NSEC_PER_USEC);
        len += vscnprintf(tbuf+len, sizeof(tbuf)-len, fmt, args);
        va_end(args);
 
@@ -119,7 +114,7 @@ static struct jprobe dccp_send_probe = {
 static int dccpprobe_open(struct inode *inode, struct file *file)
 {
        kfifo_reset(dccpw.fifo);
-       do_gettimeofday(&dccpw.tstart);
+       getnstimeofday(&dccpw.tstart);
        return 0;
 }
 
index f064031..c67d00e 100644 (file)
@@ -847,7 +847,7 @@ static void icmp_echo(struct sk_buff *skb)
  */
 static void icmp_timestamp(struct sk_buff *skb)
 {
-       struct timeval tv;
+       struct timespec tv;
        struct icmp_bxm icmp_param;
        /*
         *      Too short.
@@ -858,9 +858,9 @@ static void icmp_timestamp(struct sk_buff *skb)
        /*
         *      Fill in the current time as ms since midnight UT:
         */
-       do_gettimeofday(&tv);
-       icmp_param.data.times[1] = htonl((tv.tv_sec % 86400) * 1000 +
-                                        tv.tv_usec / 1000);
+       getnstimeofday(&tv);
+       icmp_param.data.times[1] = htonl((tv.tv_sec % 86400) * MSEC_PER_SEC +
+                                        tv.tv_nsec / NSEC_PER_MSEC);
        icmp_param.data.times[2] = icmp_param.data.times[1];
        if (skb_copy_bits(skb, 0, &icmp_param.data.times[0], 4))
                BUG();
@@ -1144,7 +1144,7 @@ static void __net_exit icmp_sk_exit(struct net *net)
        net->ipv4.icmp_sk = NULL;
 }
 
-int __net_init icmp_sk_init(struct net *net)
+static int __net_init icmp_sk_init(struct net *net)
 {
        int i, err;
 
index d107543..33126ad 100644 (file)
@@ -55,10 +55,10 @@ void ip_options_build(struct sk_buff * skb, struct ip_options * opt,
                if (opt->ts_needaddr)
                        ip_rt_get_source(iph+opt->ts+iph[opt->ts+2]-9, rt);
                if (opt->ts_needtime) {
-                       struct timeval tv;
+                       struct timespec tv;
                        __be32 midtime;
-                       do_gettimeofday(&tv);
-                       midtime = htonl((tv.tv_sec % 86400) * 1000 + tv.tv_usec / 1000);
+                       getnstimeofday(&tv);
+                       midtime = htonl((tv.tv_sec % 86400) * MSEC_PER_SEC + tv.tv_nsec / NSEC_PER_MSEC);
                        memcpy(iph+opt->ts+iph[opt->ts+2]-5, &midtime, 4);
                }
                return;
@@ -406,10 +406,10 @@ int ip_options_compile(struct net *net,
                                        break;
                                }
                                if (timeptr) {
-                                       struct timeval tv;
+                                       struct timespec tv;
                                        __be32  midtime;
-                                       do_gettimeofday(&tv);
-                                       midtime = htonl((tv.tv_sec % 86400) * 1000 + tv.tv_usec / 1000);
+                                       getnstimeofday(&tv);
+                                       midtime = htonl((tv.tv_sec % 86400) * MSEC_PER_SEC + tv.tv_nsec / NSEC_PER_MSEC);
                                        memcpy(timeptr, &midtime, sizeof(__be32));
                                        opt->is_changed = 1;
                                }
index 58ac838..f886531 100644 (file)
@@ -1722,7 +1722,7 @@ static int tcp_close_state(struct sock *sk)
 
 /*
  *     Shutdown the sending side of a connection. Much like close except
- *     that we don't receive shut down or set_sock_flag(sk, SOCK_DEAD).
+ *     that we don't receive shut down or sock_set_flag(sk, SOCK_DEAD).
  */
 
 void tcp_shutdown(struct sock *sk, int how)
index cdc051b..ac9b848 100644 (file)
@@ -2298,7 +2298,7 @@ static inline int tcp_packet_delayed(struct tcp_sock *tp)
 {
        return !tp->retrans_stamp ||
                (tp->rx_opt.saw_tstamp && tp->rx_opt.rcv_tsecr &&
-                (__s32)(tp->rx_opt.rcv_tsecr - tp->retrans_stamp) < 0);
+                before(tp->rx_opt.rcv_tsecr, tp->retrans_stamp));
 }
 
 /* Undo procedures. */
index 8a0fd40..e591e09 100644 (file)
@@ -4338,12 +4338,6 @@ int unregister_inet6addr_notifier(struct notifier_block *nb)
 
 EXPORT_SYMBOL(unregister_inet6addr_notifier);
 
-
-static int addrconf_net_init(struct net *net)
-{
-       return 0;
-}
-
 static void addrconf_net_exit(struct net *net)
 {
        struct net_device *dev;
@@ -4360,7 +4354,6 @@ static void addrconf_net_exit(struct net *net)
 }
 
 static struct pernet_operations addrconf_net_ops = {
-       .init = addrconf_net_init,
        .exit = addrconf_net_exit,
 };
 
index 50f3f8f..1ee4fa1 100644 (file)
@@ -1543,7 +1543,7 @@ out_timer:
 static void fib6_net_exit(struct net *net)
 {
        rt6_ifdown(net, NULL);
-       del_timer(net->ipv6.ip6_fib_timer);
+       del_timer_sync(net->ipv6.ip6_fib_timer);
        kfree(net->ipv6.ip6_fib_timer);
 #ifdef CONFIG_IPV6_MULTIPLE_TABLES
        kfree(net->ipv6.fib6_local_tbl);
index 210a079..a493ad9 100644 (file)
@@ -150,7 +150,7 @@ static struct rt6_info ip6_null_entry_template = {
 static int ip6_pkt_prohibit(struct sk_buff *skb);
 static int ip6_pkt_prohibit_out(struct sk_buff *skb);
 
-struct rt6_info ip6_prohibit_entry_template = {
+static struct rt6_info ip6_prohibit_entry_template = {
        .u = {
                .dst = {
                        .__refcnt       = ATOMIC_INIT(1),
@@ -2614,9 +2614,8 @@ struct ctl_table *ipv6_route_sysctl_init(struct net *net)
 
 static int ip6_route_net_init(struct net *net)
 {
-       int ret = 0;
+       int ret = -ENOMEM;
 
-       ret = -ENOMEM;
        net->ipv6.ip6_dst_ops = kmemdup(&ip6_dst_ops_template,
                                        sizeof(*net->ipv6.ip6_dst_ops),
                                        GFP_KERNEL);
index 1fb0fe4..81a8e52 100644 (file)
@@ -1907,7 +1907,7 @@ parse_ipsecrequest(struct xfrm_policy *xp, struct sadb_x_ipsecrequest *rq)
                t->encap_family = xp->family;
 
        /* No way to set this via kame pfkey */
-       t->aalgos = t->ealgos = t->calgos = ~0;
+       t->allalgs = 1;
        xp->xfrm_nr++;
        return 0;
 }
index fb9359f..5053a53 100644 (file)
@@ -857,7 +857,6 @@ int rose_route_frame(struct sk_buff *skb, ax25_cb *ax25)
        src_addr  = (rose_address *)(skb->data + 9);
        dest_addr = (rose_address *)(skb->data + 4);
 
-       spin_lock_bh(&rose_node_list_lock);
        spin_lock_bh(&rose_neigh_list_lock);
        spin_lock_bh(&rose_route_list_lock);
 
@@ -1060,7 +1059,6 @@ int rose_route_frame(struct sk_buff *skb, ax25_cb *ax25)
 out:
        spin_unlock_bh(&rose_route_list_lock);
        spin_unlock_bh(&rose_neigh_list_lock);
-       spin_unlock_bh(&rose_node_list_lock);
 
        return res;
 }
index 9b5c917..66c4a8c 100644 (file)
@@ -2327,9 +2327,6 @@ int kernel_sock_shutdown(struct socket *sock, enum sock_shutdown_cmd how)
        return sock->ops->shutdown(sock, how);
 }
 
-/* ABI emulation layers need these two */
-EXPORT_SYMBOL(move_addr_to_kernel);
-EXPORT_SYMBOL(move_addr_to_user);
 EXPORT_SYMBOL(sock_create);
 EXPORT_SYMBOL(sock_create_kern);
 EXPORT_SYMBOL(sock_create_lite);
index ab4d0e5..e0c0390 100644 (file)
@@ -1819,7 +1819,7 @@ xfrm_state_ok(struct xfrm_tmpl *tmpl, struct xfrm_state *x,
                (x->id.spi == tmpl->id.spi || !tmpl->id.spi) &&
                (x->props.reqid == tmpl->reqid || !tmpl->reqid) &&
                x->props.mode == tmpl->mode &&
-               ((tmpl->aalgos & (1<<x->props.aalgo)) ||
+               (tmpl->allalgs || (tmpl->aalgos & (1<<x->props.aalgo)) ||
                 !(xfrm_id_proto_match(tmpl->id.proto, IPSEC_PROTO_ANY))) &&
                !(x->props.mode != XFRM_MODE_TRANSPORT &&
                  xfrm_state_addr_cmp(tmpl, x, family));
index 1810f56..22a30ae 100644 (file)
@@ -981,6 +981,8 @@ static void copy_templates(struct xfrm_policy *xp, struct xfrm_user_tmpl *ut,
                t->aalgos = ut->aalgos;
                t->ealgos = ut->ealgos;
                t->calgos = ut->calgos;
+               /* If all masks are ~0, then we allow all algorithms. */
+               t->allalgs = !~(t->aalgos & t->ealgos & t->calgos);
                t->encap_family = ut->family;
        }
 }