Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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

* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6:
net: Fix recursive descent in __scm_destroy().
iwl3945: fix deadlock on suspend
iwl3945: do not send scan command if channel count zero
iwl3945: clear scanning bits upon failure
ath5k: correct handling of rx status fields
zd1211rw: Add 2 device IDs
Fix logic error in rfkill_check_duplicity
iwlagn: avoid sleep in softirq context
iwlwifi: clear scanning bits upon failure
Revert "ath5k: honor FIF_BCN_PRBRESP_PROMISC in STA mode"
tcp: Fix recvmsg MSG_PEEK influence of blocking behavior.
netfilter: netns ct: walk netns list under RTNL
ipv6: fix run pending DAD when interface becomes ready
net/9p: fix printk format warnings
net: fix packet socket delivery in rx irq handler
xfrm: Have af-specific init_tempsel() initialize family field of temporary selector

+97 -28
+3 -1
drivers/net/wireless/ath5k/base.c
··· 2942 2942 sc->opmode != NL80211_IFTYPE_MESH_POINT && 2943 2943 test_bit(ATH_STAT_PROMISC, sc->status)) 2944 2944 rfilt |= AR5K_RX_FILTER_PROM; 2945 - if (sc->opmode == NL80211_IFTYPE_ADHOC) 2945 + if (sc->opmode == NL80211_IFTYPE_STATION || 2946 + sc->opmode == NL80211_IFTYPE_ADHOC) { 2946 2947 rfilt |= AR5K_RX_FILTER_BEACON; 2948 + } 2947 2949 2948 2950 /* Set filters */ 2949 2951 ath5k_hw_set_rx_filter(ah,rfilt);
+8 -8
drivers/net/wireless/ath5k/desc.c
··· 531 531 AR5K_5210_RX_DESC_STATUS0_RECEIVE_SIGNAL); 532 532 rs->rs_rate = AR5K_REG_MS(rx_status->rx_status_0, 533 533 AR5K_5210_RX_DESC_STATUS0_RECEIVE_RATE); 534 - rs->rs_antenna = rx_status->rx_status_0 & 535 - AR5K_5210_RX_DESC_STATUS0_RECEIVE_ANTENNA; 536 - rs->rs_more = rx_status->rx_status_0 & 537 - AR5K_5210_RX_DESC_STATUS0_MORE; 534 + rs->rs_antenna = AR5K_REG_MS(rx_status->rx_status_0, 535 + AR5K_5210_RX_DESC_STATUS0_RECEIVE_ANTENNA); 536 + rs->rs_more = !!(rx_status->rx_status_0 & 537 + AR5K_5210_RX_DESC_STATUS0_MORE); 538 538 /* TODO: this timestamp is 13 bit, later on we assume 15 bit */ 539 539 rs->rs_tstamp = AR5K_REG_MS(rx_status->rx_status_1, 540 540 AR5K_5210_RX_DESC_STATUS1_RECEIVE_TIMESTAMP); ··· 607 607 AR5K_5212_RX_DESC_STATUS0_RECEIVE_SIGNAL); 608 608 rs->rs_rate = AR5K_REG_MS(rx_status->rx_status_0, 609 609 AR5K_5212_RX_DESC_STATUS0_RECEIVE_RATE); 610 - rs->rs_antenna = rx_status->rx_status_0 & 611 - AR5K_5212_RX_DESC_STATUS0_RECEIVE_ANTENNA; 612 - rs->rs_more = rx_status->rx_status_0 & 613 - AR5K_5212_RX_DESC_STATUS0_MORE; 610 + rs->rs_antenna = AR5K_REG_MS(rx_status->rx_status_0, 611 + AR5K_5212_RX_DESC_STATUS0_RECEIVE_ANTENNA); 612 + rs->rs_more = !!(rx_status->rx_status_0 & 613 + AR5K_5212_RX_DESC_STATUS0_MORE); 614 614 rs->rs_tstamp = AR5K_REG_MS(rx_status->rx_status_1, 615 615 AR5K_5212_RX_DESC_STATUS1_RECEIVE_TIMESTAMP); 616 616 rs->rs_status = 0;
+5 -1
drivers/net/wireless/iwlwifi/iwl-agn.c
··· 3252 3252 return; 3253 3253 } 3254 3254 3255 - iwl_scan_cancel_timeout(priv, 100); 3255 + if (iwl_scan_cancel(priv)) { 3256 + /* cancel scan failed, just live w/ bad key and rely 3257 + briefly on SW decryption */ 3258 + return; 3259 + } 3256 3260 3257 3261 key_flags |= (STA_KEY_FLG_TKIP | STA_KEY_FLG_MAP_KEY_MSK); 3258 3262 key_flags |= cpu_to_le16(keyconf->keyidx << STA_KEY_FLG_KEYID_POS);
+7
drivers/net/wireless/iwlwifi/iwl-scan.c
··· 896 896 return; 897 897 898 898 done: 899 + /* Cannot perform scan. Make sure we clear scanning 900 + * bits from status so next scan request can be performed. 901 + * If we don't clear scanning status bit here all next scan 902 + * will fail 903 + */ 904 + clear_bit(STATUS_SCAN_HW, &priv->status); 905 + clear_bit(STATUS_SCANNING, &priv->status); 899 906 /* inform mac80211 scan aborted */ 900 907 queue_work(priv->workqueue, &priv->scan_completed); 901 908 mutex_unlock(&priv->mutex);
+14 -1
drivers/net/wireless/iwlwifi/iwl3945-base.c
··· 5768 5768 if (priv->error_recovering) 5769 5769 iwl3945_error_recovery(priv); 5770 5770 5771 - ieee80211_notify_mac(priv->hw, IEEE80211_NOTIFY_RE_ASSOC); 5772 5771 return; 5773 5772 5774 5773 restart: ··· 6012 6013 mutex_lock(&priv->mutex); 6013 6014 iwl3945_alive_start(priv); 6014 6015 mutex_unlock(&priv->mutex); 6016 + ieee80211_notify_mac(priv->hw, IEEE80211_NOTIFY_RE_ASSOC); 6015 6017 } 6016 6018 6017 6019 static void iwl3945_bg_rf_kill(struct work_struct *work) ··· 6256 6256 n_probes, 6257 6257 (void *)&scan->data[le16_to_cpu(scan->tx_cmd.len)]); 6258 6258 6259 + if (scan->channel_count == 0) { 6260 + IWL_DEBUG_SCAN("channel count %d\n", scan->channel_count); 6261 + goto done; 6262 + } 6263 + 6259 6264 cmd.len += le16_to_cpu(scan->tx_cmd.len) + 6260 6265 scan->channel_count * sizeof(struct iwl3945_scan_channel); 6261 6266 cmd.data = scan; ··· 6278 6273 return; 6279 6274 6280 6275 done: 6276 + /* can not perform scan make sure we clear scanning 6277 + * bits from status so next scan request can be performed. 6278 + * if we dont clear scanning status bit here all next scan 6279 + * will fail 6280 + */ 6281 + clear_bit(STATUS_SCAN_HW, &priv->status); 6282 + clear_bit(STATUS_SCANNING, &priv->status); 6283 + 6281 6284 /* inform mac80211 scan aborted */ 6282 6285 queue_work(priv->workqueue, &priv->scan_completed); 6283 6286 mutex_unlock(&priv->mutex);
+2
drivers/net/wireless/zd1211rw/zd_usb.c
··· 61 61 { USB_DEVICE(0x0105, 0x145f), .driver_info = DEVICE_ZD1211 }, 62 62 /* ZD1211B */ 63 63 { USB_DEVICE(0x0ace, 0x1215), .driver_info = DEVICE_ZD1211B }, 64 + { USB_DEVICE(0x0ace, 0xb215), .driver_info = DEVICE_ZD1211B }, 64 65 { USB_DEVICE(0x157e, 0x300d), .driver_info = DEVICE_ZD1211B }, 65 66 { USB_DEVICE(0x079b, 0x0062), .driver_info = DEVICE_ZD1211B }, 66 67 { USB_DEVICE(0x1582, 0x6003), .driver_info = DEVICE_ZD1211B }, ··· 83 82 { USB_DEVICE(0x0cde, 0x001a), .driver_info = DEVICE_ZD1211B }, 84 83 { USB_DEVICE(0x0586, 0x340a), .driver_info = DEVICE_ZD1211B }, 85 84 { USB_DEVICE(0x0471, 0x1237), .driver_info = DEVICE_ZD1211B }, 85 + { USB_DEVICE(0x07fa, 0x1196), .driver_info = DEVICE_ZD1211B }, 86 86 /* "Driverless" devices that need ejecting */ 87 87 { USB_DEVICE(0x0ace, 0x2011), .driver_info = DEVICE_INSTALLER }, 88 88 { USB_DEVICE(0x0ace, 0x20ff), .driver_info = DEVICE_INSTALLER },
+7
include/linux/if_vlan.h
··· 114 114 115 115 extern int __vlan_hwaccel_rx(struct sk_buff *skb, struct vlan_group *grp, 116 116 u16 vlan_tci, int polling); 117 + extern int vlan_hwaccel_do_receive(struct sk_buff *skb); 118 + 117 119 #else 118 120 static inline struct net_device *vlan_dev_real_dev(const struct net_device *dev) 119 121 { ··· 134 132 { 135 133 BUG(); 136 134 return NET_XMIT_SUCCESS; 135 + } 136 + 137 + static inline int vlan_hwaccel_do_receive(struct sk_buff *skb) 138 + { 139 + return 0; 137 140 } 138 141 #endif 139 142
+33 -13
net/8021q/vlan_core.c
··· 3 3 #include <linux/if_vlan.h> 4 4 #include "vlan.h" 5 5 6 + struct vlan_hwaccel_cb { 7 + struct net_device *dev; 8 + }; 9 + 10 + static inline struct vlan_hwaccel_cb *vlan_hwaccel_cb(struct sk_buff *skb) 11 + { 12 + return (struct vlan_hwaccel_cb *)skb->cb; 13 + } 14 + 6 15 /* VLAN rx hw acceleration helper. This acts like netif_{rx,receive_skb}(). */ 7 16 int __vlan_hwaccel_rx(struct sk_buff *skb, struct vlan_group *grp, 8 17 u16 vlan_tci, int polling) 9 18 { 10 - struct net_device_stats *stats; 19 + struct vlan_hwaccel_cb *cb = vlan_hwaccel_cb(skb); 11 20 12 21 if (skb_bond_should_drop(skb)) { 13 22 dev_kfree_skb_any(skb); ··· 24 15 } 25 16 26 17 skb->vlan_tci = vlan_tci; 18 + cb->dev = vlan_group_get_device(grp, vlan_tci & VLAN_VID_MASK); 19 + 20 + return (polling ? netif_receive_skb(skb) : netif_rx(skb)); 21 + } 22 + EXPORT_SYMBOL(__vlan_hwaccel_rx); 23 + 24 + int vlan_hwaccel_do_receive(struct sk_buff *skb) 25 + { 26 + struct vlan_hwaccel_cb *cb = vlan_hwaccel_cb(skb); 27 + struct net_device *dev = cb->dev; 28 + struct net_device_stats *stats; 29 + 27 30 netif_nit_deliver(skb); 28 31 29 - skb->dev = vlan_group_get_device(grp, vlan_tci & VLAN_VID_MASK); 30 - if (skb->dev == NULL) { 31 - dev_kfree_skb_any(skb); 32 - /* Not NET_RX_DROP, this is not being dropped 33 - * due to congestion. */ 34 - return NET_RX_SUCCESS; 32 + if (dev == NULL) { 33 + kfree_skb(skb); 34 + return -1; 35 35 } 36 - skb->dev->last_rx = jiffies; 36 + 37 + skb->dev = dev; 38 + skb->priority = vlan_get_ingress_priority(dev, skb->vlan_tci); 37 39 skb->vlan_tci = 0; 38 40 39 - stats = &skb->dev->stats; 41 + dev->last_rx = jiffies; 42 + 43 + stats = &dev->stats; 40 44 stats->rx_packets++; 41 45 stats->rx_bytes += skb->len; 42 46 43 - skb->priority = vlan_get_ingress_priority(skb->dev, vlan_tci); 44 47 switch (skb->pkt_type) { 45 48 case PACKET_BROADCAST: 46 49 break; ··· 64 43 * This allows the VLAN to have a different MAC than the 65 44 * underlying device, and still route correctly. */ 66 45 if (!compare_ether_addr(eth_hdr(skb)->h_dest, 67 - skb->dev->dev_addr)) 46 + dev->dev_addr)) 68 47 skb->pkt_type = PACKET_HOST; 69 48 break; 70 49 }; 71 - return (polling ? netif_receive_skb(skb) : netif_rx(skb)); 50 + return 0; 72 51 } 73 - EXPORT_SYMBOL(__vlan_hwaccel_rx); 74 52 75 53 struct net_device *vlan_dev_real_dev(const struct net_device *dev) 76 54 {
+3
net/core/dev.c
··· 2218 2218 int ret = NET_RX_DROP; 2219 2219 __be16 type; 2220 2220 2221 + if (skb->vlan_tci && vlan_hwaccel_do_receive(skb)) 2222 + return NET_RX_SUCCESS; 2223 + 2221 2224 /* if we've gotten here through NAPI, check netpoll */ 2222 2225 if (netpoll_receive_skb(skb)) 2223 2226 return NET_RX_DROP;
+1 -2
net/ipv4/tcp.c
··· 1374 1374 sk->sk_state == TCP_CLOSE || 1375 1375 (sk->sk_shutdown & RCV_SHUTDOWN) || 1376 1376 !timeo || 1377 - signal_pending(current) || 1378 - (flags & MSG_PEEK)) 1377 + signal_pending(current)) 1379 1378 break; 1380 1379 } else { 1381 1380 if (sock_flag(sk, SOCK_DONE))
+1
net/ipv4/xfrm4_state.c
··· 33 33 x->sel.dport_mask = htons(0xffff); 34 34 x->sel.sport = xfrm_flowi_sport(fl); 35 35 x->sel.sport_mask = htons(0xffff); 36 + x->sel.family = AF_INET; 36 37 x->sel.prefixlen_d = 32; 37 38 x->sel.prefixlen_s = 32; 38 39 x->sel.proto = fl->proto;
+3 -1
net/ipv6/addrconf.c
··· 2483 2483 if (!idev && dev->mtu >= IPV6_MIN_MTU) 2484 2484 idev = ipv6_add_dev(dev); 2485 2485 2486 - if (idev) 2486 + if (idev) { 2487 2487 idev->if_flags |= IF_READY; 2488 + run_pending = 1; 2489 + } 2488 2490 } else { 2489 2491 if (!addrconf_qdisc_ok(dev)) { 2490 2492 /* device is still not ready. */
+1
net/ipv6/xfrm6_state.c
··· 34 34 x->sel.dport_mask = htons(0xffff); 35 35 x->sel.sport = xfrm_flowi_sport(fl); 36 36 x->sel.sport_mask = htons(0xffff); 37 + x->sel.family = AF_INET6; 37 38 x->sel.prefixlen_d = 128; 38 39 x->sel.prefixlen_s = 128; 39 40 x->sel.proto = fl->proto;
+3
net/netfilter/nf_conntrack_helper.c
··· 21 21 #include <linux/kernel.h> 22 22 #include <linux/netdevice.h> 23 23 #include <linux/rculist.h> 24 + #include <linux/rtnetlink.h> 24 25 25 26 #include <net/netfilter/nf_conntrack.h> 26 27 #include <net/netfilter/nf_conntrack_l3proto.h> ··· 168 167 */ 169 168 synchronize_rcu(); 170 169 170 + rtnl_lock(); 171 171 spin_lock_bh(&nf_conntrack_lock); 172 172 for_each_net(net) 173 173 __nf_conntrack_helper_unregister(me, net); 174 174 spin_unlock_bh(&nf_conntrack_lock); 175 + rtnl_unlock(); 175 176 } 176 177 EXPORT_SYMBOL_GPL(nf_conntrack_helper_unregister); 177 178
+5
net/netfilter/nf_conntrack_proto.c
··· 22 22 #include <linux/notifier.h> 23 23 #include <linux/kernel.h> 24 24 #include <linux/netdevice.h> 25 + #include <linux/rtnetlink.h> 25 26 26 27 #include <net/netfilter/nf_conntrack.h> 27 28 #include <net/netfilter/nf_conntrack_l3proto.h> ··· 222 221 synchronize_rcu(); 223 222 224 223 /* Remove all contrack entries for this protocol */ 224 + rtnl_lock(); 225 225 for_each_net(net) 226 226 nf_ct_iterate_cleanup(net, kill_l3proto, proto); 227 + rtnl_unlock(); 227 228 } 228 229 EXPORT_SYMBOL_GPL(nf_conntrack_l3proto_unregister); 229 230 ··· 336 333 synchronize_rcu(); 337 334 338 335 /* Remove all contrack entries for this protocol */ 336 + rtnl_lock(); 339 337 for_each_net(net) 340 338 nf_ct_iterate_cleanup(net, kill_l4proto, l4proto); 339 + rtnl_unlock(); 341 340 } 342 341 EXPORT_SYMBOL_GPL(nf_conntrack_l4proto_unregister); 343 342
+1 -1
net/rfkill/rfkill.c
··· 603 603 } 604 604 605 605 /* 0: first switch of its kind */ 606 - return test_bit(rfkill->type, seen); 606 + return (test_bit(rfkill->type, seen)) ? 1 : 0; 607 607 } 608 608 609 609 static int rfkill_add_switch(struct rfkill *rfkill)