diff options
34 files changed, 115 insertions, 131 deletions
diff --git a/MAINTAINERS b/MAINTAINERS index 33d99dcac691..93e0de955b4b 100644 --- a/MAINTAINERS +++ b/MAINTAINERS | |||
@@ -2039,43 +2039,19 @@ M: kernel@wantstofly.org | |||
2039 | L: netdev@vger.kernel.org | 2039 | L: netdev@vger.kernel.org |
2040 | S: Maintained | 2040 | S: Maintained |
2041 | 2041 | ||
2042 | INTEL PRO/100 ETHERNET SUPPORT | 2042 | INTEL ETHERNET DRIVERS (e100/e1000/e1000e/igb/ixgb/ixgbe) |
2043 | P: Auke Kok | 2043 | P: Auke Kok |
2044 | M: auke-jan.h.kok@intel.com | 2044 | M: auke-jan.h.kok@intel.com |
2045 | P: Jesse Brandeburg | 2045 | P: Jesse Brandeburg |
2046 | M: jesse.brandeburg@intel.com | 2046 | M: jesse.brandeburg@intel.com |
2047 | P: Jeff Kirsher | 2047 | P: Jeff Kirsher |
2048 | M: jeffrey.t.kirsher@intel.com | 2048 | M: jeffrey.t.kirsher@intel.com |
2049 | P: Bruce Allan | ||
2050 | M: bruce.w.allan@intel.com | ||
2049 | P: John Ronciak | 2051 | P: John Ronciak |
2050 | M: john.ronciak@intel.com | 2052 | M: john.ronciak@intel.com |
2051 | L: e1000-devel@lists.sourceforge.net | 2053 | L: e1000-devel@lists.sourceforge.net |
2052 | W: http://sourceforge.net/projects/e1000/ | 2054 | W: http://e1000.sourceforge.net/ |
2053 | S: Supported | ||
2054 | |||
2055 | INTEL PRO/1000 GIGABIT ETHERNET SUPPORT | ||
2056 | P: Auke Kok | ||
2057 | M: auke-jan.h.kok@intel.com | ||
2058 | P: Jesse Brandeburg | ||
2059 | M: jesse.brandeburg@intel.com | ||
2060 | P: Jeff Kirsher | ||
2061 | M: jeffrey.t.kirsher@intel.com | ||
2062 | P: John Ronciak | ||
2063 | M: john.ronciak@intel.com | ||
2064 | L: e1000-devel@lists.sourceforge.net | ||
2065 | W: http://sourceforge.net/projects/e1000/ | ||
2066 | S: Supported | ||
2067 | |||
2068 | INTEL PRO/10GbE SUPPORT | ||
2069 | P: Ayyappan Veeraiyan | ||
2070 | M: ayyappan.veeraiyan@intel.com | ||
2071 | P: Auke Kok | ||
2072 | M: auke-jan.h.kok@intel.com | ||
2073 | P: Jesse Brandeburg | ||
2074 | M: jesse.brandeburg@intel.com | ||
2075 | P: John Ronciak | ||
2076 | M: john.ronciak@intel.com | ||
2077 | L: e1000-devel@lists.sourceforge.net | ||
2078 | W: http://sourceforge.net/projects/e1000/ | ||
2079 | S: Supported | 2055 | S: Supported |
2080 | 2056 | ||
2081 | INTEL PRO/WIRELESS 2100 NETWORK CONNECTION SUPPORT | 2057 | INTEL PRO/WIRELESS 2100 NETWORK CONNECTION SUPPORT |
diff --git a/drivers/net/Kconfig b/drivers/net/Kconfig index a0f0e605d630..a64bb415f10c 100644 --- a/drivers/net/Kconfig +++ b/drivers/net/Kconfig | |||
@@ -2519,7 +2519,7 @@ config CHELSIO_T3 | |||
2519 | 2519 | ||
2520 | config EHEA | 2520 | config EHEA |
2521 | tristate "eHEA Ethernet support" | 2521 | tristate "eHEA Ethernet support" |
2522 | depends on IBMEBUS && INET | 2522 | depends on IBMEBUS && INET && SPARSEMEM |
2523 | select INET_LRO | 2523 | select INET_LRO |
2524 | ---help--- | 2524 | ---help--- |
2525 | This driver supports the IBM pSeries eHEA ethernet adapter. | 2525 | This driver supports the IBM pSeries eHEA ethernet adapter. |
diff --git a/drivers/net/atarilance.c b/drivers/net/atarilance.c index b74dbeef8050..13c293b286de 100644 --- a/drivers/net/atarilance.c +++ b/drivers/net/atarilance.c | |||
@@ -336,8 +336,6 @@ struct lance_addr { | |||
336 | 336 | ||
337 | /***************************** Prototypes *****************************/ | 337 | /***************************** Prototypes *****************************/ |
338 | 338 | ||
339 | static int addr_accessible( volatile void *regp, int wordflag, int | ||
340 | writeflag ); | ||
341 | static unsigned long lance_probe1( struct net_device *dev, struct lance_addr | 339 | static unsigned long lance_probe1( struct net_device *dev, struct lance_addr |
342 | *init_rec ); | 340 | *init_rec ); |
343 | static int lance_open( struct net_device *dev ); | 341 | static int lance_open( struct net_device *dev ); |
@@ -406,7 +404,8 @@ struct net_device * __init atarilance_probe(int unit) | |||
406 | 404 | ||
407 | /* Derived from hwreg_present() in atari/config.c: */ | 405 | /* Derived from hwreg_present() in atari/config.c: */ |
408 | 406 | ||
409 | static int __init addr_accessible( volatile void *regp, int wordflag, int writeflag ) | 407 | static noinline int __init addr_accessible(volatile void *regp, int wordflag, |
408 | int writeflag) | ||
410 | { | 409 | { |
411 | int ret; | 410 | int ret; |
412 | long flags; | 411 | long flags; |
diff --git a/drivers/net/e100.c b/drivers/net/e100.c index 36ba6dc96acc..cdf3090a1885 100644 --- a/drivers/net/e100.c +++ b/drivers/net/e100.c | |||
@@ -2782,16 +2782,13 @@ static void __devexit e100_remove(struct pci_dev *pdev) | |||
2782 | } | 2782 | } |
2783 | } | 2783 | } |
2784 | 2784 | ||
2785 | #ifdef CONFIG_PM | ||
2786 | static int e100_suspend(struct pci_dev *pdev, pm_message_t state) | 2785 | static int e100_suspend(struct pci_dev *pdev, pm_message_t state) |
2787 | { | 2786 | { |
2788 | struct net_device *netdev = pci_get_drvdata(pdev); | 2787 | struct net_device *netdev = pci_get_drvdata(pdev); |
2789 | struct nic *nic = netdev_priv(netdev); | 2788 | struct nic *nic = netdev_priv(netdev); |
2790 | 2789 | ||
2791 | if (netif_running(netdev)) | 2790 | if (netif_running(netdev)) |
2792 | napi_disable(&nic->napi); | 2791 | e100_down(nic); |
2793 | del_timer_sync(&nic->watchdog); | ||
2794 | netif_carrier_off(nic->netdev); | ||
2795 | netif_device_detach(netdev); | 2792 | netif_device_detach(netdev); |
2796 | 2793 | ||
2797 | pci_save_state(pdev); | 2794 | pci_save_state(pdev); |
@@ -2804,14 +2801,13 @@ static int e100_suspend(struct pci_dev *pdev, pm_message_t state) | |||
2804 | pci_enable_wake(pdev, PCI_D3cold, 0); | 2801 | pci_enable_wake(pdev, PCI_D3cold, 0); |
2805 | } | 2802 | } |
2806 | 2803 | ||
2807 | free_irq(pdev->irq, netdev); | ||
2808 | |||
2809 | pci_disable_device(pdev); | 2804 | pci_disable_device(pdev); |
2810 | pci_set_power_state(pdev, PCI_D3hot); | 2805 | pci_set_power_state(pdev, PCI_D3hot); |
2811 | 2806 | ||
2812 | return 0; | 2807 | return 0; |
2813 | } | 2808 | } |
2814 | 2809 | ||
2810 | #ifdef CONFIG_PM | ||
2815 | static int e100_resume(struct pci_dev *pdev) | 2811 | static int e100_resume(struct pci_dev *pdev) |
2816 | { | 2812 | { |
2817 | struct net_device *netdev = pci_get_drvdata(pdev); | 2813 | struct net_device *netdev = pci_get_drvdata(pdev); |
@@ -2832,26 +2828,7 @@ static int e100_resume(struct pci_dev *pdev) | |||
2832 | 2828 | ||
2833 | static void e100_shutdown(struct pci_dev *pdev) | 2829 | static void e100_shutdown(struct pci_dev *pdev) |
2834 | { | 2830 | { |
2835 | struct net_device *netdev = pci_get_drvdata(pdev); | 2831 | e100_suspend(pdev, PMSG_SUSPEND); |
2836 | struct nic *nic = netdev_priv(netdev); | ||
2837 | |||
2838 | if (netif_running(netdev)) | ||
2839 | napi_disable(&nic->napi); | ||
2840 | del_timer_sync(&nic->watchdog); | ||
2841 | netif_carrier_off(nic->netdev); | ||
2842 | |||
2843 | if ((nic->flags & wol_magic) | e100_asf(nic)) { | ||
2844 | pci_enable_wake(pdev, PCI_D3hot, 1); | ||
2845 | pci_enable_wake(pdev, PCI_D3cold, 1); | ||
2846 | } else { | ||
2847 | pci_enable_wake(pdev, PCI_D3hot, 0); | ||
2848 | pci_enable_wake(pdev, PCI_D3cold, 0); | ||
2849 | } | ||
2850 | |||
2851 | free_irq(pdev->irq, netdev); | ||
2852 | |||
2853 | pci_disable_device(pdev); | ||
2854 | pci_set_power_state(pdev, PCI_D3hot); | ||
2855 | } | 2832 | } |
2856 | 2833 | ||
2857 | /* ------------------ PCI Error Recovery infrastructure -------------- */ | 2834 | /* ------------------ PCI Error Recovery infrastructure -------------- */ |
diff --git a/drivers/net/ixgbe/ixgbe_main.c b/drivers/net/ixgbe/ixgbe_main.c index 23d0a4afe0e1..c2095ce531c9 100644 --- a/drivers/net/ixgbe/ixgbe_main.c +++ b/drivers/net/ixgbe/ixgbe_main.c | |||
@@ -2133,7 +2133,7 @@ static void ixgbe_watchdog(unsigned long data) | |||
2133 | (link_speed == IXGBE_LINK_SPEED_10GB_FULL ? | 2133 | (link_speed == IXGBE_LINK_SPEED_10GB_FULL ? |
2134 | "10 Gbps" : | 2134 | "10 Gbps" : |
2135 | (link_speed == IXGBE_LINK_SPEED_1GB_FULL ? | 2135 | (link_speed == IXGBE_LINK_SPEED_1GB_FULL ? |
2136 | "1 Gpbs" : "unknown speed")), | 2136 | "1 Gbps" : "unknown speed")), |
2137 | ((FLOW_RX && FLOW_TX) ? "RX/TX" : | 2137 | ((FLOW_RX && FLOW_TX) ? "RX/TX" : |
2138 | (FLOW_RX ? "RX" : | 2138 | (FLOW_RX ? "RX" : |
2139 | (FLOW_TX ? "TX" : "None")))); | 2139 | (FLOW_TX ? "TX" : "None")))); |
diff --git a/drivers/net/mv643xx_eth.c b/drivers/net/mv643xx_eth.c index b528ce77c406..771139e283af 100644 --- a/drivers/net/mv643xx_eth.c +++ b/drivers/net/mv643xx_eth.c | |||
@@ -2104,6 +2104,7 @@ MODULE_LICENSE("GPL"); | |||
2104 | MODULE_AUTHOR( "Rabeeh Khoury, Assaf Hoffman, Matthew Dharm, Manish Lachwani" | 2104 | MODULE_AUTHOR( "Rabeeh Khoury, Assaf Hoffman, Matthew Dharm, Manish Lachwani" |
2105 | " and Dale Farnsworth"); | 2105 | " and Dale Farnsworth"); |
2106 | MODULE_DESCRIPTION("Ethernet driver for Marvell MV643XX"); | 2106 | MODULE_DESCRIPTION("Ethernet driver for Marvell MV643XX"); |
2107 | MODULE_ALIAS("platform:mv643xx_eth"); | ||
2107 | 2108 | ||
2108 | /* | 2109 | /* |
2109 | * The second part is the low level driver of the gigE ethernet ports. | 2110 | * The second part is the low level driver of the gigE ethernet ports. |
diff --git a/drivers/net/pcmcia/axnet_cs.c b/drivers/net/pcmcia/axnet_cs.c index e8a63e483a2b..ce95c5d168fe 100644 --- a/drivers/net/pcmcia/axnet_cs.c +++ b/drivers/net/pcmcia/axnet_cs.c | |||
@@ -1268,7 +1268,7 @@ static irqreturn_t ax_interrupt(int irq, void *dev_id) | |||
1268 | } | 1268 | } |
1269 | } | 1269 | } |
1270 | 1270 | ||
1271 | if (interrupts && ei_debug) | 1271 | if (interrupts && ei_debug > 3) |
1272 | { | 1272 | { |
1273 | handled = 1; | 1273 | handled = 1; |
1274 | if (nr_serviced >= MAX_SERVICE) | 1274 | if (nr_serviced >= MAX_SERVICE) |
diff --git a/drivers/net/phy/Kconfig b/drivers/net/phy/Kconfig index f4ca0591231d..3ac8529bb92c 100644 --- a/drivers/net/phy/Kconfig +++ b/drivers/net/phy/Kconfig | |||
@@ -67,6 +67,7 @@ config REALTEK_PHY | |||
67 | 67 | ||
68 | config FIXED_PHY | 68 | config FIXED_PHY |
69 | bool "Driver for MDIO Bus/PHY emulation with fixed speed/link PHYs" | 69 | bool "Driver for MDIO Bus/PHY emulation with fixed speed/link PHYs" |
70 | depends on PHYLIB=y | ||
70 | ---help--- | 71 | ---help--- |
71 | Adds the platform "fixed" MDIO Bus to cover the boards that use | 72 | Adds the platform "fixed" MDIO Bus to cover the boards that use |
72 | PHYs that are not connected to the real MDIO bus. | 73 | PHYs that are not connected to the real MDIO bus. |
diff --git a/drivers/net/phy/davicom.c b/drivers/net/phy/davicom.c index 7ed632db00d7..d926168bc780 100644 --- a/drivers/net/phy/davicom.c +++ b/drivers/net/phy/davicom.c | |||
@@ -37,6 +37,7 @@ | |||
37 | 37 | ||
38 | #define MII_DM9161_SCR 0x10 | 38 | #define MII_DM9161_SCR 0x10 |
39 | #define MII_DM9161_SCR_INIT 0x0610 | 39 | #define MII_DM9161_SCR_INIT 0x0610 |
40 | #define MII_DM9161_SCR_RMII 0x0100 | ||
40 | 41 | ||
41 | /* DM9161 Interrupt Register */ | 42 | /* DM9161 Interrupt Register */ |
42 | #define MII_DM9161_INTR 0x15 | 43 | #define MII_DM9161_INTR 0x15 |
@@ -103,7 +104,7 @@ static int dm9161_config_aneg(struct phy_device *phydev) | |||
103 | 104 | ||
104 | static int dm9161_config_init(struct phy_device *phydev) | 105 | static int dm9161_config_init(struct phy_device *phydev) |
105 | { | 106 | { |
106 | int err; | 107 | int err, temp; |
107 | 108 | ||
108 | /* Isolate the PHY */ | 109 | /* Isolate the PHY */ |
109 | err = phy_write(phydev, MII_BMCR, BMCR_ISOLATE); | 110 | err = phy_write(phydev, MII_BMCR, BMCR_ISOLATE); |
@@ -111,9 +112,19 @@ static int dm9161_config_init(struct phy_device *phydev) | |||
111 | if (err < 0) | 112 | if (err < 0) |
112 | return err; | 113 | return err; |
113 | 114 | ||
114 | /* Do not bypass the scrambler/descrambler */ | 115 | switch (phydev->interface) { |
115 | err = phy_write(phydev, MII_DM9161_SCR, MII_DM9161_SCR_INIT); | 116 | case PHY_INTERFACE_MODE_MII: |
117 | temp = MII_DM9161_SCR_INIT; | ||
118 | break; | ||
119 | case PHY_INTERFACE_MODE_RMII: | ||
120 | temp = MII_DM9161_SCR_INIT | MII_DM9161_SCR_RMII; | ||
121 | break; | ||
122 | default: | ||
123 | return -EINVAL; | ||
124 | } | ||
116 | 125 | ||
126 | /* Do not bypass the scrambler/descrambler */ | ||
127 | err = phy_write(phydev, MII_DM9161_SCR, temp); | ||
117 | if (err < 0) | 128 | if (err < 0) |
118 | return err; | 129 | return err; |
119 | 130 | ||
diff --git a/drivers/net/pppol2tp.c b/drivers/net/pppol2tp.c index e0b072d9fdb7..86e5dba079fe 100644 --- a/drivers/net/pppol2tp.c +++ b/drivers/net/pppol2tp.c | |||
@@ -455,6 +455,7 @@ static void pppol2tp_recv_dequeue(struct pppol2tp_session *session) | |||
455 | skb_queue_len(&session->reorder_q)); | 455 | skb_queue_len(&session->reorder_q)); |
456 | __skb_unlink(skb, &session->reorder_q); | 456 | __skb_unlink(skb, &session->reorder_q); |
457 | kfree_skb(skb); | 457 | kfree_skb(skb); |
458 | sock_put(session->sock); | ||
458 | continue; | 459 | continue; |
459 | } | 460 | } |
460 | 461 | ||
@@ -1110,6 +1111,8 @@ static void pppol2tp_tunnel_closeall(struct pppol2tp_tunnel *tunnel) | |||
1110 | for (hash = 0; hash < PPPOL2TP_HASH_SIZE; hash++) { | 1111 | for (hash = 0; hash < PPPOL2TP_HASH_SIZE; hash++) { |
1111 | again: | 1112 | again: |
1112 | hlist_for_each_safe(walk, tmp, &tunnel->session_hlist[hash]) { | 1113 | hlist_for_each_safe(walk, tmp, &tunnel->session_hlist[hash]) { |
1114 | struct sk_buff *skb; | ||
1115 | |||
1113 | session = hlist_entry(walk, struct pppol2tp_session, hlist); | 1116 | session = hlist_entry(walk, struct pppol2tp_session, hlist); |
1114 | 1117 | ||
1115 | sk = session->sock; | 1118 | sk = session->sock; |
@@ -1138,7 +1141,10 @@ again: | |||
1138 | /* Purge any queued data */ | 1141 | /* Purge any queued data */ |
1139 | skb_queue_purge(&sk->sk_receive_queue); | 1142 | skb_queue_purge(&sk->sk_receive_queue); |
1140 | skb_queue_purge(&sk->sk_write_queue); | 1143 | skb_queue_purge(&sk->sk_write_queue); |
1141 | skb_queue_purge(&session->reorder_q); | 1144 | while ((skb = skb_dequeue(&session->reorder_q))) { |
1145 | kfree_skb(skb); | ||
1146 | sock_put(sk); | ||
1147 | } | ||
1142 | 1148 | ||
1143 | release_sock(sk); | 1149 | release_sock(sk); |
1144 | sock_put(sk); | 1150 | sock_put(sk); |
diff --git a/drivers/net/s2io.c b/drivers/net/s2io.c index 6179a0a2032c..c72787adeba3 100644 --- a/drivers/net/s2io.c +++ b/drivers/net/s2io.c | |||
@@ -1088,7 +1088,7 @@ static int s2io_print_pci_mode(struct s2io_nic *nic) | |||
1088 | * '-1' on failure | 1088 | * '-1' on failure |
1089 | */ | 1089 | */ |
1090 | 1090 | ||
1091 | int init_tti(struct s2io_nic *nic, int link) | 1091 | static int init_tti(struct s2io_nic *nic, int link) |
1092 | { | 1092 | { |
1093 | struct XENA_dev_config __iomem *bar0 = nic->bar0; | 1093 | struct XENA_dev_config __iomem *bar0 = nic->bar0; |
1094 | register u64 val64 = 0; | 1094 | register u64 val64 = 0; |
diff --git a/drivers/net/tulip/de2104x.c b/drivers/net/tulip/de2104x.c index 77d9dd7ea34f..567c62757e9d 100644 --- a/drivers/net/tulip/de2104x.c +++ b/drivers/net/tulip/de2104x.c | |||
@@ -910,7 +910,8 @@ static void de_set_media (struct de_private *de) | |||
910 | unsigned media = de->media_type; | 910 | unsigned media = de->media_type; |
911 | u32 macmode = dr32(MacMode); | 911 | u32 macmode = dr32(MacMode); |
912 | 912 | ||
913 | BUG_ON(de_is_running(de)); | 913 | if (de_is_running(de)) |
914 | printk(KERN_WARNING "%s: chip is running while changing media!\n", de->dev->name); | ||
914 | 915 | ||
915 | if (de->de21040) | 916 | if (de->de21040) |
916 | dw32(CSR11, FULL_DUPLEX_MAGIC); | 917 | dw32(CSR11, FULL_DUPLEX_MAGIC); |
diff --git a/drivers/net/tun.c b/drivers/net/tun.c index 038c1ef94d2e..7b816a032957 100644 --- a/drivers/net/tun.c +++ b/drivers/net/tun.c | |||
@@ -663,7 +663,11 @@ static int tun_chr_ioctl(struct inode *inode, struct file *file, | |||
663 | case SIOCSIFHWADDR: | 663 | case SIOCSIFHWADDR: |
664 | { | 664 | { |
665 | /* try to set the actual net device's hw address */ | 665 | /* try to set the actual net device's hw address */ |
666 | int ret = dev_set_mac_address(tun->dev, &ifr.ifr_hwaddr); | 666 | int ret; |
667 | |||
668 | rtnl_lock(); | ||
669 | ret = dev_set_mac_address(tun->dev, &ifr.ifr_hwaddr); | ||
670 | rtnl_unlock(); | ||
667 | 671 | ||
668 | if (ret == 0) { | 672 | if (ret == 0) { |
669 | /** Set the character device's hardware address. This is used when | 673 | /** Set the character device's hardware address. This is used when |
diff --git a/drivers/net/wireless/b43legacy/main.c b/drivers/net/wireless/b43legacy/main.c index 82953dd0bae0..f518e796bdec 100644 --- a/drivers/net/wireless/b43legacy/main.c +++ b/drivers/net/wireless/b43legacy/main.c | |||
@@ -3870,7 +3870,7 @@ static void b43legacy_print_driverinfo(void) | |||
3870 | #ifdef CONFIG_B43LEGACY_DMA | 3870 | #ifdef CONFIG_B43LEGACY_DMA |
3871 | feat_dma = "D"; | 3871 | feat_dma = "D"; |
3872 | #endif | 3872 | #endif |
3873 | printk(KERN_INFO "Broadcom 43xx driver loaded " | 3873 | printk(KERN_INFO "Broadcom 43xx-legacy driver loaded " |
3874 | "[ Features: %s%s%s%s%s, Firmware-ID: " | 3874 | "[ Features: %s%s%s%s%s, Firmware-ID: " |
3875 | B43legacy_SUPPORTED_FIRMWARE_ID " ]\n", | 3875 | B43legacy_SUPPORTED_FIRMWARE_ID " ]\n", |
3876 | feat_pci, feat_leds, feat_rfkill, feat_pio, feat_dma); | 3876 | feat_pci, feat_leds, feat_rfkill, feat_pio, feat_dma); |
diff --git a/drivers/net/wireless/libertas/cmdresp.c b/drivers/net/wireless/libertas/cmdresp.c index a0a5dbe81b3b..5d90b83f28eb 100644 --- a/drivers/net/wireless/libertas/cmdresp.c +++ b/drivers/net/wireless/libertas/cmdresp.c | |||
@@ -562,9 +562,7 @@ int lbs_process_rx_command(struct lbs_private *priv) | |||
562 | } | 562 | } |
563 | 563 | ||
564 | resp = (void *)priv->upld_buf; | 564 | resp = (void *)priv->upld_buf; |
565 | 565 | curcmd = le16_to_cpu(priv->cur_cmd->cmdbuf->command); | |
566 | curcmd = le16_to_cpu(resp->command); | ||
567 | |||
568 | respcmd = le16_to_cpu(resp->command); | 566 | respcmd = le16_to_cpu(resp->command); |
569 | result = le16_to_cpu(resp->result); | 567 | result = le16_to_cpu(resp->result); |
570 | 568 | ||
@@ -572,9 +570,9 @@ int lbs_process_rx_command(struct lbs_private *priv) | |||
572 | respcmd, le16_to_cpu(resp->seqnum), priv->upld_len, jiffies); | 570 | respcmd, le16_to_cpu(resp->seqnum), priv->upld_len, jiffies); |
573 | lbs_deb_hex(LBS_DEB_CMD, "CMD_RESP", (void *) resp, priv->upld_len); | 571 | lbs_deb_hex(LBS_DEB_CMD, "CMD_RESP", (void *) resp, priv->upld_len); |
574 | 572 | ||
575 | if (resp->seqnum != resp->seqnum) { | 573 | if (resp->seqnum != priv->cur_cmd->cmdbuf->seqnum) { |
576 | lbs_pr_info("Received CMD_RESP with invalid sequence %d (expected %d)\n", | 574 | lbs_pr_info("Received CMD_RESP with invalid sequence %d (expected %d)\n", |
577 | le16_to_cpu(resp->seqnum), le16_to_cpu(resp->seqnum)); | 575 | le16_to_cpu(resp->seqnum), le16_to_cpu(priv->cur_cmd->cmdbuf->seqnum)); |
578 | spin_unlock_irqrestore(&priv->driver_lock, flags); | 576 | spin_unlock_irqrestore(&priv->driver_lock, flags); |
579 | ret = -1; | 577 | ret = -1; |
580 | goto done; | 578 | goto done; |
diff --git a/drivers/net/wireless/p54common.c b/drivers/net/wireless/p54common.c index 84cc000e71aa..63f9badf3f52 100644 --- a/drivers/net/wireless/p54common.c +++ b/drivers/net/wireless/p54common.c | |||
@@ -206,18 +206,23 @@ int p54_parse_eeprom(struct ieee80211_hw *dev, void *eeprom, int len) | |||
206 | struct p54_common *priv = dev->priv; | 206 | struct p54_common *priv = dev->priv; |
207 | struct eeprom_pda_wrap *wrap = NULL; | 207 | struct eeprom_pda_wrap *wrap = NULL; |
208 | struct pda_entry *entry; | 208 | struct pda_entry *entry; |
209 | int i = 0; | ||
210 | unsigned int data_len, entry_len; | 209 | unsigned int data_len, entry_len; |
211 | void *tmp; | 210 | void *tmp; |
212 | int err; | 211 | int err; |
212 | u8 *end = (u8 *)eeprom + len; | ||
213 | 213 | ||
214 | wrap = (struct eeprom_pda_wrap *) eeprom; | 214 | wrap = (struct eeprom_pda_wrap *) eeprom; |
215 | entry = (void *)wrap->data + wrap->len; | 215 | entry = (void *)wrap->data + le16_to_cpu(wrap->len); |
216 | i += 2; | 216 | |
217 | i += le16_to_cpu(entry->len)*2; | 217 | /* verify that at least the entry length/code fits */ |
218 | while (i < len) { | 218 | while ((u8 *)entry <= end - sizeof(*entry)) { |
219 | entry_len = le16_to_cpu(entry->len); | 219 | entry_len = le16_to_cpu(entry->len); |
220 | data_len = ((entry_len - 1) << 1); | 220 | data_len = ((entry_len - 1) << 1); |
221 | |||
222 | /* abort if entry exceeds whole structure */ | ||
223 | if ((u8 *)entry + sizeof(*entry) + data_len > end) | ||
224 | break; | ||
225 | |||
221 | switch (le16_to_cpu(entry->code)) { | 226 | switch (le16_to_cpu(entry->code)) { |
222 | case PDR_MAC_ADDRESS: | 227 | case PDR_MAC_ADDRESS: |
223 | SET_IEEE80211_PERM_ADDR(dev, entry->data); | 228 | SET_IEEE80211_PERM_ADDR(dev, entry->data); |
@@ -289,7 +294,8 @@ int p54_parse_eeprom(struct ieee80211_hw *dev, void *eeprom, int len) | |||
289 | priv->version = *(u8 *)(entry->data + 1); | 294 | priv->version = *(u8 *)(entry->data + 1); |
290 | break; | 295 | break; |
291 | case PDR_END: | 296 | case PDR_END: |
292 | i = len; | 297 | /* make it overrun */ |
298 | entry_len = len; | ||
293 | break; | 299 | break; |
294 | default: | 300 | default: |
295 | printk(KERN_INFO "p54: unknown eeprom code : 0x%x\n", | 301 | printk(KERN_INFO "p54: unknown eeprom code : 0x%x\n", |
@@ -298,8 +304,6 @@ int p54_parse_eeprom(struct ieee80211_hw *dev, void *eeprom, int len) | |||
298 | } | 304 | } |
299 | 305 | ||
300 | entry = (void *)entry + (entry_len + 1)*2; | 306 | entry = (void *)entry + (entry_len + 1)*2; |
301 | i += 2; | ||
302 | i += entry_len*2; | ||
303 | } | 307 | } |
304 | 308 | ||
305 | if (!priv->iq_autocal || !priv->output_limit || !priv->curve_data) { | 309 | if (!priv->iq_autocal || !priv->output_limit || !priv->curve_data) { |
diff --git a/drivers/net/wireless/p54common.h b/drivers/net/wireless/p54common.h index dc9f4cef585e..c15b56e1d75e 100644 --- a/drivers/net/wireless/p54common.h +++ b/drivers/net/wireless/p54common.h | |||
@@ -53,10 +53,10 @@ struct pda_entry { | |||
53 | } __attribute__ ((packed)); | 53 | } __attribute__ ((packed)); |
54 | 54 | ||
55 | struct eeprom_pda_wrap { | 55 | struct eeprom_pda_wrap { |
56 | u32 magic; | 56 | __le32 magic; |
57 | u16 pad; | 57 | __le16 pad; |
58 | u16 len; | 58 | __le16 len; |
59 | u32 arm_opcode; | 59 | __le32 arm_opcode; |
60 | u8 data[0]; | 60 | u8 data[0]; |
61 | } __attribute__ ((packed)); | 61 | } __attribute__ ((packed)); |
62 | 62 | ||
diff --git a/drivers/net/wireless/rndis_wlan.c b/drivers/net/wireless/rndis_wlan.c index d9460aed1f22..10b776c1adc5 100644 --- a/drivers/net/wireless/rndis_wlan.c +++ b/drivers/net/wireless/rndis_wlan.c | |||
@@ -260,7 +260,7 @@ struct NDIS_802_11_KEY { | |||
260 | __le32 KeyLength; | 260 | __le32 KeyLength; |
261 | u8 Bssid[6]; | 261 | u8 Bssid[6]; |
262 | u8 Padding[6]; | 262 | u8 Padding[6]; |
263 | __le64 KeyRSC; | 263 | u8 KeyRSC[8]; |
264 | u8 KeyMaterial[32]; | 264 | u8 KeyMaterial[32]; |
265 | } __attribute__((packed)); | 265 | } __attribute__((packed)); |
266 | 266 | ||
@@ -1508,7 +1508,7 @@ static int rndis_iw_set_encode_ext(struct net_device *dev, | |||
1508 | struct usbnet *usbdev = dev->priv; | 1508 | struct usbnet *usbdev = dev->priv; |
1509 | struct rndis_wext_private *priv = get_rndis_wext_priv(usbdev); | 1509 | struct rndis_wext_private *priv = get_rndis_wext_priv(usbdev); |
1510 | struct NDIS_802_11_KEY ndis_key; | 1510 | struct NDIS_802_11_KEY ndis_key; |
1511 | int i, keyidx, ret; | 1511 | int keyidx, ret; |
1512 | u8 *addr; | 1512 | u8 *addr; |
1513 | 1513 | ||
1514 | keyidx = wrqu->encoding.flags & IW_ENCODE_INDEX; | 1514 | keyidx = wrqu->encoding.flags & IW_ENCODE_INDEX; |
@@ -1543,9 +1543,7 @@ static int rndis_iw_set_encode_ext(struct net_device *dev, | |||
1543 | ndis_key.KeyIndex = cpu_to_le32(keyidx); | 1543 | ndis_key.KeyIndex = cpu_to_le32(keyidx); |
1544 | 1544 | ||
1545 | if (ext->ext_flags & IW_ENCODE_EXT_RX_SEQ_VALID) { | 1545 | if (ext->ext_flags & IW_ENCODE_EXT_RX_SEQ_VALID) { |
1546 | for (i = 0; i < 6; i++) | 1546 | memcpy(ndis_key.KeyRSC, ext->rx_seq, 6); |
1547 | ndis_key.KeyRSC |= | ||
1548 | cpu_to_le64(ext->rx_seq[i] << (i * 8)); | ||
1549 | ndis_key.KeyIndex |= cpu_to_le32(1 << 29); | 1547 | ndis_key.KeyIndex |= cpu_to_le32(1 << 29); |
1550 | } | 1548 | } |
1551 | 1549 | ||
diff --git a/drivers/ssb/driver_pcicore.c b/drivers/ssb/driver_pcicore.c index 07ab48d9ceab..74b9a8aea52b 100644 --- a/drivers/ssb/driver_pcicore.c +++ b/drivers/ssb/driver_pcicore.c | |||
@@ -111,7 +111,10 @@ static void __init ssb_fixup_pcibridge(struct pci_dev *dev) | |||
111 | 111 | ||
112 | /* Enable PCI bridge bus mastering and memory space */ | 112 | /* Enable PCI bridge bus mastering and memory space */ |
113 | pci_set_master(dev); | 113 | pci_set_master(dev); |
114 | pcibios_enable_device(dev, ~0); | 114 | if (pcibios_enable_device(dev, ~0) < 0) { |
115 | ssb_printk(KERN_ERR "PCI: SSB bridge enable failed\n"); | ||
116 | return; | ||
117 | } | ||
115 | 118 | ||
116 | /* Enable PCI bridge BAR1 prefetch and burst */ | 119 | /* Enable PCI bridge BAR1 prefetch and burst */ |
117 | pci_write_config_dword(dev, SSB_BAR1_CONTROL, 3); | 120 | pci_write_config_dword(dev, SSB_BAR1_CONTROL, 3); |
diff --git a/include/linux/netpoll.h b/include/linux/netpoll.h index a0525a1f4715..e3d79593fb3a 100644 --- a/include/linux/netpoll.h +++ b/include/linux/netpoll.h | |||
@@ -25,6 +25,7 @@ struct netpoll { | |||
25 | 25 | ||
26 | struct netpoll_info { | 26 | struct netpoll_info { |
27 | atomic_t refcnt; | 27 | atomic_t refcnt; |
28 | int rx_flags; | ||
28 | spinlock_t rx_lock; | 29 | spinlock_t rx_lock; |
29 | struct netpoll *rx_np; /* netpoll that registered an rx_hook */ | 30 | struct netpoll *rx_np; /* netpoll that registered an rx_hook */ |
30 | struct sk_buff_head arp_tx; /* list of arp requests to reply to */ | 31 | struct sk_buff_head arp_tx; /* list of arp requests to reply to */ |
@@ -50,12 +51,12 @@ static inline int netpoll_rx(struct sk_buff *skb) | |||
50 | unsigned long flags; | 51 | unsigned long flags; |
51 | int ret = 0; | 52 | int ret = 0; |
52 | 53 | ||
53 | if (!npinfo || !npinfo->rx_np) | 54 | if (!npinfo || (!npinfo->rx_np && !npinfo->rx_flags)) |
54 | return 0; | 55 | return 0; |
55 | 56 | ||
56 | spin_lock_irqsave(&npinfo->rx_lock, flags); | 57 | spin_lock_irqsave(&npinfo->rx_lock, flags); |
57 | /* check rx_np again with the lock held */ | 58 | /* check rx_flags again with the lock held */ |
58 | if (npinfo->rx_np && __netpoll_rx(skb)) | 59 | if (npinfo->rx_flags && __netpoll_rx(skb)) |
59 | ret = 1; | 60 | ret = 1; |
60 | spin_unlock_irqrestore(&npinfo->rx_lock, flags); | 61 | spin_unlock_irqrestore(&npinfo->rx_lock, flags); |
61 | 62 | ||
diff --git a/include/net/inet_sock.h b/include/net/inet_sock.h index 70013c5f4e59..89cd011edb99 100644 --- a/include/net/inet_sock.h +++ b/include/net/inet_sock.h | |||
@@ -175,7 +175,8 @@ extern void build_ehash_secret(void); | |||
175 | static inline unsigned int inet_ehashfn(const __be32 laddr, const __u16 lport, | 175 | static inline unsigned int inet_ehashfn(const __be32 laddr, const __u16 lport, |
176 | const __be32 faddr, const __be16 fport) | 176 | const __be32 faddr, const __be16 fport) |
177 | { | 177 | { |
178 | return jhash_2words((__force __u32) laddr ^ (__force __u32) faddr, | 178 | return jhash_3words((__force __u32) laddr, |
179 | (__force __u32) faddr, | ||
179 | ((__u32) lport) << 16 | (__force __u32)fport, | 180 | ((__u32) lport) << 16 | (__force __u32)fport, |
180 | inet_ehash_secret); | 181 | inet_ehash_secret); |
181 | } | 182 | } |
diff --git a/net/bluetooth/l2cap.c b/net/bluetooth/l2cap.c index 7c5459c8e8ef..34f8bf98bc05 100644 --- a/net/bluetooth/l2cap.c +++ b/net/bluetooth/l2cap.c | |||
@@ -417,7 +417,8 @@ static void l2cap_conn_del(struct hci_conn *hcon, int err) | |||
417 | l2cap_sock_kill(sk); | 417 | l2cap_sock_kill(sk); |
418 | } | 418 | } |
419 | 419 | ||
420 | del_timer_sync(&conn->info_timer); | 420 | if (conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_SENT) |
421 | del_timer_sync(&conn->info_timer); | ||
421 | 422 | ||
422 | hcon->l2cap_data = NULL; | 423 | hcon->l2cap_data = NULL; |
423 | kfree(conn); | 424 | kfree(conn); |
diff --git a/net/core/neighbour.c b/net/core/neighbour.c index 31b6567f0b6a..23c0a10c0c37 100644 --- a/net/core/neighbour.c +++ b/net/core/neighbour.c | |||
@@ -839,7 +839,7 @@ static void neigh_timer_handler(unsigned long arg) | |||
839 | struct sk_buff *skb = skb_peek(&neigh->arp_queue); | 839 | struct sk_buff *skb = skb_peek(&neigh->arp_queue); |
840 | /* keep skb alive even if arp_queue overflows */ | 840 | /* keep skb alive even if arp_queue overflows */ |
841 | if (skb) | 841 | if (skb) |
842 | skb_get(skb); | 842 | skb = skb_copy(skb, GFP_ATOMIC); |
843 | write_unlock(&neigh->lock); | 843 | write_unlock(&neigh->lock); |
844 | neigh->ops->solicit(neigh, skb); | 844 | neigh->ops->solicit(neigh, skb); |
845 | atomic_inc(&neigh->probes); | 845 | atomic_inc(&neigh->probes); |
diff --git a/net/core/netpoll.c b/net/core/netpoll.c index 7ae98659d79d..d0c8bf585f06 100644 --- a/net/core/netpoll.c +++ b/net/core/netpoll.c | |||
@@ -39,6 +39,8 @@ static struct sk_buff_head skb_pool; | |||
39 | static atomic_t trapped; | 39 | static atomic_t trapped; |
40 | 40 | ||
41 | #define USEC_PER_POLL 50 | 41 | #define USEC_PER_POLL 50 |
42 | #define NETPOLL_RX_ENABLED 1 | ||
43 | #define NETPOLL_RX_DROP 2 | ||
42 | 44 | ||
43 | #define MAX_SKB_SIZE \ | 45 | #define MAX_SKB_SIZE \ |
44 | (MAX_UDP_CHUNK + sizeof(struct udphdr) + \ | 46 | (MAX_UDP_CHUNK + sizeof(struct udphdr) + \ |
@@ -126,11 +128,13 @@ static int poll_one_napi(struct netpoll_info *npinfo, | |||
126 | if (!test_bit(NAPI_STATE_SCHED, &napi->state)) | 128 | if (!test_bit(NAPI_STATE_SCHED, &napi->state)) |
127 | return budget; | 129 | return budget; |
128 | 130 | ||
131 | npinfo->rx_flags |= NETPOLL_RX_DROP; | ||
129 | atomic_inc(&trapped); | 132 | atomic_inc(&trapped); |
130 | 133 | ||
131 | work = napi->poll(napi, budget); | 134 | work = napi->poll(napi, budget); |
132 | 135 | ||
133 | atomic_dec(&trapped); | 136 | atomic_dec(&trapped); |
137 | npinfo->rx_flags &= ~NETPOLL_RX_DROP; | ||
134 | 138 | ||
135 | return budget - work; | 139 | return budget - work; |
136 | } | 140 | } |
@@ -470,7 +474,7 @@ int __netpoll_rx(struct sk_buff *skb) | |||
470 | if (skb->dev->type != ARPHRD_ETHER) | 474 | if (skb->dev->type != ARPHRD_ETHER) |
471 | goto out; | 475 | goto out; |
472 | 476 | ||
473 | /* if receive ARP during middle of NAPI poll, then queue */ | 477 | /* check if netpoll clients need ARP */ |
474 | if (skb->protocol == htons(ETH_P_ARP) && | 478 | if (skb->protocol == htons(ETH_P_ARP) && |
475 | atomic_read(&trapped)) { | 479 | atomic_read(&trapped)) { |
476 | skb_queue_tail(&npi->arp_tx, skb); | 480 | skb_queue_tail(&npi->arp_tx, skb); |
@@ -532,9 +536,6 @@ int __netpoll_rx(struct sk_buff *skb) | |||
532 | return 1; | 536 | return 1; |
533 | 537 | ||
534 | out: | 538 | out: |
535 | /* If packet received while already in poll then just | ||
536 | * silently drop. | ||
537 | */ | ||
538 | if (atomic_read(&trapped)) { | 539 | if (atomic_read(&trapped)) { |
539 | kfree_skb(skb); | 540 | kfree_skb(skb); |
540 | return 1; | 541 | return 1; |
@@ -673,6 +674,7 @@ int netpoll_setup(struct netpoll *np) | |||
673 | goto release; | 674 | goto release; |
674 | } | 675 | } |
675 | 676 | ||
677 | npinfo->rx_flags = 0; | ||
676 | npinfo->rx_np = NULL; | 678 | npinfo->rx_np = NULL; |
677 | 679 | ||
678 | spin_lock_init(&npinfo->rx_lock); | 680 | spin_lock_init(&npinfo->rx_lock); |
@@ -754,6 +756,7 @@ int netpoll_setup(struct netpoll *np) | |||
754 | 756 | ||
755 | if (np->rx_hook) { | 757 | if (np->rx_hook) { |
756 | spin_lock_irqsave(&npinfo->rx_lock, flags); | 758 | spin_lock_irqsave(&npinfo->rx_lock, flags); |
759 | npinfo->rx_flags |= NETPOLL_RX_ENABLED; | ||
757 | npinfo->rx_np = np; | 760 | npinfo->rx_np = np; |
758 | spin_unlock_irqrestore(&npinfo->rx_lock, flags); | 761 | spin_unlock_irqrestore(&npinfo->rx_lock, flags); |
759 | } | 762 | } |
@@ -795,6 +798,7 @@ void netpoll_cleanup(struct netpoll *np) | |||
795 | if (npinfo->rx_np == np) { | 798 | if (npinfo->rx_np == np) { |
796 | spin_lock_irqsave(&npinfo->rx_lock, flags); | 799 | spin_lock_irqsave(&npinfo->rx_lock, flags); |
797 | npinfo->rx_np = NULL; | 800 | npinfo->rx_np = NULL; |
801 | npinfo->rx_flags &= ~NETPOLL_RX_ENABLED; | ||
798 | spin_unlock_irqrestore(&npinfo->rx_lock, flags); | 802 | spin_unlock_irqrestore(&npinfo->rx_lock, flags); |
799 | } | 803 | } |
800 | 804 | ||
diff --git a/net/ipv4/Kconfig b/net/ipv4/Kconfig index efe3832c4ad8..5098fd2ff4d0 100644 --- a/net/ipv4/Kconfig +++ b/net/ipv4/Kconfig | |||
@@ -343,7 +343,7 @@ config INET_ESP | |||
343 | tristate "IP: ESP transformation" | 343 | tristate "IP: ESP transformation" |
344 | select XFRM | 344 | select XFRM |
345 | select CRYPTO | 345 | select CRYPTO |
346 | select CRYPTO_AEAD | 346 | select CRYPTO_AUTHENC |
347 | select CRYPTO_HMAC | 347 | select CRYPTO_HMAC |
348 | select CRYPTO_MD5 | 348 | select CRYPTO_MD5 |
349 | select CRYPTO_CBC | 349 | select CRYPTO_CBC |
diff --git a/net/ipv4/ipconfig.c b/net/ipv4/ipconfig.c index f84041d1f623..4afce0572806 100644 --- a/net/ipv4/ipconfig.c +++ b/net/ipv4/ipconfig.c | |||
@@ -750,9 +750,9 @@ static void __init ic_bootp_send_if(struct ic_device *d, unsigned long jiffies_d | |||
750 | printk("Unknown ARP type 0x%04x for device %s\n", dev->type, dev->name); | 750 | printk("Unknown ARP type 0x%04x for device %s\n", dev->type, dev->name); |
751 | b->htype = dev->type; /* can cause undefined behavior */ | 751 | b->htype = dev->type; /* can cause undefined behavior */ |
752 | } | 752 | } |
753 | |||
754 | /* server_ip and your_ip address are both already zero per RFC2131 */ | ||
753 | b->hlen = dev->addr_len; | 755 | b->hlen = dev->addr_len; |
754 | b->your_ip = NONE; | ||
755 | b->server_ip = NONE; | ||
756 | memcpy(b->hw_addr, dev->dev_addr, dev->addr_len); | 756 | memcpy(b->hw_addr, dev->dev_addr, dev->addr_len); |
757 | b->secs = htons(jiffies_diff / HZ); | 757 | b->secs = htons(jiffies_diff / HZ); |
758 | b->xid = d->xid; | 758 | b->xid = d->xid; |
diff --git a/net/ipv4/tcp_bic.c b/net/ipv4/tcp_bic.c index 5212ed9b0c98..7eb7636db0d0 100644 --- a/net/ipv4/tcp_bic.c +++ b/net/ipv4/tcp_bic.c | |||
@@ -1,12 +1,13 @@ | |||
1 | /* | 1 | /* |
2 | * Binary Increase Congestion control for TCP | 2 | * Binary Increase Congestion control for TCP |
3 | * | 3 | * Home page: |
4 | * http://netsrv.csc.ncsu.edu/twiki/bin/view/Main/BIC | ||
4 | * This is from the implementation of BICTCP in | 5 | * This is from the implementation of BICTCP in |
5 | * Lison-Xu, Kahaled Harfoush, and Injong Rhee. | 6 | * Lison-Xu, Kahaled Harfoush, and Injong Rhee. |
6 | * "Binary Increase Congestion Control for Fast, Long Distance | 7 | * "Binary Increase Congestion Control for Fast, Long Distance |
7 | * Networks" in InfoComm 2004 | 8 | * Networks" in InfoComm 2004 |
8 | * Available from: | 9 | * Available from: |
9 | * http://www.csc.ncsu.edu/faculty/rhee/export/bitcp.pdf | 10 | * http://netsrv.csc.ncsu.edu/export/bitcp.pdf |
10 | * | 11 | * |
11 | * Unless BIC is enabled and congestion window is large | 12 | * Unless BIC is enabled and congestion window is large |
12 | * this behaves the same as the original Reno. | 13 | * this behaves the same as the original Reno. |
diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c index 93e128c239c4..c4679f343675 100644 --- a/net/ipv4/tcp_input.c +++ b/net/ipv4/tcp_input.c | |||
@@ -1367,7 +1367,7 @@ static struct sk_buff *tcp_sacktag_walk(struct sk_buff *skb, struct sock *sk, | |||
1367 | * a normal way | 1367 | * a normal way |
1368 | */ | 1368 | */ |
1369 | static struct sk_buff *tcp_sacktag_skip(struct sk_buff *skb, struct sock *sk, | 1369 | static struct sk_buff *tcp_sacktag_skip(struct sk_buff *skb, struct sock *sk, |
1370 | u32 skip_to_seq) | 1370 | u32 skip_to_seq, int *fack_count) |
1371 | { | 1371 | { |
1372 | tcp_for_write_queue_from(skb, sk) { | 1372 | tcp_for_write_queue_from(skb, sk) { |
1373 | if (skb == tcp_send_head(sk)) | 1373 | if (skb == tcp_send_head(sk)) |
@@ -1375,6 +1375,8 @@ static struct sk_buff *tcp_sacktag_skip(struct sk_buff *skb, struct sock *sk, | |||
1375 | 1375 | ||
1376 | if (!before(TCP_SKB_CB(skb)->end_seq, skip_to_seq)) | 1376 | if (!before(TCP_SKB_CB(skb)->end_seq, skip_to_seq)) |
1377 | break; | 1377 | break; |
1378 | |||
1379 | *fack_count += tcp_skb_pcount(skb); | ||
1378 | } | 1380 | } |
1379 | return skb; | 1381 | return skb; |
1380 | } | 1382 | } |
@@ -1390,7 +1392,7 @@ static struct sk_buff *tcp_maybe_skipping_dsack(struct sk_buff *skb, | |||
1390 | return skb; | 1392 | return skb; |
1391 | 1393 | ||
1392 | if (before(next_dup->start_seq, skip_to_seq)) { | 1394 | if (before(next_dup->start_seq, skip_to_seq)) { |
1393 | skb = tcp_sacktag_skip(skb, sk, next_dup->start_seq); | 1395 | skb = tcp_sacktag_skip(skb, sk, next_dup->start_seq, fack_count); |
1394 | tcp_sacktag_walk(skb, sk, NULL, | 1396 | tcp_sacktag_walk(skb, sk, NULL, |
1395 | next_dup->start_seq, next_dup->end_seq, | 1397 | next_dup->start_seq, next_dup->end_seq, |
1396 | 1, fack_count, reord, flag); | 1398 | 1, fack_count, reord, flag); |
@@ -1537,7 +1539,8 @@ tcp_sacktag_write_queue(struct sock *sk, struct sk_buff *ack_skb, | |||
1537 | 1539 | ||
1538 | /* Head todo? */ | 1540 | /* Head todo? */ |
1539 | if (before(start_seq, cache->start_seq)) { | 1541 | if (before(start_seq, cache->start_seq)) { |
1540 | skb = tcp_sacktag_skip(skb, sk, start_seq); | 1542 | skb = tcp_sacktag_skip(skb, sk, start_seq, |
1543 | &fack_count); | ||
1541 | skb = tcp_sacktag_walk(skb, sk, next_dup, | 1544 | skb = tcp_sacktag_walk(skb, sk, next_dup, |
1542 | start_seq, | 1545 | start_seq, |
1543 | cache->start_seq, | 1546 | cache->start_seq, |
@@ -1565,7 +1568,8 @@ tcp_sacktag_write_queue(struct sock *sk, struct sk_buff *ack_skb, | |||
1565 | goto walk; | 1568 | goto walk; |
1566 | } | 1569 | } |
1567 | 1570 | ||
1568 | skb = tcp_sacktag_skip(skb, sk, cache->end_seq); | 1571 | skb = tcp_sacktag_skip(skb, sk, cache->end_seq, |
1572 | &fack_count); | ||
1569 | /* Check overlap against next cached too (past this one already) */ | 1573 | /* Check overlap against next cached too (past this one already) */ |
1570 | cache++; | 1574 | cache++; |
1571 | continue; | 1575 | continue; |
@@ -1577,7 +1581,7 @@ tcp_sacktag_write_queue(struct sock *sk, struct sk_buff *ack_skb, | |||
1577 | break; | 1581 | break; |
1578 | fack_count = tp->fackets_out; | 1582 | fack_count = tp->fackets_out; |
1579 | } | 1583 | } |
1580 | skb = tcp_sacktag_skip(skb, sk, start_seq); | 1584 | skb = tcp_sacktag_skip(skb, sk, start_seq, &fack_count); |
1581 | 1585 | ||
1582 | walk: | 1586 | walk: |
1583 | skb = tcp_sacktag_walk(skb, sk, next_dup, start_seq, end_seq, | 1587 | skb = tcp_sacktag_walk(skb, sk, next_dup, start_seq, end_seq, |
diff --git a/net/ipv6/Kconfig b/net/ipv6/Kconfig index 3ffb0323668c..58219dfffef8 100644 --- a/net/ipv6/Kconfig +++ b/net/ipv6/Kconfig | |||
@@ -85,7 +85,7 @@ config INET6_ESP | |||
85 | depends on IPV6 | 85 | depends on IPV6 |
86 | select XFRM | 86 | select XFRM |
87 | select CRYPTO | 87 | select CRYPTO |
88 | select CRYPTO_AEAD | 88 | select CRYPTO_AUTHENC |
89 | select CRYPTO_HMAC | 89 | select CRYPTO_HMAC |
90 | select CRYPTO_MD5 | 90 | select CRYPTO_MD5 |
91 | select CRYPTO_CBC | 91 | select CRYPTO_CBC |
diff --git a/net/irda/ircomm/ircomm_core.c b/net/irda/ircomm/ircomm_core.c index b825399fc160..6eef1f2a7553 100644 --- a/net/irda/ircomm/ircomm_core.c +++ b/net/irda/ircomm/ircomm_core.c | |||
@@ -76,9 +76,11 @@ static int __init ircomm_init(void) | |||
76 | 76 | ||
77 | #ifdef CONFIG_PROC_FS | 77 | #ifdef CONFIG_PROC_FS |
78 | { struct proc_dir_entry *ent; | 78 | { struct proc_dir_entry *ent; |
79 | ent = create_proc_entry("ircomm", 0, proc_irda); | 79 | ent = proc_create("ircomm", 0, proc_irda, &ircomm_proc_fops); |
80 | if (ent) | 80 | if (!ent) { |
81 | ent->proc_fops = &ircomm_proc_fops; | 81 | printk(KERN_ERR "ircomm_init: can't create /proc entry!\n"); |
82 | return -ENODEV; | ||
83 | } | ||
82 | } | 84 | } |
83 | #endif /* CONFIG_PROC_FS */ | 85 | #endif /* CONFIG_PROC_FS */ |
84 | 86 | ||
diff --git a/net/irda/irlan/irlan_common.c b/net/irda/irlan/irlan_common.c index a4b56e25a917..1eb4bbcb1c9e 100644 --- a/net/irda/irlan/irlan_common.c +++ b/net/irda/irlan/irlan_common.c | |||
@@ -128,13 +128,11 @@ static int __init irlan_init(void) | |||
128 | 128 | ||
129 | #ifdef CONFIG_PROC_FS | 129 | #ifdef CONFIG_PROC_FS |
130 | { struct proc_dir_entry *proc; | 130 | { struct proc_dir_entry *proc; |
131 | proc = create_proc_entry("irlan", 0, proc_irda); | 131 | proc = proc_create("irlan", 0, proc_irda, &irlan_fops); |
132 | if (!proc) { | 132 | if (!proc) { |
133 | printk(KERN_ERR "irlan_init: can't create /proc entry!\n"); | 133 | printk(KERN_ERR "irlan_init: can't create /proc entry!\n"); |
134 | return -ENODEV; | 134 | return -ENODEV; |
135 | } | 135 | } |
136 | |||
137 | proc->proc_fops = &irlan_fops; | ||
138 | } | 136 | } |
139 | #endif /* CONFIG_PROC_FS */ | 137 | #endif /* CONFIG_PROC_FS */ |
140 | 138 | ||
diff --git a/net/irda/irproc.c b/net/irda/irproc.c index cae24fbda966..88e80a312732 100644 --- a/net/irda/irproc.c +++ b/net/irda/irproc.c | |||
@@ -72,11 +72,9 @@ void __init irda_proc_register(void) | |||
72 | return; | 72 | return; |
73 | proc_irda->owner = THIS_MODULE; | 73 | proc_irda->owner = THIS_MODULE; |
74 | 74 | ||
75 | for (i=0; i<ARRAY_SIZE(irda_dirs); i++) { | 75 | for (i = 0; i < ARRAY_SIZE(irda_dirs); i++) |
76 | d = create_proc_entry(irda_dirs[i].name, 0, proc_irda); | 76 | d = proc_create(irda_dirs[i].name, 0, proc_irda, |
77 | if (d) | 77 | irda_dirs[i].fops); |
78 | d->proc_fops = irda_dirs[i].fops; | ||
79 | } | ||
80 | } | 78 | } |
81 | 79 | ||
82 | /* | 80 | /* |
diff --git a/net/iucv/iucv.c b/net/iucv/iucv.c index 2753b0c448f3..d764f4c1b7e4 100644 --- a/net/iucv/iucv.c +++ b/net/iucv/iucv.c | |||
@@ -621,7 +621,6 @@ static int iucv_sever_pathid(u16 pathid, u8 userdata[16]) | |||
621 | return iucv_call_b2f0(IUCV_SEVER, parm); | 621 | return iucv_call_b2f0(IUCV_SEVER, parm); |
622 | } | 622 | } |
623 | 623 | ||
624 | #ifdef CONFIG_SMP | ||
625 | /** | 624 | /** |
626 | * __iucv_cleanup_queue | 625 | * __iucv_cleanup_queue |
627 | * @dummy: unused dummy argument | 626 | * @dummy: unused dummy argument |
@@ -632,7 +631,6 @@ static int iucv_sever_pathid(u16 pathid, u8 userdata[16]) | |||
632 | static void __iucv_cleanup_queue(void *dummy) | 631 | static void __iucv_cleanup_queue(void *dummy) |
633 | { | 632 | { |
634 | } | 633 | } |
635 | #endif | ||
636 | 634 | ||
637 | /** | 635 | /** |
638 | * iucv_cleanup_queue | 636 | * iucv_cleanup_queue |
diff --git a/net/sctp/proc.c b/net/sctp/proc.c index b99bb6bda5d5..ddca90e5e3a5 100644 --- a/net/sctp/proc.c +++ b/net/sctp/proc.c | |||
@@ -256,12 +256,10 @@ int __init sctp_eps_proc_init(void) | |||
256 | { | 256 | { |
257 | struct proc_dir_entry *p; | 257 | struct proc_dir_entry *p; |
258 | 258 | ||
259 | p = create_proc_entry("eps", S_IRUGO, proc_net_sctp); | 259 | p = proc_create("eps", S_IRUGO, proc_net_sctp, &sctp_eps_seq_fops); |
260 | if (!p) | 260 | if (!p) |
261 | return -ENOMEM; | 261 | return -ENOMEM; |
262 | 262 | ||
263 | p->proc_fops = &sctp_eps_seq_fops; | ||
264 | |||
265 | return 0; | 263 | return 0; |
266 | } | 264 | } |
267 | 265 | ||
@@ -375,12 +373,11 @@ int __init sctp_assocs_proc_init(void) | |||
375 | { | 373 | { |
376 | struct proc_dir_entry *p; | 374 | struct proc_dir_entry *p; |
377 | 375 | ||
378 | p = create_proc_entry("assocs", S_IRUGO, proc_net_sctp); | 376 | p = proc_create("assocs", S_IRUGO, proc_net_sctp, |
377 | &sctp_assocs_seq_fops); | ||
379 | if (!p) | 378 | if (!p) |
380 | return -ENOMEM; | 379 | return -ENOMEM; |
381 | 380 | ||
382 | p->proc_fops = &sctp_assocs_seq_fops; | ||
383 | |||
384 | return 0; | 381 | return 0; |
385 | } | 382 | } |
386 | 383 | ||