History

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: (30 commits) e1000: fix virtualization bug bonding: fix alb mode locking regression Bluetooth: Fix issue with sysfs handling for connections usbnet: CDC EEM support (v5) tcp: Fix tcp_prequeue() to get correct rto_min value ehea: fix invalid pointer access ne2k-pci: Do not register device until initialized. Subject: [PATCH] br2684: restore net_dev initialization net: Only store high 16 bits of kernel generated filter priorities virtio_net: Fix function name typo virtio_net: Cleanup command queue scatterlist usage bonding: correct the cleanup in bond_create() virtio: add missing include to virtio_net.h smsc95xx: add support for LAN9512 and LAN9514 smsc95xx: configure LED outputs netconsole: take care of NETDEV_UNREGISTER event xt_socket: checks for the state of nf_conntrack bonding: bond_slave_info_query() fix cxgb3: fixing gcc 4.4 compiler warning: suggest parentheses around operand of ‘!’ netfilter: use likely() in xt_info_rdlock_bh() ...

Linus Torvalds committed 17 years ago

Commit 80445de2 parents 32bc66d bc8387133 files · +598 −157Browse files

Unified · Split

33 files
  1. drivers/net/bonding/bond_alb.c +3 −9
  2. drivers/net/bonding/bond_main.c +13 −23
  3. drivers/net/cxgb3/t3_hw.c +1 −1
  4. drivers/net/e1000/e1000_main.c +1 −1
  5. drivers/net/ehea/ehea.h +1 −1
  6. drivers/net/ehea/ehea_main.c +18 −13
  7. drivers/net/mv643xx_eth.c +13 −11
  8. drivers/net/ne2k-pci.c +3 −4
  9. drivers/net/netconsole.c +10 −1
  10. drivers/net/usb/Kconfig +14 −0
  11. drivers/net/usb/Makefile +1 −0
  12. drivers/net/usb/cdc_eem.c +381 −0
  13. drivers/net/usb/smsc95xx.c +15 −0
  14. drivers/net/usb/smsc95xx.h +3 −0
  15. drivers/net/virtio_net.c +14 −10
  16. drivers/net/wireless/ath5k/debug.c +1 −1
  17. drivers/net/wireless/iwlwifi/iwl-scan.c +2 −2
  18. drivers/net/wireless/iwlwifi/iwl3945-base.c +0 −1
  19. drivers/net/wireless/rndis_wlan.c +10 −4
  20. include/linux/netfilter/x_tables.h +2 −2
  21. include/linux/usb/cdc.h +3 −0
  22. include/linux/virtio_net.h +1 −0
  23. include/net/bluetooth/hci_core.h +1 −0
  24. include/net/tcp.h +13 −1
  25. net/atm/br2684.c +1 −0
  26. net/bluetooth/hci_conn.c +2 −0
  27. net/bluetooth/hci_sysfs.c +40 −34
  28. net/core/dev.c +5 −4
  29. net/core/skbuff.c +14 −13
  30. net/ipv4/tcp_input.c +0 −10
  31. net/mac80211/main.c +10 −10
  32. net/netfilter/Kconfig +1 −0
  33. net/sched/cls_api.c +1 −1
drivers/net/bonding/bond_alb.c+3−9
@@ -1706,10 +1706,8 @@ void bond_alb_handle_active_change(struct bonding *bond, struct slave *new_slave · 1705 unmodified lines
17061706 * Called with RTNL
17071707 */
17081708 int bond_alb_set_mac_address(struct net_device *bond_dev, void *addr)
1709− __releases(&bond->curr_slave_lock)
1710− __releases(&bond->lock)
17111709 __acquires(&bond->lock)
1712− __acquires(&bond->curr_slave_lock)
1710+ __releases(&bond->lock)
17131711 {
17141712 struct bonding *bond = netdev_priv(bond_dev);
17151713 struct sockaddr *sa = addr;
@@ -1745,9 +1743,6 @@ int bond_alb_set_mac_address(struct net_device *bond_dev, void *addr) · 29 unmodified lines
17451743 }
17461744 }
17471745
1748− write_unlock_bh(&bond->curr_slave_lock);
1749− read_unlock(&bond->lock);
1750−
17511746 if (swap_slave) {
17521747 alb_swap_mac_addr(bond, swap_slave, bond->curr_active_slave);
17531748 alb_fasten_mac_swap(bond, swap_slave, bond->curr_active_slave);
@@ -1755,16 +1750,15 @@ int bond_alb_set_mac_address(struct net_device *bond_dev, void *addr) · 1 unmodified line
17551750 alb_set_slave_mac_addr(bond->curr_active_slave, bond_dev->dev_addr,
17561751 bond->alb_info.rlb_enabled);
17571752
1753+ read_lock(&bond->lock);
17581754 alb_send_learning_packets(bond->curr_active_slave, bond_dev->dev_addr);
17591755 if (bond->alb_info.rlb_enabled) {
17601756 /* inform clients mac address has changed */
17611757 rlb_req_update_slave_clients(bond, bond->curr_active_slave);
17621758 }
1759+ read_unlock(&bond->lock);
17631760 }
17641761
1765− read_lock(&bond->lock);
1766− write_lock_bh(&bond->curr_slave_lock);
1767−
17681762 return 0;
17691763 }
17701764
drivers/net/bonding/bond_main.c+13−23
@@ -2213,33 +2213,24 @@ static int bond_slave_info_query(struct net_device *bond_dev, struct ifslave *in · 2212 unmodified lines
22132213 {
22142214 struct bonding *bond = netdev_priv(bond_dev);
22152215 struct slave *slave;
2216− int i, found = 0;
2217−
2218− if (info->slave_id < 0) {
2219− return -ENODEV;
2220− }
2216+ int i, res = -ENODEV;
22212217
22222218 read_lock(&bond->lock);
22232219
22242220 bond_for_each_slave(bond, slave, i) {
22252221 if (i == (int)info->slave_id) {
2226− found = 1;
2222+ res = 0;
2223+ strcpy(info->slave_name, slave->dev->name);
2224+ info->link = slave->link;
2225+ info->state = slave->state;
2226+ info->link_failure_count = slave->link_failure_count;
22272227 break;
22282228 }
22292229 }
22302230
22312231 read_unlock(&bond->lock);
22322232
2233− if (found) {
2234− strcpy(info->slave_name, slave->dev->name);
2235− info->link = slave->link;
2236− info->state = slave->state;
2237− info->link_failure_count = slave->link_failure_count;
2238− } else {
2239− return -ENODEV;
2240− }
2241−
2242− return 0;
2233+ return res;
22432234 }
22442235
22452236 /*-------------------------------- Monitoring -------------------------------*/
@@ -5167,16 +5158,15 @@ int bond_create(char *name, struct bond_params *params) · 2921 unmodified lines
51675158 up_write(&bonding_rwsem);
51685159 rtnl_unlock(); /* allows sysfs registration of net device */
51695160 res = bond_create_sysfs_entry(netdev_priv(bond_dev));
5170− if (res < 0) {
5171− rtnl_lock();
5172− down_write(&bonding_rwsem);
5173− bond_deinit(bond_dev);
5174− unregister_netdevice(bond_dev);
5175− goto out_rtnl;
5176− }
5161+ if (res < 0)
5162+ goto out_unreg;
51775163
51785164 return 0;
51795165
5166+out_unreg:
5167+ rtnl_lock();
5168+ down_write(&bonding_rwsem);
5169+ unregister_netdevice(bond_dev);
51805170 out_bond:
51815171 bond_deinit(bond_dev);
51825172 out_netdev:
drivers/net/cxgb3/t3_hw.c+1−1
@@ -3779,7 +3779,7 @@ int t3_prep_adapter(struct adapter *adapter, const struct adapter_info *ai, · 3778 unmodified lines
37793779
37803780 adapter->params.info = ai;
37813781 adapter->params.nports = ai->nports0 + ai->nports1;
3782− adapter->params.chan_map = !!ai->nports0 | (!!ai->nports1 << 1);
3782+ adapter->params.chan_map = (!!ai->nports0) | (!!ai->nports1 << 1);
37833783 adapter->params.rev = t3_read_reg(adapter, A_PL_REV);
37843784 /*
37853785 * We used to only run the "adapter check task" once a second if
drivers/net/e1000/e1000_main.c+1−1
@@ -3738,7 +3738,7 @@ static irqreturn_t e1000_intr(int irq, void *data) · 3737 unmodified lines
37383738 struct e1000_hw *hw = &adapter->hw;
37393739 u32 rctl, icr = er32(ICR);
37403740
3741− if (unlikely((!icr) || test_bit(__E1000_RESETTING, &adapter->flags)))
3741+ if (unlikely((!icr) || test_bit(__E1000_DOWN, &adapter->flags)))
37423742 return IRQ_NONE; /* Not our interrupt */
37433743
37443744 /* IMS will not auto-mask if INT_ASSERTED is not set, and if it is
drivers/net/ehea/ehea.h+1−1
@@ -40,7 +40,7 @@ · 39 unmodified lines
4040 #include <asm/io.h>
4141
4242 #define DRV_NAME "ehea"
43−#define DRV_VERSION "EHEA_0100"
43+#define DRV_VERSION "EHEA_0101"
4444
4545 /* eHEA capability flags */
4646 #define DLPAR_PORT_ADD_REM 1
drivers/net/ehea/ehea_main.c+18−13
@@ -545,14 +545,17 @@ static inline struct sk_buff *get_skb_by_index(struct sk_buff **skb_array, · 544 unmodified lines
545545 x &= (arr_len - 1);
546546
547547 pref = skb_array[x];
548− prefetchw(pref);
549− prefetchw(pref + EHEA_CACHE_LINE);
550−
551− pref = (skb_array[x]->data);
552− prefetch(pref);
553− prefetch(pref + EHEA_CACHE_LINE);
554− prefetch(pref + EHEA_CACHE_LINE * 2);
555− prefetch(pref + EHEA_CACHE_LINE * 3);
548+ if (pref) {
549+ prefetchw(pref);
550+ prefetchw(pref + EHEA_CACHE_LINE);
551+
552+ pref = (skb_array[x]->data);
553+ prefetch(pref);
554+ prefetch(pref + EHEA_CACHE_LINE);
555+ prefetch(pref + EHEA_CACHE_LINE * 2);
556+ prefetch(pref + EHEA_CACHE_LINE * 3);
557+ }
558+
556559 skb = skb_array[skb_index];
557560 skb_array[skb_index] = NULL;
558561 return skb;
@@ -569,12 +572,14 @@ static inline struct sk_buff *get_skb_by_index_ll(struct sk_buff **skb_array, · 10 unmodified lines
569572 x &= (arr_len - 1);
570573
571574 pref = skb_array[x];
572− prefetchw(pref);
573− prefetchw(pref + EHEA_CACHE_LINE);
575+ if (pref) {
576+ prefetchw(pref);
577+ prefetchw(pref + EHEA_CACHE_LINE);
574578
575− pref = (skb_array[x]->data);
576− prefetchw(pref);
577− prefetchw(pref + EHEA_CACHE_LINE);
579+ pref = (skb_array[x]->data);
580+ prefetchw(pref);
581+ prefetchw(pref + EHEA_CACHE_LINE);
582+ }
578583
579584 skb = skb_array[wqe_index];
580585 skb_array[wqe_index] = NULL;
drivers/net/mv643xx_eth.c+13−11
@@ -393,12 +393,12 @@ struct mv643xx_eth_private { · 392 unmodified lines
393393 struct work_struct tx_timeout_task;
394394
395395 struct napi_struct napi;
396+ u8 oom;
396397 u8 work_link;
397398 u8 work_tx;
398399 u8 work_tx_end;
399400 u8 work_rx;
400401 u8 work_rx_refill;
401− u8 work_rx_oom;
402402
403403 int skb_size;
404404 struct sk_buff_head rx_recycle;
@@ -661,7 +661,7 @@ static int rxq_refill(struct rx_queue *rxq, int budget) · 256 unmodified lines
661661 dma_get_cache_alignment() - 1);
662662
663663 if (skb == NULL) {
664− mp->work_rx_oom |= 1 << rxq->index;
664+ mp->oom = 1;
665665 goto oom;
666666 }
667667
@@ -1255,7 +1255,6 @@ static void mib_counters_update(struct mv643xx_eth_private *mp) · 587 unmodified lines
12551255
12561256 spin_lock_bh(&mp->mib_counters_lock);
12571257 p->good_octets_received += mib_read(mp, 0x00);
1258− p->good_octets_received += (u64)mib_read(mp, 0x04) << 32;
12591258 p->bad_octets_received += mib_read(mp, 0x08);
12601259 p->internal_mac_transmit_err += mib_read(mp, 0x0c);
12611260 p->good_frames_received += mib_read(mp, 0x10);
@@ -1269,7 +1268,6 @@ static void mib_counters_update(struct mv643xx_eth_private *mp) · 7 unmodified lines
12691268 p->frames_512_to_1023_octets += mib_read(mp, 0x30);
12701269 p->frames_1024_to_max_octets += mib_read(mp, 0x34);
12711270 p->good_octets_sent += mib_read(mp, 0x38);
1272− p->good_octets_sent += (u64)mib_read(mp, 0x3c) << 32;
12731271 p->good_frames_sent += mib_read(mp, 0x40);
12741272 p->excessive_collision += mib_read(mp, 0x44);
12751273 p->multicast_frames_sent += mib_read(mp, 0x48);
@@ -2167,8 +2165,10 @@ static int mv643xx_eth_poll(struct napi_struct *napi, int budget) · 891 unmodified lines
21672165
21682166 mp = container_of(napi, struct mv643xx_eth_private, napi);
21692167
2170− mp->work_rx_refill |= mp->work_rx_oom;
2171− mp->work_rx_oom = 0;
2168+ if (unlikely(mp->oom)) {
2169+ mp->oom = 0;
2170+ del_timer(&mp->rx_oom);
2171+ }
21722172
21732173 work_done = 0;
21742174 while (work_done < budget) {
@@ -2182,8 +2182,10 @@ static int mv643xx_eth_poll(struct napi_struct *napi, int budget) · 7 unmodified lines
21822182 continue;
21832183 }
21842184
2185− queue_mask = mp->work_tx | mp->work_tx_end |
2186− mp->work_rx | mp->work_rx_refill;
2185+ queue_mask = mp->work_tx | mp->work_tx_end | mp->work_rx;
2186+ if (likely(!mp->oom))
2187+ queue_mask |= mp->work_rx_refill;
2188+
21872189 if (!queue_mask) {
21882190 if (mv643xx_eth_collect_events(mp))
21892191 continue;
@@ -2204,7 +2206,7 @@ static int mv643xx_eth_poll(struct napi_struct *napi, int budget) · 14 unmodified lines
22042206 txq_maybe_wake(mp->txq + queue);
22052207 } else if (mp->work_rx & queue_mask) {
22062208 work_done += rxq_process(mp->rxq + queue, work_tbd);
2207− } else if (mp->work_rx_refill & queue_mask) {
2209+ } else if (!mp->oom && (mp->work_rx_refill & queue_mask)) {
22082210 work_done += rxq_refill(mp->rxq + queue, work_tbd);
22092211 } else {
22102212 BUG();
@@ -2212,7 +2214,7 @@ static int mv643xx_eth_poll(struct napi_struct *napi, int budget) · 1 unmodified line
22122214 }
22132215
22142216 if (work_done < budget) {
2215− if (mp->work_rx_oom)
2217+ if (mp->oom)
22162218 mod_timer(&mp->rx_oom, jiffies + (HZ / 10));
22172219 napi_complete(napi);
22182220 wrlp(mp, INT_MASK, INT_TX_END | INT_RX | INT_EXT);
@@ -2372,7 +2374,7 @@ static int mv643xx_eth_open(struct net_device *dev) · 153 unmodified lines
23722374 rxq_refill(mp->rxq + i, INT_MAX);
23732375 }
23742376
2375− if (mp->work_rx_oom) {
2377+ if (mp->oom) {
23762378 mp->rx_oom.expires = jiffies + (HZ / 10);
23772379 add_timer(&mp->rx_oom);
23782380 }
drivers/net/ne2k-pci.c+3−4
@@ -374,18 +374,17 @@ static int __devinit ne2k_pci_init_one (struct pci_dev *pdev, · 373 unmodified lines
374374 dev->ethtool_ops = &ne2k_pci_ethtool_ops;
375375 NS8390_init(dev, 0);
376376
377+ memcpy(dev->dev_addr, SA_prom, 6);
378+ memcpy(dev->perm_addr, dev->dev_addr, dev->addr_len);
379+
377380 i = register_netdev(dev);
378381 if (i)
379382 goto err_out_free_netdev;
380383
381− for(i = 0; i < 6; i++)
382− dev->dev_addr[i] = SA_prom[i];
383384 printk("%s: %s found at %#lx, IRQ %d, %pM.\n",
384385 dev->name, pci_clone_list[chip_idx].name, ioaddr, dev->irq,
385386 dev->dev_addr);
386387
387− memcpy(dev->perm_addr, dev->dev_addr, dev->addr_len);
388−
389388 return 0;
390389
391390 err_out_free_netdev:
drivers/net/netconsole.c+10−1
@@ -664,7 +664,7 @@ static int netconsole_netdev_event(struct notifier_block *this, · 663 unmodified lines
664664 struct netconsole_target *nt;
665665 struct net_device *dev = ptr;
666666
667− if (!(event == NETDEV_CHANGENAME))
667+ if (!(event == NETDEV_CHANGENAME || event == NETDEV_UNREGISTER))
668668 goto done;
669669
670670 spin_lock_irqsave(&target_list_lock, flags);
@@ -675,6 +675,15 @@ static int netconsole_netdev_event(struct notifier_block *this, · 4 unmodified lines
675675 case NETDEV_CHANGENAME:
676676 strlcpy(nt->np.dev_name, dev->name, IFNAMSIZ);
677677 break;
678+ case NETDEV_UNREGISTER:
679+ if (!nt->enabled)
680+ break;
681+ netpoll_cleanup(&nt->np);
682+ nt->enabled = 0;
683+ printk(KERN_INFO "netconsole: network logging stopped"
684+ ", interface %s unregistered\n",
685+ dev->name);
686+ break;
678687 }
679688 }
680689 netconsole_target_put(nt);
drivers/net/usb/Kconfig+14−0
@@ -180,6 +180,20 @@ config USB_NET_CDCETHER · 179 unmodified lines
180180 IEEE 802 "local assignment" bit is set in the address, a "usbX"
181181 name is used instead.
182182
183+config USB_NET_CDC_EEM
184+ tristate "CDC EEM support"
185+ depends on USB_USBNET && EXPERIMENTAL
186+ help
187+ This option supports devices conforming to the Communication Device
188+ Class (CDC) Ethernet Emulation Model, a specification that's easy to
189+ implement in device firmware. The CDC EEM specifications are available
190+ from <http://www.usb.org/>.
191+
192+ This driver creates an interface named "ethX", where X depends on
193+ what other networking devices you have in use. However, if the
194+ IEEE 802 "local assignment" bit is set in the address, a "usbX"
195+ name is used instead.
196+
183197 config USB_NET_DM9601
184198 tristate "Davicom DM9601 based USB 1.1 10/100 ethernet devices"
185199 depends on USB_USBNET
drivers/net/usb/Makefile+1−0
@@ -9,6 +9,7 @@ obj-$(CONFIG_USB_RTL8150) += rtl8150.o · 8 unmodified lines
99 obj-$(CONFIG_USB_HSO) += hso.o
1010 obj-$(CONFIG_USB_NET_AX8817X) += asix.o
1111 obj-$(CONFIG_USB_NET_CDCETHER) += cdc_ether.o
12+obj-$(CONFIG_USB_NET_CDC_EEM) += cdc_eem.o
1213 obj-$(CONFIG_USB_NET_DM9601) += dm9601.o
1314 obj-$(CONFIG_USB_NET_SMSC95XX) += smsc95xx.o
1415 obj-$(CONFIG_USB_NET_GL620A) += gl620a.o
drivers/net/usb/cdc_eem.c+381−0
@@ -0,0 +1,381 @@
1+/*
2+ * USB CDC EEM network interface driver
3+ * Copyright (C) 2009 Oberthur Technologies
4+ * by Omar Laazimani, Olivier Condemine
5+ *
6+ * This program is free software; you can redistribute it and/or modify
7+ * it under the terms of the GNU General Public License as published by
8+ * the Free Software Foundation; either version 2 of the License, or
9+ * (at your option) any later version.
10+ *
11+ * This program is distributed in the hope that it will be useful,
12+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
13+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14+ * GNU General Public License for more details.
15+ *
16+ * You should have received a copy of the GNU General Public License
17+ * along with this program; if not, write to the Free Software
18+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19+ */
20+
21+#include <linux/module.h>
22+#include <linux/init.h>
23+#include <linux/netdevice.h>
24+#include <linux/etherdevice.h>
25+#include <linux/ctype.h>
26+#include <linux/ethtool.h>
27+#include <linux/workqueue.h>
28+#include <linux/mii.h>
29+#include <linux/usb.h>
30+#include <linux/crc32.h>
31+#include <linux/usb/cdc.h>
32+#include <linux/usb/usbnet.h>
33+
34+
35+/*
36+ * This driver is an implementation of the CDC "Ethernet Emulation
37+ * Model" (EEM) specification, which encapsulates Ethernet frames
38+ * for transport over USB using a simpler USB device model than the
39+ * previous CDC "Ethernet Control Model" (ECM, or "CDC Ethernet").
40+ *
41+ * For details, see www.usb.org/developers/devclass_docs/CDC_EEM10.pdf
42+ *
43+ * This version has been tested with GIGAntIC WuaoW SIM Smart Card on 2.6.24,
44+ * 2.6.27 and 2.6.30rc2 kernel.
45+ * It has also been validated on Openmoko Om 2008.12 (based on 2.6.24 kernel).
46+ * build on 23-April-2009
47+ */
48+
49+#define EEM_HEAD 2 /* 2 byte header */
50+
51+/*-------------------------------------------------------------------------*/
52+
53+static void eem_linkcmd_complete(struct urb *urb)
54+{
55+ dev_kfree_skb(urb->context);
56+ usb_free_urb(urb);
57+}
58+
59+static void eem_linkcmd(struct usbnet *dev, struct sk_buff *skb)
60+{
61+ struct urb *urb;
62+ int status;
63+
64+ urb = usb_alloc_urb(0, GFP_ATOMIC);
65+ if (!urb)
66+ goto fail;
67+
68+ usb_fill_bulk_urb(urb, dev->udev, dev->out,
69+ skb->data, skb->len, eem_linkcmd_complete, skb);
70+
71+ status = usb_submit_urb(urb, GFP_ATOMIC);
72+ if (status) {
73+ usb_free_urb(urb);
74+fail:
75+ dev_kfree_skb(skb);
76+ devwarn(dev, "link cmd failure\n");
77+ return;
78+ }
79+}
80+
81+static int eem_bind(struct usbnet *dev, struct usb_interface *intf)
82+{
83+ int status = 0;
84+
85+ status = usbnet_get_endpoints(dev, intf);
86+ if (status < 0) {
87+ usb_set_intfdata(intf, NULL);
88+ usb_driver_release_interface(driver_of(intf), intf);
89+ return status;
90+ }
91+
92+ /* no jumbogram (16K) support for now */
93+
94+ dev->net->hard_header_len += EEM_HEAD + ETH_FCS_LEN;
95+
96+ return 0;
97+}
98+
99+/*
100+ * EEM permits packing multiple Ethernet frames into USB transfers
101+ * (a "bundle"), but for TX we don't try to do that.
102+ */
103+static struct sk_buff *eem_tx_fixup(struct usbnet *dev, struct sk_buff *skb,
104+ gfp_t flags)
105+{
106+ struct sk_buff *skb2 = NULL;
107+ u16 len = skb->len;
108+ u32 crc = 0;
109+ int padlen = 0;
110+
111+ /* When ((len + EEM_HEAD + ETH_FCS_LEN) % dev->maxpacket) is
112+ * zero, stick two bytes of zero length EEM packet on the end.
113+ * Else the framework would add invalid single byte padding,
114+ * since it can't know whether ZLPs will be handled right by
115+ * all the relevant hardware and software.
116+ */
117+ if (!((len + EEM_HEAD + ETH_FCS_LEN) % dev->maxpacket))
118+ padlen += 2;
119+
120+ if (!skb_cloned(skb)) {
121+ int headroom = skb_headroom(skb);
122+ int tailroom = skb_tailroom(skb);
123+
124+ if ((tailroom >= ETH_FCS_LEN + padlen)
125+ && (headroom >= EEM_HEAD))
126+ goto done;
127+
128+ if ((headroom + tailroom)
129+ > (EEM_HEAD + ETH_FCS_LEN + padlen)) {
130+ skb->data = memmove(skb->head +
131+ EEM_HEAD,
132+ skb->data,
133+ skb->len);
134+ skb_set_tail_pointer(skb, len);
135+ goto done;
136+ }
137+ }
138+
139+ skb2 = skb_copy_expand(skb, EEM_HEAD, ETH_FCS_LEN + padlen, flags);
140+ if (!skb2)
141+ return NULL;
142+
143+ dev_kfree_skb_any(skb);
144+ skb = skb2;
145+
146+done:
147+ /* we don't use the "no Ethernet CRC" option */
148+ crc = crc32_le(~0, skb->data, skb->len);
149+ crc = ~crc;
150+
151+ put_unaligned_le32(crc, skb_put(skb, 4));
152+
153+ /* EEM packet header format:
154+ * b0..13: length of ethernet frame
155+ * b14: bmCRC (1 == valid Ethernet CRC)
156+ * b15: bmType (0 == data)
157+ */
158+ len = skb->len;
159+ put_unaligned_le16(BIT(14) | len, skb_push(skb, 2));
160+
161+ /* Bundle a zero length EEM packet if needed */
162+ if (padlen)
163+ put_unaligned_le16(0, skb_put(skb, 2));
164+
165+ return skb;
166+}
167+
168+static int eem_rx_fixup(struct usbnet *dev, struct sk_buff *skb)
169+{
170+ /*
171+ * Our task here is to strip off framing, leaving skb with one
172+ * data frame for the usbnet framework code to process. But we
173+ * may have received multiple EEM payloads, or command payloads.
174+ * So we must process _everything_ as if it's a header, except
175+ * maybe the last data payload
176+ *
177+ * REVISIT the framework needs updating so that when we consume
178+ * all payloads (the last or only message was a command, or a
179+ * zero length EEM packet) that is not accounted as an rx_error.
180+ */
181+ do {
182+ struct sk_buff *skb2 = NULL;
183+ u16 header;
184+ u16 len = 0;
185+
186+ /* incomplete EEM header? */
187+ if (skb->len < EEM_HEAD)
188+ return 0;
189+
190+ /*
191+ * EEM packet header format:
192+ * b0..14: EEM type dependant (Data or Command)
193+ * b15: bmType
194+ */
195+ header = get_unaligned_le16(skb->data);
196+ skb_pull(skb, EEM_HEAD);
197+
198+ /*
199+ * The bmType bit helps to denote when EEM
200+ * packet is data or command :
201+ * bmType = 0 : EEM data payload
202+ * bmType = 1 : EEM (link) command
203+ */
204+ if (header & BIT(15)) {
205+ u16 bmEEMCmd;
206+
207+ /*
208+ * EEM (link) command packet:
209+ * b0..10: bmEEMCmdParam
210+ * b11..13: bmEEMCmd
211+ * b14: bmReserved (must be 0)
212+ * b15: 1 (EEM command)
213+ */
214+ if (header & BIT(14)) {
215+ devdbg(dev, "reserved command %04x\n", header);
216+ continue;
217+ }
218+
219+ bmEEMCmd = (header >> 11) & 0x7;
220+ switch (bmEEMCmd) {
221+
222+ /* Responding to echo requests is mandatory. */
223+ case 0: /* Echo command */
224+ len = header & 0x7FF;
225+
226+ /* bogus command? */
227+ if (skb->len < len)
228+ return 0;
229+
230+ skb2 = skb_clone(skb, GFP_ATOMIC);
231+ if (unlikely(!skb2))
232+ goto next;
233+ skb_trim(skb2, len);
234+ put_unaligned_le16(BIT(15) | (1 << 11) | len,
235+ skb_push(skb2, 2));
236+ eem_linkcmd(dev, skb2);
237+ break;
238+
239+ /*
240+ * Host may choose to ignore hints.
241+ * - suspend: peripheral ready to suspend
242+ * - response: suggest N millisec polling
243+ * - response complete: suggest N sec polling
244+ */
245+ case 2: /* Suspend hint */
246+ case 3: /* Response hint */
247+ case 4: /* Response complete hint */
248+ continue;
249+
250+ /*
251+ * Hosts should never receive host-to-peripheral
252+ * or reserved command codes; or responses to an
253+ * echo command we didn't send.
254+ */
255+ case 1: /* Echo response */
256+ case 5: /* Tickle */
257+ default: /* reserved */
258+ devwarn(dev, "unexpected link command %d\n",
259+ bmEEMCmd);
260+ continue;
261+ }
262+
263+ } else {
264+ u32 crc, crc2;
265+ int is_last;
266+
267+ /* zero length EEM packet? */
268+ if (header == 0)
269+ continue;
270+
271+ /*
272+ * EEM data packet header :
273+ * b0..13: length of ethernet frame
274+ * b14: bmCRC
275+ * b15: 0 (EEM data)
276+ */
277+ len = header & 0x3FFF;
278+
279+ /* bogus EEM payload? */
280+ if (skb->len < len)
281+ return 0;
282+
283+ /* bogus ethernet frame? */
284+ if (len < (ETH_HLEN + ETH_FCS_LEN))
285+ goto next;
286+
287+ /*
288+ * Treat the last payload differently: framework
289+ * code expects our "fixup" to have stripped off
290+ * headers, so "skb" is a data packet (or error).
291+ * Else if it's not the last payload, keep "skb"
292+ * for further processing.
293+ */
294+ is_last = (len == skb->len);
295+ if (is_last)
296+ skb2 = skb;
297+ else {
298+ skb2 = skb_clone(skb, GFP_ATOMIC);
299+ if (unlikely(!skb2))
300+ return 0;
301+ }
302+
303+ crc = get_unaligned_le32(skb2->data
304+ + len - ETH_FCS_LEN);
305+ skb_trim(skb2, len - ETH_FCS_LEN);
306+
307+ /*
308+ * The bmCRC helps to denote when the CRC field in
309+ * the Ethernet frame contains a calculated CRC:
310+ * bmCRC = 1 : CRC is calculated
311+ * bmCRC = 0 : CRC = 0xDEADBEEF
312+ */
313+ if (header & BIT(14))
314+ crc2 = ~crc32_le(~0, skb2->data, len);
315+ else
316+ crc2 = 0xdeadbeef;
317+
318+ if (is_last)
319+ return crc == crc2;
320+
321+ if (unlikely(crc != crc2)) {
322+ dev->stats.rx_errors++;
323+ dev_kfree_skb_any(skb2);
324+ } else
325+ usbnet_skb_return(dev, skb2);
326+ }
327+
328+next:
329+ skb_pull(skb, len);
330+ } while (skb->len);
331+
332+ return 1;
333+}
334+
335+static const struct driver_info eem_info = {
336+ .description = "CDC EEM Device",
337+ .flags = FLAG_ETHER,
338+ .bind = eem_bind,
339+ .rx_fixup = eem_rx_fixup,
340+ .tx_fixup = eem_tx_fixup,
341+};
342+
343+/*-------------------------------------------------------------------------*/
344+
345+static const struct usb_device_id products[] = {
346+{
347+ USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_EEM,
348+ USB_CDC_PROTO_EEM),
349+ .driver_info = (unsigned long) &eem_info,
350+},
351+{
352+ /* EMPTY == end of list */
353+},
354+};
355+MODULE_DEVICE_TABLE(usb, products);
356+
357+static struct usb_driver eem_driver = {
358+ .name = "cdc_eem",
359+ .id_table = products,
360+ .probe = usbnet_probe,
361+ .disconnect = usbnet_disconnect,
362+ .suspend = usbnet_suspend,
363+ .resume = usbnet_resume,
364+};
365+
366+
367+static int __init eem_init(void)
368+{
369+ return usb_register(&eem_driver);
370+}
371+module_init(eem_init);
372+
373+static void __exit eem_exit(void)
374+{
375+ usb_deregister(&eem_driver);
376+}
377+module_exit(eem_exit);
378+
379+MODULE_AUTHOR("Omar Laazimani <omar.oberthur@gmail.com>");
380+MODULE_DESCRIPTION("USB CDC EEM");
381+MODULE_LICENSE("GPL");
drivers/net/usb/smsc95xx.c+15−0
@@ -941,6 +941,16 @@ static int smsc95xx_reset(struct usbnet *dev) · 940 unmodified lines
941941 if (netif_msg_ifup(dev))
942942 devdbg(dev, "ID_REV = 0x%08x", read_buf);
943943
944+ /* Configure GPIO pins as LED outputs */
945+ write_buf = LED_GPIO_CFG_SPD_LED | LED_GPIO_CFG_LNK_LED |
946+ LED_GPIO_CFG_FDX_LED;
947+ ret = smsc95xx_write_reg(dev, LED_GPIO_CFG, write_buf);
948+ if (ret < 0) {
949+ devwarn(dev, "Failed to write LED_GPIO_CFG register, ret=%d",
950+ ret);
951+ return ret;
952+ }
953+
944954 /* Init Tx */
945955 write_buf = 0;
946956 ret = smsc95xx_write_reg(dev, FLOW, write_buf);
@@ -1231,6 +1241,11 @@ static const struct usb_device_id products[] = { · 284 unmodified lines
12311241 USB_DEVICE(0x0424, 0x9500),
12321242 .driver_info = (unsigned long) &smsc95xx_info,
12331243 },
1244+ {
1245+ /* SMSC9512/9514 USB Hub & Ethernet Device */
1246+ USB_DEVICE(0x0424, 0xec00),
1247+ .driver_info = (unsigned long) &smsc95xx_info,
1248+ },
12341249 { }, /* END */
12351250 };
12361251 MODULE_DEVICE_TABLE(usb, products);
drivers/net/usb/smsc95xx.h+3−0
@@ -99,6 +99,9 @@ · 98 unmodified lines
9999 #define PM_CTL_WUPS_MULTI_ (0x00000003)
100100
101101 #define LED_GPIO_CFG (0x24)
102+#define LED_GPIO_CFG_SPD_LED (0x01000000)
103+#define LED_GPIO_CFG_LNK_LED (0x00100000)
104+#define LED_GPIO_CFG_FDX_LED (0x00010000)
102105
103106 #define GPIO_CFG (0x28)
104107
drivers/net/virtio_net.c+14−10
@@ -616,10 +616,11 @@ static int virtnet_open(struct net_device *dev) · 615 unmodified lines
616616 static bool virtnet_send_command(struct virtnet_info *vi, u8 class, u8 cmd,
617617 struct scatterlist *data, int out, int in)
618618 {
619− struct scatterlist sg[VIRTNET_SEND_COMMAND_SG_MAX + 2];
619+ struct scatterlist *s, sg[VIRTNET_SEND_COMMAND_SG_MAX + 2];
620620 struct virtio_net_ctrl_hdr ctrl;
621621 virtio_net_ctrl_ack status = ~0;
622622 unsigned int tmp;
623+ int i;
623624
624625 if (!virtio_has_feature(vi->vdev, VIRTIO_NET_F_CTRL_VQ)) {
625626 BUG(); /* Caller should know better */
@@ -637,7 +638,8 @@ static bool virtnet_send_command(struct virtnet_info *vi, u8 class, u8 cmd, · 11 unmodified lines
637638 sg_init_table(sg, out + in);
638639
639640 sg_set_buf(&sg[0], &ctrl, sizeof(ctrl));
640− memcpy(&sg[1], data, sizeof(struct scatterlist) * (out + in - 2));
641+ for_each_sg(data, s, out + in - 2, i)
642+ sg_set_buf(&sg[i + 1], sg_virt(s), s->length);
641643 sg_set_buf(&sg[out + in - 1], &status, sizeof(status));
642644
643645 if (vi->cvq->vq_ops->add_buf(vi->cvq, sg, out, in, vi) != 0)
@@ -692,7 +694,7 @@ static void virtnet_set_rx_mode(struct net_device *dev) · 48 unmodified lines
692694 promisc = ((dev->flags & IFF_PROMISC) != 0);
693695 allmulti = ((dev->flags & IFF_ALLMULTI) != 0);
694696
695− sg_set_buf(sg, &promisc, sizeof(promisc));
697+ sg_init_one(sg, &promisc, sizeof(promisc));
696698
697699 if (!virtnet_send_command(vi, VIRTIO_NET_CTRL_RX,
698700 VIRTIO_NET_CTRL_RX_PROMISC,
@@ -700,7 +702,7 @@ static void virtnet_set_rx_mode(struct net_device *dev) · 1 unmodified line
700702 dev_warn(&dev->dev, "Failed to %sable promisc mode.\n",
701703 promisc ? "en" : "dis");
702704
703− sg_set_buf(sg, &allmulti, sizeof(allmulti));
705+ sg_init_one(sg, &allmulti, sizeof(allmulti));
704706
705707 if (!virtnet_send_command(vi, VIRTIO_NET_CTRL_RX,
706708 VIRTIO_NET_CTRL_RX_ALLMULTI,
@@ -716,6 +718,8 @@ static void virtnet_set_rx_mode(struct net_device *dev) · 9 unmodified lines
716718 return;
717719 }
718720
721+ sg_init_table(sg, 2);
722+
719723 /* Store the unicast list and count in the front of the buffer */
720724 mac_data->entries = dev->uc_count;
721725 addr = dev->uc_list;
@@ -744,24 +748,24 @@ static void virtnet_set_rx_mode(struct net_device *dev) · 22 unmodified lines
744748 kfree(buf);
745749 }
746750
747−static void virnet_vlan_rx_add_vid(struct net_device *dev, u16 vid)
751+static void virtnet_vlan_rx_add_vid(struct net_device *dev, u16 vid)
748752 {
749753 struct virtnet_info *vi = netdev_priv(dev);
750754 struct scatterlist sg;
751755
752− sg_set_buf(&sg, &vid, sizeof(vid));
756+ sg_init_one(&sg, &vid, sizeof(vid));
753757
754758 if (!virtnet_send_command(vi, VIRTIO_NET_CTRL_VLAN,
755759 VIRTIO_NET_CTRL_VLAN_ADD, &sg, 1, 0))
756760 dev_warn(&dev->dev, "Failed to add VLAN ID %d.\n", vid);
757761 }
758762
759−static void virnet_vlan_rx_kill_vid(struct net_device *dev, u16 vid)
763+static void virtnet_vlan_rx_kill_vid(struct net_device *dev, u16 vid)
760764 {
761765 struct virtnet_info *vi = netdev_priv(dev);
762766 struct scatterlist sg;
763767
764− sg_set_buf(&sg, &vid, sizeof(vid));
768+ sg_init_one(&sg, &vid, sizeof(vid));
765769
766770 if (!virtnet_send_command(vi, VIRTIO_NET_CTRL_VLAN,
767771 VIRTIO_NET_CTRL_VLAN_DEL, &sg, 1, 0))
@@ -794,8 +798,8 @@ static const struct net_device_ops virtnet_netdev = { · 26 unmodified lines
794798 .ndo_set_mac_address = virtnet_set_mac_address,
795799 .ndo_set_rx_mode = virtnet_set_rx_mode,
796800 .ndo_change_mtu = virtnet_change_mtu,
797− .ndo_vlan_rx_add_vid = virnet_vlan_rx_add_vid,
798− .ndo_vlan_rx_kill_vid = virnet_vlan_rx_kill_vid,
801+ .ndo_vlan_rx_add_vid = virtnet_vlan_rx_add_vid,
802+ .ndo_vlan_rx_kill_vid = virtnet_vlan_rx_kill_vid,
799803 #ifdef CONFIG_NET_POLL_CONTROLLER
800804 .ndo_poll_controller = virtnet_netpoll,
801805 #endif
drivers/net/wireless/ath5k/debug.c+1−1
@@ -424,7 +424,7 @@ ath5k_debug_dump_bands(struct ath5k_softc *sc) · 423 unmodified lines
424424
425425 for (b = 0; b < IEEE80211_NUM_BANDS; b++) {
426426 struct ieee80211_supported_band *band = &sc->sbands[b];
427− char bname[5];
427+ char bname[6];
428428 switch (band->band) {
429429 case IEEE80211_BAND_2GHZ:
430430 strcpy(bname, "2 GHz");
drivers/net/wireless/iwlwifi/iwl-scan.c+2−2
@@ -925,11 +925,11 @@ void iwl_bg_scan_completed(struct work_struct *work) · 924 unmodified lines
925925
926926 IWL_DEBUG_SCAN(priv, "SCAN complete scan\n");
927927
928+ ieee80211_scan_completed(priv->hw, false);
929+
928930 if (test_bit(STATUS_EXIT_PENDING, &priv->status))
929931 return;
930932
931− ieee80211_scan_completed(priv->hw, false);
932−
933933 /* Since setting the TXPOWER may have been deferred while
934934 * performing the scan, fire one off */
935935 mutex_lock(&priv->mutex);
drivers/net/wireless/iwlwifi/iwl3945-base.c+0−1
@@ -1694,7 +1694,6 @@ void iwl3945_rx_queue_reset(struct iwl_priv *priv, struct iwl_rx_queue *rxq) · 1693 unmodified lines
16941694 rxq->free_count = 0;
16951695 spin_unlock_irqrestore(&rxq->lock, flags);
16961696 }
1697−EXPORT_SYMBOL(iwl3945_rx_queue_reset);
16981697
16991698 /*
17001699 * this should be called while priv->lock is locked
drivers/net/wireless/rndis_wlan.c+10−4
@@ -2558,6 +2558,11 @@ static int rndis_wext_bind(struct usbnet *usbdev, struct usb_interface *intf) · 2557 unmodified lines
25582558 mutex_init(&priv->command_lock);
25592559 spin_lock_init(&priv->stats_lock);
25602560
2561+ /* because rndis_command() sleeps we need to use workqueue */
2562+ priv->workqueue = create_singlethread_workqueue("rndis_wlan");
2563+ INIT_WORK(&priv->work, rndis_wext_worker);
2564+ INIT_DELAYED_WORK(&priv->stats_work, rndis_update_wireless_stats);
2565+
25612566 /* try bind rndis_host */
25622567 retval = generic_rndis_bind(usbdev, intf, FLAG_RNDIS_PHYM_WIRELESS);
25632568 if (retval < 0)
@@ -2603,16 +2608,17 @@ static int rndis_wext_bind(struct usbnet *usbdev, struct usb_interface *intf) · 39 unmodified lines
26032608 disassociate(usbdev, 1);
26042609 netif_carrier_off(usbdev->net);
26052610
2606− /* because rndis_command() sleeps we need to use workqueue */
2607− priv->workqueue = create_singlethread_workqueue("rndis_wlan");
2608− INIT_DELAYED_WORK(&priv->stats_work, rndis_update_wireless_stats);
26092611 queue_delayed_work(priv->workqueue, &priv->stats_work,
26102612 round_jiffies_relative(STATS_UPDATE_JIFFIES));
2611− INIT_WORK(&priv->work, rndis_wext_worker);
26122613
26132614 return 0;
26142615
26152616 fail:
2617+ cancel_delayed_work_sync(&priv->stats_work);
2618+ cancel_work_sync(&priv->work);
2619+ flush_workqueue(priv->workqueue);
2620+ destroy_workqueue(priv->workqueue);
2621+
26162622 kfree(priv);
26172623 return retval;
26182624 }
include/linux/netfilter/x_tables.h+2−2
@@ -472,7 +472,7 @@ static inline void xt_info_rdlock_bh(void) · 471 unmodified lines
472472
473473 local_bh_disable();
474474 lock = &__get_cpu_var(xt_info_locks);
475− if (!lock->readers++)
475+ if (likely(!lock->readers++))
476476 spin_lock(&lock->lock);
477477 }
478478
@@ -480,7 +480,7 @@ static inline void xt_info_rdunlock_bh(void) · 1 unmodified line
480480 {
481481 struct xt_info_lock *lock = &__get_cpu_var(xt_info_locks);
482482
483− if (!--lock->readers)
483+ if (likely(!--lock->readers))
484484 spin_unlock(&lock->lock);
485485 local_bh_enable();
486486 }
include/linux/usb/cdc.h+3−0
@@ -17,6 +17,7 @@ · 16 unmodified lines
1717 #define USB_CDC_SUBCLASS_DMM 0x09
1818 #define USB_CDC_SUBCLASS_MDLM 0x0a
1919 #define USB_CDC_SUBCLASS_OBEX 0x0b
20+#define USB_CDC_SUBCLASS_EEM 0x0c
2021
2122 #define USB_CDC_PROTO_NONE 0
2223
@@ -28,6 +29,8 @@ · 5 unmodified lines
2829 #define USB_CDC_ACM_PROTO_AT_CDMA 6
2930 #define USB_CDC_ACM_PROTO_VENDOR 0xff
3031
32+#define USB_CDC_PROTO_EEM 7
33+
3134 /*-------------------------------------------------------------------------*/
3235
3336 /*
include/linux/virtio_net.h+1−0
@@ -4,6 +4,7 @@ · 3 unmodified lines
44 * compatible drivers/servers. */
55 #include <linux/types.h>
66 #include <linux/virtio_config.h>
7+#include <linux/if_ether.h>
78
89 /* The ID for virtio_net */
910 #define VIRTIO_ID_NET 1
include/net/bluetooth/hci_core.h+1−0
@@ -457,6 +457,7 @@ int hci_recv_fragment(struct hci_dev *hdev, int type, void *data, int count); · 456 unmodified lines
457457
458458 int hci_register_sysfs(struct hci_dev *hdev);
459459 void hci_unregister_sysfs(struct hci_dev *hdev);
460+void hci_conn_init_sysfs(struct hci_conn *conn);
460461 void hci_conn_add_sysfs(struct hci_conn *conn);
461462 void hci_conn_del_sysfs(struct hci_conn *conn);
462463
include/net/tcp.h+13−1
@@ -41,6 +41,7 @@ · 40 unmodified lines
4141 #include <net/ip.h>
4242 #include <net/tcp_states.h>
4343 #include <net/inet_ecn.h>
44+#include <net/dst.h>
4445
4546 #include <linux/seq_file.h>
4647
@@ -530,6 +531,17 @@ static inline void tcp_fast_path_check(struct sock *sk) · 483 unmodified lines
530531 tcp_fast_path_on(tp);
531532 }
532533
534+/* Compute the actual rto_min value */
535+static inline u32 tcp_rto_min(struct sock *sk)
536+{
537+ struct dst_entry *dst = __sk_dst_get(sk);
538+ u32 rto_min = TCP_RTO_MIN;
539+
540+ if (dst && dst_metric_locked(dst, RTAX_RTO_MIN))
541+ rto_min = dst_metric_rtt(dst, RTAX_RTO_MIN);
542+ return rto_min;
543+}
544+
533545 /* Compute the actual receive window we are currently advertising.
534546 * Rcv_nxt can be after the window if our peer push more data
535547 * than the offered window.
@@ -895,7 +907,7 @@ static inline int tcp_prequeue(struct sock *sk, struct sk_buff *skb) · 359 unmodified lines
895907 wake_up_interruptible(sk->sk_sleep);
896908 if (!inet_csk_ack_scheduled(sk))
897909 inet_csk_reset_xmit_timer(sk, ICSK_TIME_DACK,
898− (3 * TCP_RTO_MIN) / 4,
910+ (3 * tcp_rto_min(sk)) / 4,
899911 TCP_RTO_MAX);
900912 }
901913 return 1;
net/atm/br2684.c+1−0
@@ -549,6 +549,7 @@ static void br2684_setup(struct net_device *netdev) · 548 unmodified lines
549549 struct br2684_dev *brdev = BRPRIV(netdev);
550550
551551 ether_setup(netdev);
552+ brdev->net_dev = netdev;
552553
553554 netdev->netdev_ops = &br2684_netdev_ops;
554555
net/bluetooth/hci_conn.c+2−0
@@ -248,6 +248,8 @@ struct hci_conn *hci_conn_add(struct hci_dev *hdev, int type, bdaddr_t *dst) · 247 unmodified lines
248248 if (hdev->notify)
249249 hdev->notify(hdev, HCI_NOTIFY_CONN_ADD);
250250
251+ hci_conn_init_sysfs(conn);
252+
251253 tasklet_enable(&hdev->tx_task);
252254
253255 return conn;
net/bluetooth/hci_sysfs.c+40−34
@@ -9,7 +9,7 @@ · 8 unmodified lines
99 struct class *bt_class = NULL;
1010 EXPORT_SYMBOL_GPL(bt_class);
1111
12−static struct workqueue_struct *bluetooth;
12+static struct workqueue_struct *bt_workq;
1313
1414 static inline char *link_typetostr(int type)
1515 {
@@ -89,8 +89,8 @@ static void add_conn(struct work_struct *work) · 73 unmodified lines
8989 {
9090 struct hci_conn *conn = container_of(work, struct hci_conn, work_add);
9191
92− /* ensure previous add/del is complete */
93− flush_workqueue(bluetooth);
92+ /* ensure previous del is complete */
93+ flush_work(&conn->work_del);
9494
9595 if (device_add(&conn->dev) < 0) {
9696 BT_ERR("Failed to register connection device");
@@ -98,27 +98,6 @@ static void add_conn(struct work_struct *work) · 1 unmodified line
9898 }
9999 }
100100
101−void hci_conn_add_sysfs(struct hci_conn *conn)
102−{
103− struct hci_dev *hdev = conn->hdev;
104−
105− BT_DBG("conn %p", conn);
106−
107− conn->dev.type = &bt_link;
108− conn->dev.class = bt_class;
109− conn->dev.parent = &hdev->dev;
110−
111− dev_set_name(&conn->dev, "%s:%d", hdev->name, conn->handle);
112−
113− dev_set_drvdata(&conn->dev, conn);
114−
115− device_initialize(&conn->dev);
116−
117− INIT_WORK(&conn->work_add, add_conn);
118−
119− queue_work(bluetooth, &conn->work_add);
120−}
121−
122101 /*
123102 * The rfcomm tty device will possibly retain even when conn
124103 * is down, and sysfs doesn't support move zombie device,
@@ -134,8 +113,11 @@ static void del_conn(struct work_struct *work) · 9 unmodified lines
134113 struct hci_conn *conn = container_of(work, struct hci_conn, work_del);
135114 struct hci_dev *hdev = conn->hdev;
136115
137− /* ensure previous add/del is complete */
138− flush_workqueue(bluetooth);
116+ /* ensure previous add is complete */
117+ flush_work(&conn->work_add);
118+
119+ if (!device_is_registered(&conn->dev))
120+ return;
139121
140122 while (1) {
141123 struct device *dev;
@@ -152,16 +134,40 @@ static void del_conn(struct work_struct *work) · 10 unmodified lines
152134 hci_dev_put(hdev);
153135 }
154136
155−void hci_conn_del_sysfs(struct hci_conn *conn)
137+void hci_conn_init_sysfs(struct hci_conn *conn)
156138 {
139+ struct hci_dev *hdev = conn->hdev;
140+
157141 BT_DBG("conn %p", conn);
158142
159− if (!device_is_registered(&conn->dev))
160− return;
143+ conn->dev.type = &bt_link;
144+ conn->dev.class = bt_class;
145+ conn->dev.parent = &hdev->dev;
146+
147+ dev_set_drvdata(&conn->dev, conn);
161148
149+ device_initialize(&conn->dev);
150+
151+ INIT_WORK(&conn->work_add, add_conn);
162152 INIT_WORK(&conn->work_del, del_conn);
153+}
154+
155+void hci_conn_add_sysfs(struct hci_conn *conn)
156+{
157+ struct hci_dev *hdev = conn->hdev;
158+
159+ BT_DBG("conn %p", conn);
160+
161+ dev_set_name(&conn->dev, "%s:%d", hdev->name, conn->handle);
162+
163+ queue_work(bt_workq, &conn->work_add);
164+}
165+
166+void hci_conn_del_sysfs(struct hci_conn *conn)
167+{
168+ BT_DBG("conn %p", conn);
163169
164− queue_work(bluetooth, &conn->work_del);
170+ queue_work(bt_workq, &conn->work_del);
165171 }
166172
167173 static inline char *host_typetostr(int type)
@@ -438,13 +444,13 @@ void hci_unregister_sysfs(struct hci_dev *hdev) · 270 unmodified lines
438444
439445 int __init bt_sysfs_init(void)
440446 {
441− bluetooth = create_singlethread_workqueue("bluetooth");
442− if (!bluetooth)
447+ bt_workq = create_singlethread_workqueue("bluetooth");
448+ if (!bt_workq)
443449 return -ENOMEM;
444450
445451 bt_class = class_create(THIS_MODULE, "bluetooth");
446452 if (IS_ERR(bt_class)) {
447− destroy_workqueue(bluetooth);
453+ destroy_workqueue(bt_workq);
448454 return PTR_ERR(bt_class);
449455 }
450456
@@ -453,7 +459,7 @@ int __init bt_sysfs_init(void) · 2 unmodified lines
453459
454460 void bt_sysfs_cleanup(void)
455461 {
456− destroy_workqueue(bluetooth);
462+ destroy_workqueue(bt_workq);
457463
458464 class_destroy(bt_class);
459465 }
net/core/dev.c+5−4
@@ -1735,11 +1735,12 @@ u16 skb_tx_hash(const struct net_device *dev, const struct sk_buff *skb) · 1734 unmodified lines
17351735 {
17361736 u32 hash;
17371737
1738− if (skb_rx_queue_recorded(skb)) {
1739− hash = skb_get_rx_queue(skb);
1740− } else if (skb->sk && skb->sk->sk_hash) {
1738+ if (skb_rx_queue_recorded(skb))
1739+ return skb_get_rx_queue(skb) % dev->real_num_tx_queues;
1740+
1741+ if (skb->sk && skb->sk->sk_hash)
17411742 hash = skb->sk->sk_hash;
1742− } else
1743+ else
17431744 hash = skb->protocol;
17441745
17451746 hash = jhash_1word(hash, skb_tx_hashrnd);
net/core/skbuff.c+14−13
@@ -1365,9 +1365,8 @@ static void sock_spd_release(struct splice_pipe_desc *spd, unsigned int i) · 1364 unmodified lines
13651365
13661366 static inline struct page *linear_to_page(struct page *page, unsigned int *len,
13671367 unsigned int *offset,
1368− struct sk_buff *skb)
1368+ struct sk_buff *skb, struct sock *sk)
13691369 {
1370− struct sock *sk = skb->sk;
13711370 struct page *p = sk->sk_sndmsg_page;
13721371 unsigned int off;
13731372
@@ -1405,13 +1404,14 @@ new_page: · 31 unmodified lines
14051404 */
14061405 static inline int spd_fill_page(struct splice_pipe_desc *spd, struct page *page,
14071406 unsigned int *len, unsigned int offset,
1408− struct sk_buff *skb, int linear)
1407+ struct sk_buff *skb, int linear,
1408+ struct sock *sk)
14091409 {
14101410 if (unlikely(spd->nr_pages == PIPE_BUFFERS))
14111411 return 1;
14121412
14131413 if (linear) {
1414− page = linear_to_page(page, len, &offset, skb);
1414+ page = linear_to_page(page, len, &offset, skb, sk);
14151415 if (!page)
14161416 return 1;
14171417 } else
@@ -1442,7 +1442,8 @@ static inline void __segment_seek(struct page **page, unsigned int *poff, · 24 unmodified lines
14421442 static inline int __splice_segment(struct page *page, unsigned int poff,
14431443 unsigned int plen, unsigned int *off,
14441444 unsigned int *len, struct sk_buff *skb,
1445− struct splice_pipe_desc *spd, int linear)
1445+ struct splice_pipe_desc *spd, int linear,
1446+ struct sock *sk)
14461447 {
14471448 if (!*len)
14481449 return 1;
@@ -1465,7 +1466,7 @@ static inline int __splice_segment(struct page *page, unsigned int poff, · 16 unmodified lines
14651466 /* the linear region may spread across several pages */
14661467 flen = min_t(unsigned int, flen, PAGE_SIZE - poff);
14671468
1468− if (spd_fill_page(spd, page, &flen, poff, skb, linear))
1469+ if (spd_fill_page(spd, page, &flen, poff, skb, linear, sk))
14691470 return 1;
14701471
14711472 __segment_seek(&page, &poff, &plen, flen);
@@ -1481,8 +1482,8 @@ static inline int __splice_segment(struct page *page, unsigned int poff, · 9 unmodified lines
14811482 * pipe is full or if we already spliced the requested length.
14821483 */
14831484 static int __skb_splice_bits(struct sk_buff *skb, unsigned int *offset,
1484− unsigned int *len,
1485− struct splice_pipe_desc *spd)
1485+ unsigned int *len, struct splice_pipe_desc *spd,
1486+ struct sock *sk)
14861487 {
14871488 int seg;
14881489
@@ -1492,7 +1493,7 @@ static int __skb_splice_bits(struct sk_buff *skb, unsigned int *offset, · 3 unmodified lines
14921493 if (__splice_segment(virt_to_page(skb->data),
14931494 (unsigned long) skb->data & (PAGE_SIZE - 1),
14941495 skb_headlen(skb),
1495− offset, len, skb, spd, 1))
1496+ offset, len, skb, spd, 1, sk))
14961497 return 1;
14971498
14981499 /*
@@ -1502,7 +1503,7 @@ static int __skb_splice_bits(struct sk_buff *skb, unsigned int *offset, · 3 unmodified lines
15021503 const skb_frag_t *f = &skb_shinfo(skb)->frags[seg];
15031504
15041505 if (__splice_segment(f->page, f->page_offset, f->size,
1505− offset, len, skb, spd, 0))
1506+ offset, len, skb, spd, 0, sk))
15061507 return 1;
15071508 }
15081509
@@ -1528,12 +1529,13 @@ int skb_splice_bits(struct sk_buff *skb, unsigned int offset, · 19 unmodified lines
15281529 .ops = &sock_pipe_buf_ops,
15291530 .spd_release = sock_spd_release,
15301531 };
1532+ struct sock *sk = skb->sk;
15311533
15321534 /*
15331535 * __skb_splice_bits() only fails if the output has no room left,
15341536 * so no point in going over the frag_list for the error case.
15351537 */
1536− if (__skb_splice_bits(skb, &offset, &tlen, &spd))
1538+ if (__skb_splice_bits(skb, &offset, &tlen, &spd, sk))
15371539 goto done;
15381540 else if (!tlen)
15391541 goto done;
@@ -1545,14 +1547,13 @@ int skb_splice_bits(struct sk_buff *skb, unsigned int offset, · 5 unmodified lines
15451547 struct sk_buff *list = skb_shinfo(skb)->frag_list;
15461548
15471549 for (; list && tlen; list = list->next) {
1548− if (__skb_splice_bits(list, &offset, &tlen, &spd))
1550+ if (__skb_splice_bits(list, &offset, &tlen, &spd, sk))
15491551 break;
15501552 }
15511553 }
15521554
15531555 done:
15541556 if (spd.nr_pages) {
1555− struct sock *sk = skb->sk;
15561557 int ret;
15571558
15581559 /*
net/ipv4/tcp_input.c+0−10
@@ -597,16 +597,6 @@ static void tcp_event_data_recv(struct sock *sk, struct sk_buff *skb) · 596 unmodified lines
597597 tcp_grow_window(sk, skb);
598598 }
599599
600−static u32 tcp_rto_min(struct sock *sk)
601−{
602− struct dst_entry *dst = __sk_dst_get(sk);
603− u32 rto_min = TCP_RTO_MIN;
604−
605− if (dst && dst_metric_locked(dst, RTAX_RTO_MIN))
606− rto_min = dst_metric_rtt(dst, RTAX_RTO_MIN);
607− return rto_min;
608−}
609−
610600 /* Called to compute a smoothed rtt estimate. The data fed to this
611601 * routine either comes from timestamps, or from segments that were
612602 * known _not_ to have been retransmitted [see Karn/Partridge
net/mac80211/main.c+10−10
@@ -757,6 +757,7 @@ struct ieee80211_hw *ieee80211_alloc_hw(size_t priv_data_len, · 756 unmodified lines
757757 local->hw.conf.long_frame_max_tx_count = 4;
758758 local->hw.conf.short_frame_max_tx_count = 7;
759759 local->hw.conf.radio_enabled = true;
760+ local->user_power_level = -1;
760761
761762 INIT_LIST_HEAD(&local->interfaces);
762763 mutex_init(&local->iflist_mtx);
@@ -909,6 +910,13 @@ int ieee80211_register_hw(struct ieee80211_hw *hw) · 146 unmodified lines
909910 if (result < 0)
910911 goto fail_sta_info;
911912
913+ result = ieee80211_wep_init(local);
914+ if (result < 0) {
915+ printk(KERN_DEBUG "%s: Failed to initialize wep: %d\n",
916+ wiphy_name(local->hw.wiphy), result);
917+ goto fail_wep;
918+ }
919+
912920 rtnl_lock();
913921 result = dev_alloc_name(local->mdev, local->mdev->name);
914922 if (result < 0)
@@ -930,14 +938,6 @@ int ieee80211_register_hw(struct ieee80211_hw *hw) · 15 unmodified lines
930938 goto fail_rate;
931939 }
932940
933− result = ieee80211_wep_init(local);
934−
935− if (result < 0) {
936− printk(KERN_DEBUG "%s: Failed to initialize wep: %d\n",
937− wiphy_name(local->hw.wiphy), result);
938− goto fail_wep;
939− }
940−
941941 /* add one default STA interface if supported */
942942 if (local->hw.wiphy->interface_modes & BIT(NL80211_IFTYPE_STATION)) {
943943 result = ieee80211_if_add(local, "wlan%d", NULL,
@@ -967,13 +967,13 @@ int ieee80211_register_hw(struct ieee80211_hw *hw) · 23 unmodified lines
967967
968968 return 0;
969969
970−fail_wep:
971− rate_control_deinitialize(local);
972970 fail_rate:
973971 unregister_netdevice(local->mdev);
974972 local->mdev = NULL;
975973 fail_dev:
976974 rtnl_unlock();
975+ ieee80211_wep_free(local);
976+fail_wep:
977977 sta_info_stop(local);
978978 fail_sta_info:
979979 debugfs_hw_del(local);
net/netfilter/Kconfig+1−0
@@ -837,6 +837,7 @@ config NETFILTER_XT_MATCH_SOCKET · 836 unmodified lines
837837 depends on NETFILTER_TPROXY
838838 depends on NETFILTER_XTABLES
839839 depends on NETFILTER_ADVANCED
840+ depends on !NF_CONNTRACK || NF_CONNTRACK
840841 select NF_DEFRAG_IPV4
841842 help
842843 This option adds a `socket' match, which can be used to match
net/sched/cls_api.c+1−1
@@ -254,7 +254,7 @@ replay: · 253 unmodified lines
254254 }
255255 tp->ops = tp_ops;
256256 tp->protocol = protocol;
257− tp->prio = nprio ? : tcf_auto_prio(*back);
257+ tp->prio = nprio ? : TC_H_MAJ(tcf_auto_prio(*back));
258258 tp->q = q;
259259 tp->classify = tp_ops->classify;
260260 tp->classid = parent;