aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/net/Makefile2
-rw-r--r--drivers/net/chelsio/sge.c4
-rw-r--r--drivers/net/e1000e/netdev.c1
-rw-r--r--drivers/net/hp-plus.c10
-rw-r--r--drivers/net/igb/igb_main.c4
-rw-r--r--drivers/net/ixgbe/ixgbe_main.c1
-rw-r--r--drivers/net/pcmcia/axnet_cs.c2
-rw-r--r--drivers/net/pcmcia/pcnet_cs.c1
-rw-r--r--drivers/net/phy/phy_device.c13
-rw-r--r--drivers/net/phy/vitesse.c64
-rw-r--r--drivers/net/sis900.c1
-rw-r--r--drivers/net/spider_net.c4
-rw-r--r--drivers/net/sungem.c2
-rw-r--r--drivers/net/wireless/ath5k/base.c38
-rw-r--r--drivers/net/wireless/ath5k/base.h1
-rw-r--r--drivers/net/wireless/ath5k/debug.c10
-rw-r--r--drivers/net/wireless/ath9k/beacon.c10
-rw-r--r--drivers/net/wireless/ath9k/recv.c24
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-agn.c8
-rw-r--r--drivers/pci/quirks.c17
-rw-r--r--include/linux/netfilter/x_tables.h2
-rw-r--r--include/net/request_sock.h1
-rw-r--r--include/net/timewait_sock.h1
-rw-r--r--net/bridge/br_netfilter.c12
-rw-r--r--net/core/skbuff.c2
-rw-r--r--net/core/sock.c31
-rw-r--r--net/ipv4/tcp_output.c7
-rw-r--r--net/mac80211/wext.c8
-rw-r--r--net/netfilter/nf_conntrack_core.c2
-rw-r--r--net/netfilter/nf_conntrack_netlink.c7
-rw-r--r--net/rose/af_rose.c10
31 files changed, 215 insertions, 85 deletions
diff --git a/drivers/net/Makefile b/drivers/net/Makefile
index e06829aa75b0..5f3baca3620d 100644
--- a/drivers/net/Makefile
+++ b/drivers/net/Makefile
@@ -113,7 +113,7 @@ obj-$(CONFIG_EL2) += 3c503.o 8390p.o
113obj-$(CONFIG_NE2000) += ne.o 8390p.o 113obj-$(CONFIG_NE2000) += ne.o 8390p.o
114obj-$(CONFIG_NE2_MCA) += ne2.o 8390p.o 114obj-$(CONFIG_NE2_MCA) += ne2.o 8390p.o
115obj-$(CONFIG_HPLAN) += hp.o 8390p.o 115obj-$(CONFIG_HPLAN) += hp.o 8390p.o
116obj-$(CONFIG_HPLAN_PLUS) += hp-plus.o 8390.o 116obj-$(CONFIG_HPLAN_PLUS) += hp-plus.o 8390p.o
117obj-$(CONFIG_ULTRA) += smc-ultra.o 8390.o 117obj-$(CONFIG_ULTRA) += smc-ultra.o 8390.o
118obj-$(CONFIG_ULTRAMCA) += smc-mca.o 8390.o 118obj-$(CONFIG_ULTRAMCA) += smc-mca.o 8390.o
119obj-$(CONFIG_ULTRA32) += smc-ultra32.o 8390.o 119obj-$(CONFIG_ULTRA32) += smc-ultra32.o 8390.o
diff --git a/drivers/net/chelsio/sge.c b/drivers/net/chelsio/sge.c
index ca80289fc04d..1da70070c2fa 100644
--- a/drivers/net/chelsio/sge.c
+++ b/drivers/net/chelsio/sge.c
@@ -1035,10 +1035,6 @@ MODULE_PARM_DESC(copybreak, "Receive copy threshold");
1035 * @pdev: the PCI device that received the packet 1035 * @pdev: the PCI device that received the packet
1036 * @fl: the SGE free list holding the packet 1036 * @fl: the SGE free list holding the packet
1037 * @len: the actual packet length, excluding any SGE padding 1037 * @len: the actual packet length, excluding any SGE padding
1038 * @dma_pad: padding at beginning of buffer left by SGE DMA
1039 * @skb_pad: padding to be used if the packet is copied
1040 * @copy_thres: length threshold under which a packet should be copied
1041 * @drop_thres: # of remaining buffers before we start dropping packets
1042 * 1038 *
1043 * Get the next packet from a free list and complete setup of the 1039 * Get the next packet from a free list and complete setup of the
1044 * sk_buff. If the packet is small we make a copy and recycle the 1040 * sk_buff. If the packet is small we make a copy and recycle the
diff --git a/drivers/net/e1000e/netdev.c b/drivers/net/e1000e/netdev.c
index ca5d3f58329d..65fd9797d028 100644
--- a/drivers/net/e1000e/netdev.c
+++ b/drivers/net/e1000e/netdev.c
@@ -343,7 +343,6 @@ no_buffers:
343/** 343/**
344 * e1000_alloc_jumbo_rx_buffers - Replace used jumbo receive buffers 344 * e1000_alloc_jumbo_rx_buffers - Replace used jumbo receive buffers
345 * @adapter: address of board private structure 345 * @adapter: address of board private structure
346 * @rx_ring: pointer to receive ring structure
347 * @cleaned_count: number of buffers to allocate this pass 346 * @cleaned_count: number of buffers to allocate this pass
348 **/ 347 **/
349 348
diff --git a/drivers/net/hp-plus.c b/drivers/net/hp-plus.c
index c34411cba6b4..b507dbc16e62 100644
--- a/drivers/net/hp-plus.c
+++ b/drivers/net/hp-plus.c
@@ -161,14 +161,14 @@ out:
161static const struct net_device_ops hpp_netdev_ops = { 161static const struct net_device_ops hpp_netdev_ops = {
162 .ndo_open = hpp_open, 162 .ndo_open = hpp_open,
163 .ndo_stop = hpp_close, 163 .ndo_stop = hpp_close,
164 .ndo_start_xmit = ei_start_xmit, 164 .ndo_start_xmit = eip_start_xmit,
165 .ndo_tx_timeout = ei_tx_timeout, 165 .ndo_tx_timeout = eip_tx_timeout,
166 .ndo_get_stats = ei_get_stats, 166 .ndo_get_stats = eip_get_stats,
167 .ndo_set_multicast_list = ei_set_multicast_list, 167 .ndo_set_multicast_list = eip_set_multicast_list,
168 .ndo_validate_addr = eth_validate_addr, 168 .ndo_validate_addr = eth_validate_addr,
169 .ndo_change_mtu = eth_change_mtu, 169 .ndo_change_mtu = eth_change_mtu,
170#ifdef CONFIG_NET_POLL_CONTROLLER 170#ifdef CONFIG_NET_POLL_CONTROLLER
171 .ndo_poll_controller = ei_poll, 171 .ndo_poll_controller = eip_poll,
172#endif 172#endif
173}; 173};
174 174
diff --git a/drivers/net/igb/igb_main.c b/drivers/net/igb/igb_main.c
index ab37ab03a45c..d7daf12ab07d 100644
--- a/drivers/net/igb/igb_main.c
+++ b/drivers/net/igb/igb_main.c
@@ -1975,7 +1975,6 @@ static void igb_configure_rx(struct igb_adapter *adapter)
1975 1975
1976/** 1976/**
1977 * igb_free_tx_resources - Free Tx Resources per Queue 1977 * igb_free_tx_resources - Free Tx Resources per Queue
1978 * @adapter: board private structure
1979 * @tx_ring: Tx descriptor ring for a specific queue 1978 * @tx_ring: Tx descriptor ring for a specific queue
1980 * 1979 *
1981 * Free all transmit software resources 1980 * Free all transmit software resources
@@ -2028,7 +2027,6 @@ static void igb_unmap_and_free_tx_resource(struct igb_adapter *adapter,
2028 2027
2029/** 2028/**
2030 * igb_clean_tx_ring - Free Tx Buffers 2029 * igb_clean_tx_ring - Free Tx Buffers
2031 * @adapter: board private structure
2032 * @tx_ring: ring to be cleaned 2030 * @tx_ring: ring to be cleaned
2033 **/ 2031 **/
2034static void igb_clean_tx_ring(struct igb_ring *tx_ring) 2032static void igb_clean_tx_ring(struct igb_ring *tx_ring)
@@ -2075,7 +2073,6 @@ static void igb_clean_all_tx_rings(struct igb_adapter *adapter)
2075 2073
2076/** 2074/**
2077 * igb_free_rx_resources - Free Rx Resources 2075 * igb_free_rx_resources - Free Rx Resources
2078 * @adapter: board private structure
2079 * @rx_ring: ring to clean the resources from 2076 * @rx_ring: ring to clean the resources from
2080 * 2077 *
2081 * Free all receive software resources 2078 * Free all receive software resources
@@ -2115,7 +2112,6 @@ static void igb_free_all_rx_resources(struct igb_adapter *adapter)
2115 2112
2116/** 2113/**
2117 * igb_clean_rx_ring - Free Rx Buffers per Queue 2114 * igb_clean_rx_ring - Free Rx Buffers per Queue
2118 * @adapter: board private structure
2119 * @rx_ring: ring to free buffers from 2115 * @rx_ring: ring to free buffers from
2120 **/ 2116 **/
2121static void igb_clean_rx_ring(struct igb_ring *rx_ring) 2117static void igb_clean_rx_ring(struct igb_ring *rx_ring)
diff --git a/drivers/net/ixgbe/ixgbe_main.c b/drivers/net/ixgbe/ixgbe_main.c
index 15d511cc2989..7e1cc6efc64c 100644
--- a/drivers/net/ixgbe/ixgbe_main.c
+++ b/drivers/net/ixgbe/ixgbe_main.c
@@ -1352,7 +1352,6 @@ static inline void ixgbe_irq_enable(struct ixgbe_adapter *adapter)
1352 * ixgbe_intr - legacy mode Interrupt Handler 1352 * ixgbe_intr - legacy mode Interrupt Handler
1353 * @irq: interrupt number 1353 * @irq: interrupt number
1354 * @data: pointer to a network interface device structure 1354 * @data: pointer to a network interface device structure
1355 * @pt_regs: CPU registers structure
1356 **/ 1355 **/
1357static irqreturn_t ixgbe_intr(int irq, void *data) 1356static irqreturn_t ixgbe_intr(int irq, void *data)
1358{ 1357{
diff --git a/drivers/net/pcmcia/axnet_cs.c b/drivers/net/pcmcia/axnet_cs.c
index c9890b4a8a32..0afa72095810 100644
--- a/drivers/net/pcmcia/axnet_cs.c
+++ b/drivers/net/pcmcia/axnet_cs.c
@@ -778,6 +778,7 @@ static struct pcmcia_device_id axnet_ids[] = {
778 PCMCIA_DEVICE_PROD_ID12("IO DATA", "ETXPCM", 0x547e66dc, 0x233adac2), 778 PCMCIA_DEVICE_PROD_ID12("IO DATA", "ETXPCM", 0x547e66dc, 0x233adac2),
779 PCMCIA_DEVICE_PROD_ID12("Linksys", "EtherFast 10/100 PC Card (PCMPC100 V3)", 0x0733cc81, 0x232019a8), 779 PCMCIA_DEVICE_PROD_ID12("Linksys", "EtherFast 10/100 PC Card (PCMPC100 V3)", 0x0733cc81, 0x232019a8),
780 PCMCIA_DEVICE_PROD_ID12("MELCO", "LPC3-TX", 0x481e0094, 0xf91af609), 780 PCMCIA_DEVICE_PROD_ID12("MELCO", "LPC3-TX", 0x481e0094, 0xf91af609),
781 PCMCIA_DEVICE_PROD_ID12("NETGEAR", "FA411", 0x9aa79dc3, 0x40fad875),
781 PCMCIA_DEVICE_PROD_ID12("PCMCIA", "100BASE", 0x281f1c5d, 0x7c2add04), 782 PCMCIA_DEVICE_PROD_ID12("PCMCIA", "100BASE", 0x281f1c5d, 0x7c2add04),
782 PCMCIA_DEVICE_PROD_ID12("PCMCIA", "FastEtherCard", 0x281f1c5d, 0x7ef26116), 783 PCMCIA_DEVICE_PROD_ID12("PCMCIA", "FastEtherCard", 0x281f1c5d, 0x7ef26116),
783 PCMCIA_DEVICE_PROD_ID12("PCMCIA", "FEP501", 0x281f1c5d, 0x2e272058), 784 PCMCIA_DEVICE_PROD_ID12("PCMCIA", "FEP501", 0x281f1c5d, 0x2e272058),
@@ -1173,7 +1174,6 @@ static int axnet_start_xmit(struct sk_buff *skb, struct net_device *dev)
1173 * ax_interrupt - handle the interrupts from an 8390 1174 * ax_interrupt - handle the interrupts from an 8390
1174 * @irq: interrupt number 1175 * @irq: interrupt number
1175 * @dev_id: a pointer to the net_device 1176 * @dev_id: a pointer to the net_device
1176 * @regs: unused
1177 * 1177 *
1178 * Handle the ether interface interrupts. We pull packets from 1178 * Handle the ether interface interrupts. We pull packets from
1179 * the 8390 via the card specific functions and fire them at the networking 1179 * the 8390 via the card specific functions and fire them at the networking
diff --git a/drivers/net/pcmcia/pcnet_cs.c b/drivers/net/pcmcia/pcnet_cs.c
index 69625373a8ed..c38ed777f0a8 100644
--- a/drivers/net/pcmcia/pcnet_cs.c
+++ b/drivers/net/pcmcia/pcnet_cs.c
@@ -1692,7 +1692,6 @@ static struct pcmcia_device_id pcnet_ids[] = {
1692 PCMCIA_DEVICE_PROD_ID12("National Semiconductor", "InfoMover NE4100", 0x36e1191f, 0xa6617ec8), 1692 PCMCIA_DEVICE_PROD_ID12("National Semiconductor", "InfoMover NE4100", 0x36e1191f, 0xa6617ec8),
1693 PCMCIA_DEVICE_PROD_ID12("NEC", "PC-9801N-J12", 0x18df0ba0, 0xbc912d76), 1693 PCMCIA_DEVICE_PROD_ID12("NEC", "PC-9801N-J12", 0x18df0ba0, 0xbc912d76),
1694 PCMCIA_DEVICE_PROD_ID12("NETGEAR", "FA410TX", 0x9aa79dc3, 0x60e5bc0e), 1694 PCMCIA_DEVICE_PROD_ID12("NETGEAR", "FA410TX", 0x9aa79dc3, 0x60e5bc0e),
1695 PCMCIA_DEVICE_PROD_ID12("NETGEAR", "FA411", 0x9aa79dc3, 0x40fad875),
1696 PCMCIA_DEVICE_PROD_ID12("Network Everywhere", "Fast Ethernet 10/100 PC Card", 0x820a67b6, 0x31ed1a5f), 1695 PCMCIA_DEVICE_PROD_ID12("Network Everywhere", "Fast Ethernet 10/100 PC Card", 0x820a67b6, 0x31ed1a5f),
1697 PCMCIA_DEVICE_PROD_ID12("NextCom K.K.", "Next Hawk", 0xaedaec74, 0xad050ef1), 1696 PCMCIA_DEVICE_PROD_ID12("NextCom K.K.", "Next Hawk", 0xaedaec74, 0xad050ef1),
1698 PCMCIA_DEVICE_PROD_ID12("PCMCIA", "10/100Mbps Ethernet Card", 0x281f1c5d, 0x6e41773b), 1697 PCMCIA_DEVICE_PROD_ID12("PCMCIA", "10/100Mbps Ethernet Card", 0x281f1c5d, 0x6e41773b),
diff --git a/drivers/net/phy/phy_device.c b/drivers/net/phy/phy_device.c
index b344a0b55dbf..29546a206045 100644
--- a/drivers/net/phy/phy_device.c
+++ b/drivers/net/phy/phy_device.c
@@ -227,8 +227,17 @@ struct phy_device * get_phy_device(struct mii_bus *bus, int addr)
227 if (r) 227 if (r)
228 return ERR_PTR(r); 228 return ERR_PTR(r);
229 229
230 /* If the phy_id is all Fs or all 0s, there is no device there */ 230 /* If the phy_id is mostly Fs, there is no device there */
231 if ((0xffff == phy_id) || (0x00 == phy_id)) 231 if ((phy_id & 0x1fffffff) == 0x1fffffff)
232 return NULL;
233
234 /*
235 * Broken hardware is sometimes missing the pull down resistor on the
236 * MDIO line, which results in reads to non-existent devices returning
237 * 0 rather than 0xffff. Catch this here and treat 0 as a non-existent
238 * device as well.
239 */
240 if (phy_id == 0)
232 return NULL; 241 return NULL;
233 242
234 dev = phy_device_create(bus, addr, phy_id); 243 dev = phy_device_create(bus, addr, phy_id);
diff --git a/drivers/net/phy/vitesse.c b/drivers/net/phy/vitesse.c
index 8874497b6bbf..dd3b2447e85a 100644
--- a/drivers/net/phy/vitesse.c
+++ b/drivers/net/phy/vitesse.c
@@ -34,6 +34,8 @@
34#define MII_VSC8244_IMASK_DUPLEX 0x1000 34#define MII_VSC8244_IMASK_DUPLEX 0x1000
35#define MII_VSC8244_IMASK_MASK 0xf000 35#define MII_VSC8244_IMASK_MASK 0xf000
36 36
37#define MII_VSC8221_IMASK_MASK 0xa000
38
37/* Vitesse Interrupt Status Register */ 39/* Vitesse Interrupt Status Register */
38#define MII_VSC8244_ISTAT 0x1a 40#define MII_VSC8244_ISTAT 0x1a
39#define MII_VSC8244_ISTAT_STATUS 0x8000 41#define MII_VSC8244_ISTAT_STATUS 0x8000
@@ -49,6 +51,12 @@
49#define MII_VSC8244_AUXCONSTAT_GBIT 0x0010 51#define MII_VSC8244_AUXCONSTAT_GBIT 0x0010
50#define MII_VSC8244_AUXCONSTAT_100 0x0008 52#define MII_VSC8244_AUXCONSTAT_100 0x0008
51 53
54#define MII_VSC8221_AUXCONSTAT_INIT 0x0004 /* need to set this bit? */
55#define MII_VSC8221_AUXCONSTAT_RESERVED 0x0004
56
57#define PHY_ID_VSC8244 0x000fc6c0
58#define PHY_ID_VSC8221 0x000fc550
59
52MODULE_DESCRIPTION("Vitesse PHY driver"); 60MODULE_DESCRIPTION("Vitesse PHY driver");
53MODULE_AUTHOR("Kriston Carson"); 61MODULE_AUTHOR("Kriston Carson");
54MODULE_LICENSE("GPL"); 62MODULE_LICENSE("GPL");
@@ -95,13 +103,15 @@ static int vsc824x_ack_interrupt(struct phy_device *phydev)
95 return (err < 0) ? err : 0; 103 return (err < 0) ? err : 0;
96} 104}
97 105
98static int vsc824x_config_intr(struct phy_device *phydev) 106static int vsc82xx_config_intr(struct phy_device *phydev)
99{ 107{
100 int err; 108 int err;
101 109
102 if (phydev->interrupts == PHY_INTERRUPT_ENABLED) 110 if (phydev->interrupts == PHY_INTERRUPT_ENABLED)
103 err = phy_write(phydev, MII_VSC8244_IMASK, 111 err = phy_write(phydev, MII_VSC8244_IMASK,
104 MII_VSC8244_IMASK_MASK); 112 phydev->drv->phy_id == PHY_ID_VSC8244 ?
113 MII_VSC8244_IMASK_MASK :
114 MII_VSC8221_IMASK_MASK);
105 else { 115 else {
106 /* 116 /*
107 * The Vitesse PHY cannot clear the interrupt 117 * The Vitesse PHY cannot clear the interrupt
@@ -120,7 +130,7 @@ static int vsc824x_config_intr(struct phy_device *phydev)
120 130
121/* Vitesse 824x */ 131/* Vitesse 824x */
122static struct phy_driver vsc8244_driver = { 132static struct phy_driver vsc8244_driver = {
123 .phy_id = 0x000fc6c0, 133 .phy_id = PHY_ID_VSC8244,
124 .name = "Vitesse VSC8244", 134 .name = "Vitesse VSC8244",
125 .phy_id_mask = 0x000fffc0, 135 .phy_id_mask = 0x000fffc0,
126 .features = PHY_GBIT_FEATURES, 136 .features = PHY_GBIT_FEATURES,
@@ -129,19 +139,55 @@ static struct phy_driver vsc8244_driver = {
129 .config_aneg = &genphy_config_aneg, 139 .config_aneg = &genphy_config_aneg,
130 .read_status = &genphy_read_status, 140 .read_status = &genphy_read_status,
131 .ack_interrupt = &vsc824x_ack_interrupt, 141 .ack_interrupt = &vsc824x_ack_interrupt,
132 .config_intr = &vsc824x_config_intr, 142 .config_intr = &vsc82xx_config_intr,
133 .driver = { .owner = THIS_MODULE,}, 143 .driver = { .owner = THIS_MODULE,},
134}; 144};
135 145
136static int __init vsc8244_init(void) 146static int vsc8221_config_init(struct phy_device *phydev)
137{ 147{
138 return phy_driver_register(&vsc8244_driver); 148 int err;
149
150 err = phy_write(phydev, MII_VSC8244_AUX_CONSTAT,
151 MII_VSC8221_AUXCONSTAT_INIT);
152 return err;
153
154 /* Perhaps we should set EXT_CON1 based on the interface?
155 Options are 802.3Z SerDes or SGMII */
156}
157
158/* Vitesse 8221 */
159static struct phy_driver vsc8221_driver = {
160 .phy_id = PHY_ID_VSC8221,
161 .phy_id_mask = 0x000ffff0,
162 .name = "Vitesse VSC8221",
163 .features = PHY_GBIT_FEATURES,
164 .flags = PHY_HAS_INTERRUPT,
165 .config_init = &vsc8221_config_init,
166 .config_aneg = &genphy_config_aneg,
167 .read_status = &genphy_read_status,
168 .ack_interrupt = &vsc824x_ack_interrupt,
169 .config_intr = &vsc82xx_config_intr,
170 .driver = { .owner = THIS_MODULE,},
171};
172
173static int __init vsc82xx_init(void)
174{
175 int err;
176
177 err = phy_driver_register(&vsc8244_driver);
178 if (err < 0)
179 return err;
180 err = phy_driver_register(&vsc8221_driver);
181 if (err < 0)
182 phy_driver_unregister(&vsc8244_driver);
183 return err;
139} 184}
140 185
141static void __exit vsc8244_exit(void) 186static void __exit vsc82xx_exit(void)
142{ 187{
143 phy_driver_unregister(&vsc8244_driver); 188 phy_driver_unregister(&vsc8244_driver);
189 phy_driver_unregister(&vsc8221_driver);
144} 190}
145 191
146module_init(vsc8244_init); 192module_init(vsc82xx_init);
147module_exit(vsc8244_exit); 193module_exit(vsc82xx_exit);
diff --git a/drivers/net/sis900.c b/drivers/net/sis900.c
index eb715f1bcd48..4acd41a093ad 100644
--- a/drivers/net/sis900.c
+++ b/drivers/net/sis900.c
@@ -1634,7 +1634,6 @@ sis900_start_xmit(struct sk_buff *skb, struct net_device *net_dev)
1634 * sis900_interrupt - sis900 interrupt handler 1634 * sis900_interrupt - sis900 interrupt handler
1635 * @irq: the irq number 1635 * @irq: the irq number
1636 * @dev_instance: the client data object 1636 * @dev_instance: the client data object
1637 * @regs: snapshot of processor context
1638 * 1637 *
1639 * The interrupt handler does all of the Rx thread work, 1638 * The interrupt handler does all of the Rx thread work,
1640 * and cleans up after the Tx thread 1639 * and cleans up after the Tx thread
diff --git a/drivers/net/spider_net.c b/drivers/net/spider_net.c
index b6435d0d71f9..07599b492359 100644
--- a/drivers/net/spider_net.c
+++ b/drivers/net/spider_net.c
@@ -672,7 +672,6 @@ write_hash:
672/** 672/**
673 * spider_net_prepare_tx_descr - fill tx descriptor with skb data 673 * spider_net_prepare_tx_descr - fill tx descriptor with skb data
674 * @card: card structure 674 * @card: card structure
675 * @descr: descriptor structure to fill out
676 * @skb: packet to use 675 * @skb: packet to use
677 * 676 *
678 * returns 0 on success, <0 on failure. 677 * returns 0 on success, <0 on failure.
@@ -867,7 +866,6 @@ spider_net_release_tx_chain(struct spider_net_card *card, int brutal)
867/** 866/**
868 * spider_net_kick_tx_dma - enables TX DMA processing 867 * spider_net_kick_tx_dma - enables TX DMA processing
869 * @card: card structure 868 * @card: card structure
870 * @descr: descriptor address to enable TX processing at
871 * 869 *
872 * This routine will start the transmit DMA running if 870 * This routine will start the transmit DMA running if
873 * it is not already running. This routine ned only be 871 * it is not already running. This routine ned only be
@@ -1637,7 +1635,6 @@ spider_net_handle_error_irq(struct spider_net_card *card, u32 status_reg,
1637 * spider_net_interrupt - interrupt handler for spider_net 1635 * spider_net_interrupt - interrupt handler for spider_net
1638 * @irq: interrupt number 1636 * @irq: interrupt number
1639 * @ptr: pointer to net_device 1637 * @ptr: pointer to net_device
1640 * @regs: PU registers
1641 * 1638 *
1642 * returns IRQ_HANDLED, if interrupt was for driver, or IRQ_NONE, if no 1639 * returns IRQ_HANDLED, if interrupt was for driver, or IRQ_NONE, if no
1643 * interrupt found raised by card. 1640 * interrupt found raised by card.
@@ -2419,7 +2416,6 @@ spider_net_undo_pci_setup(struct spider_net_card *card)
2419 2416
2420/** 2417/**
2421 * spider_net_setup_pci_dev - sets up the device in terms of PCI operations 2418 * spider_net_setup_pci_dev - sets up the device in terms of PCI operations
2422 * @card: card structure
2423 * @pdev: PCI device 2419 * @pdev: PCI device
2424 * 2420 *
2425 * Returns the card structure or NULL if any errors occur 2421 * Returns the card structure or NULL if any errors occur
diff --git a/drivers/net/sungem.c b/drivers/net/sungem.c
index 44be8dfbcf17..6f935cd30176 100644
--- a/drivers/net/sungem.c
+++ b/drivers/net/sungem.c
@@ -1713,7 +1713,7 @@ static void gem_init_phy(struct gem *gp)
1713 /* Reset PCS unit. */ 1713 /* Reset PCS unit. */
1714 val = readl(gp->regs + PCS_MIICTRL); 1714 val = readl(gp->regs + PCS_MIICTRL);
1715 val |= PCS_MIICTRL_RST; 1715 val |= PCS_MIICTRL_RST;
1716 writeb(val, gp->regs + PCS_MIICTRL); 1716 writel(val, gp->regs + PCS_MIICTRL);
1717 1717
1718 limit = 32; 1718 limit = 32;
1719 while (readl(gp->regs + PCS_MIICTRL) & PCS_MIICTRL_RST) { 1719 while (readl(gp->regs + PCS_MIICTRL) & PCS_MIICTRL_RST) {
diff --git a/drivers/net/wireless/ath5k/base.c b/drivers/net/wireless/ath5k/base.c
index 4bcea5a9d70b..0e4317010ed0 100644
--- a/drivers/net/wireless/ath5k/base.c
+++ b/drivers/net/wireless/ath5k/base.c
@@ -240,7 +240,12 @@ static int ath5k_get_tx_stats(struct ieee80211_hw *hw,
240 struct ieee80211_tx_queue_stats *stats); 240 struct ieee80211_tx_queue_stats *stats);
241static u64 ath5k_get_tsf(struct ieee80211_hw *hw); 241static u64 ath5k_get_tsf(struct ieee80211_hw *hw);
242static void ath5k_reset_tsf(struct ieee80211_hw *hw); 242static void ath5k_reset_tsf(struct ieee80211_hw *hw);
243static int ath5k_beacon_update(struct ath5k_softc *sc, struct sk_buff *skb); 243static int ath5k_beacon_update(struct ath5k_softc *sc,
244 struct sk_buff *skb);
245static void ath5k_bss_info_changed(struct ieee80211_hw *hw,
246 struct ieee80211_vif *vif,
247 struct ieee80211_bss_conf *bss_conf,
248 u32 changes);
244 249
245static struct ieee80211_ops ath5k_hw_ops = { 250static struct ieee80211_ops ath5k_hw_ops = {
246 .tx = ath5k_tx, 251 .tx = ath5k_tx,
@@ -257,6 +262,7 @@ static struct ieee80211_ops ath5k_hw_ops = {
257 .get_tx_stats = ath5k_get_tx_stats, 262 .get_tx_stats = ath5k_get_tx_stats,
258 .get_tsf = ath5k_get_tsf, 263 .get_tsf = ath5k_get_tsf,
259 .reset_tsf = ath5k_reset_tsf, 264 .reset_tsf = ath5k_reset_tsf,
265 .bss_info_changed = ath5k_bss_info_changed,
260}; 266};
261 267
262/* 268/*
@@ -2961,7 +2967,7 @@ static void ath5k_configure_filter(struct ieee80211_hw *hw,
2961 sc->opmode != NL80211_IFTYPE_MESH_POINT && 2967 sc->opmode != NL80211_IFTYPE_MESH_POINT &&
2962 test_bit(ATH_STAT_PROMISC, sc->status)) 2968 test_bit(ATH_STAT_PROMISC, sc->status))
2963 rfilt |= AR5K_RX_FILTER_PROM; 2969 rfilt |= AR5K_RX_FILTER_PROM;
2964 if (sc->opmode == NL80211_IFTYPE_STATION || 2970 if ((sc->opmode == NL80211_IFTYPE_STATION && sc->assoc) ||
2965 sc->opmode == NL80211_IFTYPE_ADHOC || 2971 sc->opmode == NL80211_IFTYPE_ADHOC ||
2966 sc->opmode == NL80211_IFTYPE_AP) 2972 sc->opmode == NL80211_IFTYPE_AP)
2967 rfilt |= AR5K_RX_FILTER_BEACON; 2973 rfilt |= AR5K_RX_FILTER_BEACON;
@@ -3101,4 +3107,32 @@ ath5k_beacon_update(struct ath5k_softc *sc, struct sk_buff *skb)
3101 3107
3102 return ret; 3108 return ret;
3103} 3109}
3110static void
3111set_beacon_filter(struct ieee80211_hw *hw, bool enable)
3112{
3113 struct ath5k_softc *sc = hw->priv;
3114 struct ath5k_hw *ah = sc->ah;
3115 u32 rfilt;
3116 rfilt = ath5k_hw_get_rx_filter(ah);
3117 if (enable)
3118 rfilt |= AR5K_RX_FILTER_BEACON;
3119 else
3120 rfilt &= ~AR5K_RX_FILTER_BEACON;
3121 ath5k_hw_set_rx_filter(ah, rfilt);
3122 sc->filter_flags = rfilt;
3123}
3104 3124
3125static void ath5k_bss_info_changed(struct ieee80211_hw *hw,
3126 struct ieee80211_vif *vif,
3127 struct ieee80211_bss_conf *bss_conf,
3128 u32 changes)
3129{
3130 struct ath5k_softc *sc = hw->priv;
3131 if (changes & BSS_CHANGED_ASSOC) {
3132 mutex_lock(&sc->lock);
3133 sc->assoc = bss_conf->assoc;
3134 if (sc->opmode == NL80211_IFTYPE_STATION)
3135 set_beacon_filter(hw, sc->assoc);
3136 mutex_unlock(&sc->lock);
3137 }
3138}
diff --git a/drivers/net/wireless/ath5k/base.h b/drivers/net/wireless/ath5k/base.h
index 06d1054ca94b..facc60ddada2 100644
--- a/drivers/net/wireless/ath5k/base.h
+++ b/drivers/net/wireless/ath5k/base.h
@@ -179,6 +179,7 @@ struct ath5k_softc {
179 179
180 struct timer_list calib_tim; /* calibration timer */ 180 struct timer_list calib_tim; /* calibration timer */
181 int power_level; /* Requested tx power in dbm */ 181 int power_level; /* Requested tx power in dbm */
182 bool assoc; /* assocate state */
182}; 183};
183 184
184#define ath5k_hw_hasbssidmask(_ah) \ 185#define ath5k_hw_hasbssidmask(_ah) \
diff --git a/drivers/net/wireless/ath5k/debug.c b/drivers/net/wireless/ath5k/debug.c
index 19980cbd5d5f..ccaeb5c219d2 100644
--- a/drivers/net/wireless/ath5k/debug.c
+++ b/drivers/net/wireless/ath5k/debug.c
@@ -417,19 +417,19 @@ ath5k_debug_init_device(struct ath5k_softc *sc)
417 sc->debug.debugfs_phydir = debugfs_create_dir(wiphy_name(sc->hw->wiphy), 417 sc->debug.debugfs_phydir = debugfs_create_dir(wiphy_name(sc->hw->wiphy),
418 ath5k_global_debugfs); 418 ath5k_global_debugfs);
419 419
420 sc->debug.debugfs_debug = debugfs_create_file("debug", 0666, 420 sc->debug.debugfs_debug = debugfs_create_file("debug", S_IWUSR | S_IRUGO,
421 sc->debug.debugfs_phydir, sc, &fops_debug); 421 sc->debug.debugfs_phydir, sc, &fops_debug);
422 422
423 sc->debug.debugfs_registers = debugfs_create_file("registers", 0444, 423 sc->debug.debugfs_registers = debugfs_create_file("registers", S_IRUGO,
424 sc->debug.debugfs_phydir, sc, &fops_registers); 424 sc->debug.debugfs_phydir, sc, &fops_registers);
425 425
426 sc->debug.debugfs_tsf = debugfs_create_file("tsf", 0666, 426 sc->debug.debugfs_tsf = debugfs_create_file("tsf", S_IWUSR | S_IRUGO,
427 sc->debug.debugfs_phydir, sc, &fops_tsf); 427 sc->debug.debugfs_phydir, sc, &fops_tsf);
428 428
429 sc->debug.debugfs_beacon = debugfs_create_file("beacon", 0666, 429 sc->debug.debugfs_beacon = debugfs_create_file("beacon", S_IWUSR | S_IRUGO,
430 sc->debug.debugfs_phydir, sc, &fops_beacon); 430 sc->debug.debugfs_phydir, sc, &fops_beacon);
431 431
432 sc->debug.debugfs_reset = debugfs_create_file("reset", 0222, 432 sc->debug.debugfs_reset = debugfs_create_file("reset", S_IWUSR,
433 sc->debug.debugfs_phydir, sc, &fops_reset); 433 sc->debug.debugfs_phydir, sc, &fops_reset);
434} 434}
435 435
diff --git a/drivers/net/wireless/ath9k/beacon.c b/drivers/net/wireless/ath9k/beacon.c
index 377d2df05316..e80d9b9b61a0 100644
--- a/drivers/net/wireless/ath9k/beacon.c
+++ b/drivers/net/wireless/ath9k/beacon.c
@@ -167,7 +167,7 @@ static struct ath_buf *ath_beacon_generate(struct ath_softc *sc, int if_id)
167 skb = (struct sk_buff *)bf->bf_mpdu; 167 skb = (struct sk_buff *)bf->bf_mpdu;
168 if (skb) { 168 if (skb) {
169 pci_unmap_single(sc->pdev, bf->bf_dmacontext, 169 pci_unmap_single(sc->pdev, bf->bf_dmacontext,
170 skb_end_pointer(skb) - skb->head, 170 skb->len,
171 PCI_DMA_TODEVICE); 171 PCI_DMA_TODEVICE);
172 } 172 }
173 173
@@ -190,7 +190,7 @@ static struct ath_buf *ath_beacon_generate(struct ath_softc *sc, int if_id)
190 190
191 bf->bf_buf_addr = bf->bf_dmacontext = 191 bf->bf_buf_addr = bf->bf_dmacontext =
192 pci_map_single(sc->pdev, skb->data, 192 pci_map_single(sc->pdev, skb->data,
193 skb_end_pointer(skb) - skb->head, 193 skb->len,
194 PCI_DMA_TODEVICE); 194 PCI_DMA_TODEVICE);
195 195
196 skb = ieee80211_get_buffered_bc(sc->hw, vif); 196 skb = ieee80211_get_buffered_bc(sc->hw, vif);
@@ -338,7 +338,7 @@ int ath_beacon_alloc(struct ath_softc *sc, int if_id)
338 if (bf->bf_mpdu != NULL) { 338 if (bf->bf_mpdu != NULL) {
339 skb = (struct sk_buff *)bf->bf_mpdu; 339 skb = (struct sk_buff *)bf->bf_mpdu;
340 pci_unmap_single(sc->pdev, bf->bf_dmacontext, 340 pci_unmap_single(sc->pdev, bf->bf_dmacontext,
341 skb_end_pointer(skb) - skb->head, 341 skb->len,
342 PCI_DMA_TODEVICE); 342 PCI_DMA_TODEVICE);
343 dev_kfree_skb_any(skb); 343 dev_kfree_skb_any(skb);
344 bf->bf_mpdu = NULL; 344 bf->bf_mpdu = NULL;
@@ -398,7 +398,7 @@ int ath_beacon_alloc(struct ath_softc *sc, int if_id)
398 398
399 bf->bf_buf_addr = bf->bf_dmacontext = 399 bf->bf_buf_addr = bf->bf_dmacontext =
400 pci_map_single(sc->pdev, skb->data, 400 pci_map_single(sc->pdev, skb->data,
401 skb_end_pointer(skb) - skb->head, 401 skb->len,
402 PCI_DMA_TODEVICE); 402 PCI_DMA_TODEVICE);
403 bf->bf_mpdu = skb; 403 bf->bf_mpdu = skb;
404 404
@@ -419,7 +419,7 @@ void ath_beacon_return(struct ath_softc *sc, struct ath_vap *avp)
419 if (bf->bf_mpdu != NULL) { 419 if (bf->bf_mpdu != NULL) {
420 struct sk_buff *skb = (struct sk_buff *)bf->bf_mpdu; 420 struct sk_buff *skb = (struct sk_buff *)bf->bf_mpdu;
421 pci_unmap_single(sc->pdev, bf->bf_dmacontext, 421 pci_unmap_single(sc->pdev, bf->bf_dmacontext,
422 skb_end_pointer(skb) - skb->head, 422 skb->len,
423 PCI_DMA_TODEVICE); 423 PCI_DMA_TODEVICE);
424 dev_kfree_skb_any(skb); 424 dev_kfree_skb_any(skb);
425 bf->bf_mpdu = NULL; 425 bf->bf_mpdu = NULL;
diff --git a/drivers/net/wireless/ath9k/recv.c b/drivers/net/wireless/ath9k/recv.c
index 743ad228b833..e49e32356e92 100644
--- a/drivers/net/wireless/ath9k/recv.c
+++ b/drivers/net/wireless/ath9k/recv.c
@@ -41,9 +41,12 @@ static void ath_rx_buf_link(struct ath_softc *sc, struct ath_buf *bf)
41 ASSERT(skb != NULL); 41 ASSERT(skb != NULL);
42 ds->ds_vdata = skb->data; 42 ds->ds_vdata = skb->data;
43 43
44 /* setup rx descriptors */ 44 /* setup rx descriptors. The sc_rxbufsize here tells the harware
45 ath9k_hw_setuprxdesc(ah, ds, 45 * how much data it can DMA to us and that we are prepared
46 skb_tailroom(skb), /* buffer size */ 46 * to process */
47 ath9k_hw_setuprxdesc(ah,
48 ds,
49 sc->sc_rxbufsize,
47 0); 50 0);
48 51
49 if (sc->sc_rxlink == NULL) 52 if (sc->sc_rxlink == NULL)
@@ -88,6 +91,13 @@ static struct sk_buff *ath_rxbuf_alloc(struct ath_softc *sc, u32 len)
88 * in rx'd frames. 91 * in rx'd frames.
89 */ 92 */
90 93
94 /* Note: the kernel can allocate a value greater than
95 * what we ask it to give us. We really only need 4 KB as that
96 * is this hardware supports and in fact we need at least 3849
97 * as that is the MAX AMSDU size this hardware supports.
98 * Unfortunately this means we may get 8 KB here from the
99 * kernel... and that is actually what is observed on some
100 * systems :( */
91 skb = dev_alloc_skb(len + sc->sc_cachelsz - 1); 101 skb = dev_alloc_skb(len + sc->sc_cachelsz - 1);
92 if (skb != NULL) { 102 if (skb != NULL) {
93 off = ((unsigned long) skb->data) % sc->sc_cachelsz; 103 off = ((unsigned long) skb->data) % sc->sc_cachelsz;
@@ -298,7 +308,7 @@ int ath_rx_init(struct ath_softc *sc, int nbufs)
298 308
299 bf->bf_mpdu = skb; 309 bf->bf_mpdu = skb;
300 bf->bf_buf_addr = pci_map_single(sc->pdev, skb->data, 310 bf->bf_buf_addr = pci_map_single(sc->pdev, skb->data,
301 skb_end_pointer(skb) - skb->head, 311 sc->sc_rxbufsize,
302 PCI_DMA_FROMDEVICE); 312 PCI_DMA_FROMDEVICE);
303 bf->bf_dmacontext = bf->bf_buf_addr; 313 bf->bf_dmacontext = bf->bf_buf_addr;
304 } 314 }
@@ -544,9 +554,9 @@ int ath_rx_tasklet(struct ath_softc *sc, int flush)
544 if (!requeue_skb) 554 if (!requeue_skb)
545 goto requeue; 555 goto requeue;
546 556
547 /* Sync and unmap the frame */ 557 pci_dma_sync_single_for_cpu(sc->pdev,
548 pci_dma_sync_single_for_cpu(sc->pdev, bf->bf_buf_addr, 558 bf->bf_buf_addr,
549 skb_tailroom(skb), 559 sc->sc_rxbufsize,
550 PCI_DMA_FROMDEVICE); 560 PCI_DMA_FROMDEVICE);
551 pci_unmap_single(sc->pdev, bf->bf_buf_addr, 561 pci_unmap_single(sc->pdev, bf->bf_buf_addr,
552 sc->sc_rxbufsize, 562 sc->sc_rxbufsize,
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn.c b/drivers/net/wireless/iwlwifi/iwl-agn.c
index c8ce84a1eef4..7888250117dc 100644
--- a/drivers/net/wireless/iwlwifi/iwl-agn.c
+++ b/drivers/net/wireless/iwlwifi/iwl-agn.c
@@ -1228,9 +1228,11 @@ void iwl_rx_handle(struct iwl_priv *priv)
1228 1228
1229 rxq->queue[i] = NULL; 1229 rxq->queue[i] = NULL;
1230 1230
1231 pci_dma_sync_single_for_cpu(priv->pci_dev, rxb->aligned_dma_addr, 1231 dma_sync_single_range_for_cpu(
1232 priv->hw_params.rx_buf_size, 1232 &priv->pci_dev->dev, rxb->real_dma_addr,
1233 PCI_DMA_FROMDEVICE); 1233 rxb->aligned_dma_addr - rxb->real_dma_addr,
1234 priv->hw_params.rx_buf_size,
1235 PCI_DMA_FROMDEVICE);
1234 pkt = (struct iwl_rx_packet *)rxb->skb->data; 1236 pkt = (struct iwl_rx_packet *)rxb->skb->data;
1235 1237
1236 /* Reclaim a command buffer only if this packet is a response 1238 /* Reclaim a command buffer only if this packet is a response
diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
index 5049a47030ac..5f4f85f56cb7 100644
--- a/drivers/pci/quirks.c
+++ b/drivers/pci/quirks.c
@@ -22,6 +22,7 @@
22#include <linux/delay.h> 22#include <linux/delay.h>
23#include <linux/acpi.h> 23#include <linux/acpi.h>
24#include <linux/kallsyms.h> 24#include <linux/kallsyms.h>
25#include <linux/dmi.h>
25#include "pci.h" 26#include "pci.h"
26 27
27int isa_dma_bridge_buggy; 28int isa_dma_bridge_buggy;
@@ -1828,6 +1829,22 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_SERVERWORKS,
1828 PCI_DEVICE_ID_SERVERWORKS_HT1000_PXB, 1829 PCI_DEVICE_ID_SERVERWORKS_HT1000_PXB,
1829 ht_enable_msi_mapping); 1830 ht_enable_msi_mapping);
1830 1831
1832/* The P5N32-SLI Premium motherboard from Asus has a problem with msi
1833 * for the MCP55 NIC. It is not yet determined whether the msi problem
1834 * also affects other devices. As for now, turn off msi for this device.
1835 */
1836static void __devinit nvenet_msi_disable(struct pci_dev *dev)
1837{
1838 if (dmi_name_in_vendors("P5N32-SLI PREMIUM")) {
1839 dev_info(&dev->dev,
1840 "Disabling msi for MCP55 NIC on P5N32-SLI Premium\n");
1841 dev->no_msi = 1;
1842 }
1843}
1844DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_NVIDIA,
1845 PCI_DEVICE_ID_NVIDIA_NVENET_15,
1846 nvenet_msi_disable);
1847
1831static void __devinit nv_msi_ht_cap_quirk(struct pci_dev *dev) 1848static void __devinit nv_msi_ht_cap_quirk(struct pci_dev *dev)
1832{ 1849{
1833 struct pci_dev *host_bridge; 1850 struct pci_dev *host_bridge;
diff --git a/include/linux/netfilter/x_tables.h b/include/linux/netfilter/x_tables.h
index be41b609c88f..e52ce475d19f 100644
--- a/include/linux/netfilter/x_tables.h
+++ b/include/linux/netfilter/x_tables.h
@@ -251,7 +251,7 @@ struct xt_target_param {
251 */ 251 */
252struct xt_tgchk_param { 252struct xt_tgchk_param {
253 const char *table; 253 const char *table;
254 void *entryinfo; 254 const void *entryinfo;
255 const struct xt_target *target; 255 const struct xt_target *target;
256 void *targinfo; 256 void *targinfo;
257 unsigned int hook_mask; 257 unsigned int hook_mask;
diff --git a/include/net/request_sock.h b/include/net/request_sock.h
index cac811e51f6d..c7190846e128 100644
--- a/include/net/request_sock.h
+++ b/include/net/request_sock.h
@@ -31,6 +31,7 @@ struct request_sock_ops {
31 int family; 31 int family;
32 int obj_size; 32 int obj_size;
33 struct kmem_cache *slab; 33 struct kmem_cache *slab;
34 char *slab_name;
34 int (*rtx_syn_ack)(struct sock *sk, 35 int (*rtx_syn_ack)(struct sock *sk,
35 struct request_sock *req); 36 struct request_sock *req);
36 void (*send_ack)(struct sock *sk, struct sk_buff *skb, 37 void (*send_ack)(struct sock *sk, struct sk_buff *skb,
diff --git a/include/net/timewait_sock.h b/include/net/timewait_sock.h
index 1e1ee3253fd8..97c3b14da55d 100644
--- a/include/net/timewait_sock.h
+++ b/include/net/timewait_sock.h
@@ -16,6 +16,7 @@
16 16
17struct timewait_sock_ops { 17struct timewait_sock_ops {
18 struct kmem_cache *twsk_slab; 18 struct kmem_cache *twsk_slab;
19 char *twsk_slab_name;
19 unsigned int twsk_obj_size; 20 unsigned int twsk_obj_size;
20 int (*twsk_unique)(struct sock *sk, 21 int (*twsk_unique)(struct sock *sk,
21 struct sock *sktw, void *twp); 22 struct sock *sktw, void *twp);
diff --git a/net/bridge/br_netfilter.c b/net/bridge/br_netfilter.c
index db6176d96e71..274194b78247 100644
--- a/net/bridge/br_netfilter.c
+++ b/net/bridge/br_netfilter.c
@@ -101,6 +101,17 @@ static inline __be16 pppoe_proto(const struct sk_buff *skb)
101 pppoe_proto(skb) == htons(PPP_IPV6) && \ 101 pppoe_proto(skb) == htons(PPP_IPV6) && \
102 brnf_filter_pppoe_tagged) 102 brnf_filter_pppoe_tagged)
103 103
104static void fake_update_pmtu(struct dst_entry *dst, u32 mtu)
105{
106}
107
108static struct dst_ops fake_dst_ops = {
109 .family = AF_INET,
110 .protocol = __constant_htons(ETH_P_IP),
111 .update_pmtu = fake_update_pmtu,
112 .entries = ATOMIC_INIT(0),
113};
114
104/* 115/*
105 * Initialize bogus route table used to keep netfilter happy. 116 * Initialize bogus route table used to keep netfilter happy.
106 * Currently, we fill in the PMTU entry because netfilter 117 * Currently, we fill in the PMTU entry because netfilter
@@ -117,6 +128,7 @@ void br_netfilter_rtable_init(struct net_bridge *br)
117 rt->u.dst.path = &rt->u.dst; 128 rt->u.dst.path = &rt->u.dst;
118 rt->u.dst.metrics[RTAX_MTU - 1] = 1500; 129 rt->u.dst.metrics[RTAX_MTU - 1] = 1500;
119 rt->u.dst.flags = DST_NOXFRM; 130 rt->u.dst.flags = DST_NOXFRM;
131 rt->u.dst.ops = &fake_dst_ops;
120} 132}
121 133
122static inline struct rtable *bridge_parent_rtable(const struct net_device *dev) 134static inline struct rtable *bridge_parent_rtable(const struct net_device *dev)
diff --git a/net/core/skbuff.c b/net/core/skbuff.c
index e03d77d4c1c9..b1f628741f4c 100644
--- a/net/core/skbuff.c
+++ b/net/core/skbuff.c
@@ -149,7 +149,7 @@ void skb_under_panic(struct sk_buff *skb, int sz, void *here)
149 149
150void skb_truesize_bug(struct sk_buff *skb) 150void skb_truesize_bug(struct sk_buff *skb)
151{ 151{
152 printk(KERN_ERR "SKB BUG: Invalid truesize (%u) " 152 WARN(net_ratelimit(), KERN_ERR "SKB BUG: Invalid truesize (%u) "
153 "len=%u, sizeof(sk_buff)=%Zd\n", 153 "len=%u, sizeof(sk_buff)=%Zd\n",
154 skb->truesize, skb->len, sizeof(struct sk_buff)); 154 skb->truesize, skb->len, sizeof(struct sk_buff));
155} 155}
diff --git a/net/core/sock.c b/net/core/sock.c
index b28764558a7d..ac4f0e79226b 100644
--- a/net/core/sock.c
+++ b/net/core/sock.c
@@ -2043,9 +2043,6 @@ static inline void release_proto_idx(struct proto *prot)
2043 2043
2044int proto_register(struct proto *prot, int alloc_slab) 2044int proto_register(struct proto *prot, int alloc_slab)
2045{ 2045{
2046 char *request_sock_slab_name = NULL;
2047 char *timewait_sock_slab_name;
2048
2049 if (alloc_slab) { 2046 if (alloc_slab) {
2050 prot->slab = kmem_cache_create(prot->name, prot->obj_size, 0, 2047 prot->slab = kmem_cache_create(prot->name, prot->obj_size, 0,
2051 SLAB_HWCACHE_ALIGN | prot->slab_flags, 2048 SLAB_HWCACHE_ALIGN | prot->slab_flags,
@@ -2060,12 +2057,12 @@ int proto_register(struct proto *prot, int alloc_slab)
2060 if (prot->rsk_prot != NULL) { 2057 if (prot->rsk_prot != NULL) {
2061 static const char mask[] = "request_sock_%s"; 2058 static const char mask[] = "request_sock_%s";
2062 2059
2063 request_sock_slab_name = kmalloc(strlen(prot->name) + sizeof(mask) - 1, GFP_KERNEL); 2060 prot->rsk_prot->slab_name = kmalloc(strlen(prot->name) + sizeof(mask) - 1, GFP_KERNEL);
2064 if (request_sock_slab_name == NULL) 2061 if (prot->rsk_prot->slab_name == NULL)
2065 goto out_free_sock_slab; 2062 goto out_free_sock_slab;
2066 2063
2067 sprintf(request_sock_slab_name, mask, prot->name); 2064 sprintf(prot->rsk_prot->slab_name, mask, prot->name);
2068 prot->rsk_prot->slab = kmem_cache_create(request_sock_slab_name, 2065 prot->rsk_prot->slab = kmem_cache_create(prot->rsk_prot->slab_name,
2069 prot->rsk_prot->obj_size, 0, 2066 prot->rsk_prot->obj_size, 0,
2070 SLAB_HWCACHE_ALIGN, NULL); 2067 SLAB_HWCACHE_ALIGN, NULL);
2071 2068
@@ -2079,14 +2076,14 @@ int proto_register(struct proto *prot, int alloc_slab)
2079 if (prot->twsk_prot != NULL) { 2076 if (prot->twsk_prot != NULL) {
2080 static const char mask[] = "tw_sock_%s"; 2077 static const char mask[] = "tw_sock_%s";
2081 2078
2082 timewait_sock_slab_name = kmalloc(strlen(prot->name) + sizeof(mask) - 1, GFP_KERNEL); 2079 prot->twsk_prot->twsk_slab_name = kmalloc(strlen(prot->name) + sizeof(mask) - 1, GFP_KERNEL);
2083 2080
2084 if (timewait_sock_slab_name == NULL) 2081 if (prot->twsk_prot->twsk_slab_name == NULL)
2085 goto out_free_request_sock_slab; 2082 goto out_free_request_sock_slab;
2086 2083
2087 sprintf(timewait_sock_slab_name, mask, prot->name); 2084 sprintf(prot->twsk_prot->twsk_slab_name, mask, prot->name);
2088 prot->twsk_prot->twsk_slab = 2085 prot->twsk_prot->twsk_slab =
2089 kmem_cache_create(timewait_sock_slab_name, 2086 kmem_cache_create(prot->twsk_prot->twsk_slab_name,
2090 prot->twsk_prot->twsk_obj_size, 2087 prot->twsk_prot->twsk_obj_size,
2091 0, 2088 0,
2092 SLAB_HWCACHE_ALIGN | 2089 SLAB_HWCACHE_ALIGN |
@@ -2104,14 +2101,14 @@ int proto_register(struct proto *prot, int alloc_slab)
2104 return 0; 2101 return 0;
2105 2102
2106out_free_timewait_sock_slab_name: 2103out_free_timewait_sock_slab_name:
2107 kfree(timewait_sock_slab_name); 2104 kfree(prot->twsk_prot->twsk_slab_name);
2108out_free_request_sock_slab: 2105out_free_request_sock_slab:
2109 if (prot->rsk_prot && prot->rsk_prot->slab) { 2106 if (prot->rsk_prot && prot->rsk_prot->slab) {
2110 kmem_cache_destroy(prot->rsk_prot->slab); 2107 kmem_cache_destroy(prot->rsk_prot->slab);
2111 prot->rsk_prot->slab = NULL; 2108 prot->rsk_prot->slab = NULL;
2112 } 2109 }
2113out_free_request_sock_slab_name: 2110out_free_request_sock_slab_name:
2114 kfree(request_sock_slab_name); 2111 kfree(prot->rsk_prot->slab_name);
2115out_free_sock_slab: 2112out_free_sock_slab:
2116 kmem_cache_destroy(prot->slab); 2113 kmem_cache_destroy(prot->slab);
2117 prot->slab = NULL; 2114 prot->slab = NULL;
@@ -2134,18 +2131,14 @@ void proto_unregister(struct proto *prot)
2134 } 2131 }
2135 2132
2136 if (prot->rsk_prot != NULL && prot->rsk_prot->slab != NULL) { 2133 if (prot->rsk_prot != NULL && prot->rsk_prot->slab != NULL) {
2137 const char *name = kmem_cache_name(prot->rsk_prot->slab);
2138
2139 kmem_cache_destroy(prot->rsk_prot->slab); 2134 kmem_cache_destroy(prot->rsk_prot->slab);
2140 kfree(name); 2135 kfree(prot->rsk_prot->slab_name);
2141 prot->rsk_prot->slab = NULL; 2136 prot->rsk_prot->slab = NULL;
2142 } 2137 }
2143 2138
2144 if (prot->twsk_prot != NULL && prot->twsk_prot->twsk_slab != NULL) { 2139 if (prot->twsk_prot != NULL && prot->twsk_prot->twsk_slab != NULL) {
2145 const char *name = kmem_cache_name(prot->twsk_prot->twsk_slab);
2146
2147 kmem_cache_destroy(prot->twsk_prot->twsk_slab); 2140 kmem_cache_destroy(prot->twsk_prot->twsk_slab);
2148 kfree(name); 2141 kfree(prot->twsk_prot->twsk_slab_name);
2149 prot->twsk_prot->twsk_slab = NULL; 2142 prot->twsk_prot->twsk_slab = NULL;
2150 } 2143 }
2151} 2144}
diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c
index c069ecb81ea5..76f840917bcb 100644
--- a/net/ipv4/tcp_output.c
+++ b/net/ipv4/tcp_output.c
@@ -722,7 +722,8 @@ static void tcp_queue_skb(struct sock *sk, struct sk_buff *skb)
722static void tcp_set_skb_tso_segs(struct sock *sk, struct sk_buff *skb, 722static void tcp_set_skb_tso_segs(struct sock *sk, struct sk_buff *skb,
723 unsigned int mss_now) 723 unsigned int mss_now)
724{ 724{
725 if (skb->len <= mss_now || !sk_can_gso(sk)) { 725 if (skb->len <= mss_now || !sk_can_gso(sk) ||
726 tcp_urg_mode(tcp_sk(sk))) {
726 /* Avoid the costly divide in the normal 727 /* Avoid the costly divide in the normal
727 * non-TSO case. 728 * non-TSO case.
728 */ 729 */
@@ -1163,7 +1164,9 @@ static int tcp_init_tso_segs(struct sock *sk, struct sk_buff *skb,
1163{ 1164{
1164 int tso_segs = tcp_skb_pcount(skb); 1165 int tso_segs = tcp_skb_pcount(skb);
1165 1166
1166 if (!tso_segs || (tso_segs > 1 && tcp_skb_mss(skb) != mss_now)) { 1167 if (!tso_segs ||
1168 (tso_segs > 1 && (tcp_skb_mss(skb) != mss_now ||
1169 tcp_urg_mode(tcp_sk(sk))))) {
1167 tcp_set_skb_tso_segs(sk, skb, mss_now); 1170 tcp_set_skb_tso_segs(sk, skb, mss_now);
1168 tso_segs = tcp_skb_pcount(skb); 1171 tso_segs = tcp_skb_pcount(skb);
1169 } 1172 }
diff --git a/net/mac80211/wext.c b/net/mac80211/wext.c
index 63f36e9d1af8..b3ce28d35611 100644
--- a/net/mac80211/wext.c
+++ b/net/mac80211/wext.c
@@ -271,6 +271,7 @@ static int ieee80211_ioctl_siwmode(struct net_device *dev,
271 __u32 *mode, char *extra) 271 __u32 *mode, char *extra)
272{ 272{
273 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); 273 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
274 struct ieee80211_local *local = sdata->local;
274 int type; 275 int type;
275 276
276 if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN) 277 if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN)
@@ -281,6 +282,13 @@ static int ieee80211_ioctl_siwmode(struct net_device *dev,
281 type = NL80211_IFTYPE_STATION; 282 type = NL80211_IFTYPE_STATION;
282 break; 283 break;
283 case IW_MODE_ADHOC: 284 case IW_MODE_ADHOC:
285 /* Setting ad-hoc mode on non ibss channel is not
286 * supported.
287 */
288 if (local->oper_channel &&
289 (local->oper_channel->flags & IEEE80211_CHAN_NO_IBSS))
290 return -EOPNOTSUPP;
291
284 type = NL80211_IFTYPE_ADHOC; 292 type = NL80211_IFTYPE_ADHOC;
285 break; 293 break;
286 case IW_MODE_REPEAT: 294 case IW_MODE_REPEAT:
diff --git a/net/netfilter/nf_conntrack_core.c b/net/netfilter/nf_conntrack_core.c
index 622d7c671cb7..233fdd2d7d21 100644
--- a/net/netfilter/nf_conntrack_core.c
+++ b/net/netfilter/nf_conntrack_core.c
@@ -305,9 +305,7 @@ void nf_conntrack_hash_insert(struct nf_conn *ct)
305 hash = hash_conntrack(&ct->tuplehash[IP_CT_DIR_ORIGINAL].tuple); 305 hash = hash_conntrack(&ct->tuplehash[IP_CT_DIR_ORIGINAL].tuple);
306 repl_hash = hash_conntrack(&ct->tuplehash[IP_CT_DIR_REPLY].tuple); 306 repl_hash = hash_conntrack(&ct->tuplehash[IP_CT_DIR_REPLY].tuple);
307 307
308 spin_lock_bh(&nf_conntrack_lock);
309 __nf_conntrack_hash_insert(ct, hash, repl_hash); 308 __nf_conntrack_hash_insert(ct, hash, repl_hash);
310 spin_unlock_bh(&nf_conntrack_lock);
311} 309}
312EXPORT_SYMBOL_GPL(nf_conntrack_hash_insert); 310EXPORT_SYMBOL_GPL(nf_conntrack_hash_insert);
313 311
diff --git a/net/netfilter/nf_conntrack_netlink.c b/net/netfilter/nf_conntrack_netlink.c
index a040d46f85d6..5f4a6516b3b6 100644
--- a/net/netfilter/nf_conntrack_netlink.c
+++ b/net/netfilter/nf_conntrack_netlink.c
@@ -1090,7 +1090,7 @@ ctnetlink_create_conntrack(struct nlattr *cda[],
1090 struct nf_conn_help *help; 1090 struct nf_conn_help *help;
1091 struct nf_conntrack_helper *helper; 1091 struct nf_conntrack_helper *helper;
1092 1092
1093 ct = nf_conntrack_alloc(&init_net, otuple, rtuple, GFP_KERNEL); 1093 ct = nf_conntrack_alloc(&init_net, otuple, rtuple, GFP_ATOMIC);
1094 if (ct == NULL || IS_ERR(ct)) 1094 if (ct == NULL || IS_ERR(ct))
1095 return -ENOMEM; 1095 return -ENOMEM;
1096 1096
@@ -1138,7 +1138,7 @@ ctnetlink_create_conntrack(struct nlattr *cda[],
1138 } 1138 }
1139 } 1139 }
1140 1140
1141 nf_ct_acct_ext_add(ct, GFP_KERNEL); 1141 nf_ct_acct_ext_add(ct, GFP_ATOMIC);
1142 1142
1143#if defined(CONFIG_NF_CONNTRACK_MARK) 1143#if defined(CONFIG_NF_CONNTRACK_MARK)
1144 if (cda[CTA_MARK]) 1144 if (cda[CTA_MARK])
@@ -1212,13 +1212,14 @@ ctnetlink_new_conntrack(struct sock *ctnl, struct sk_buff *skb,
1212 atomic_inc(&master_ct->ct_general.use); 1212 atomic_inc(&master_ct->ct_general.use);
1213 } 1213 }
1214 1214
1215 spin_unlock_bh(&nf_conntrack_lock);
1216 err = -ENOENT; 1215 err = -ENOENT;
1217 if (nlh->nlmsg_flags & NLM_F_CREATE) 1216 if (nlh->nlmsg_flags & NLM_F_CREATE)
1218 err = ctnetlink_create_conntrack(cda, 1217 err = ctnetlink_create_conntrack(cda,
1219 &otuple, 1218 &otuple,
1220 &rtuple, 1219 &rtuple,
1221 master_ct); 1220 master_ct);
1221 spin_unlock_bh(&nf_conntrack_lock);
1222
1222 if (err < 0 && master_ct) 1223 if (err < 0 && master_ct)
1223 nf_ct_put(master_ct); 1224 nf_ct_put(master_ct);
1224 1225
diff --git a/net/rose/af_rose.c b/net/rose/af_rose.c
index a7f1ce11bc22..0c1cc7612800 100644
--- a/net/rose/af_rose.c
+++ b/net/rose/af_rose.c
@@ -1072,6 +1072,10 @@ static int rose_sendmsg(struct kiocb *iocb, struct socket *sock,
1072 unsigned char *asmptr; 1072 unsigned char *asmptr;
1073 int n, size, qbit = 0; 1073 int n, size, qbit = 0;
1074 1074
1075 /* ROSE empty frame has no meaning : don't send */
1076 if (len == 0)
1077 return 0;
1078
1075 if (msg->msg_flags & ~(MSG_DONTWAIT|MSG_EOR|MSG_CMSG_COMPAT)) 1079 if (msg->msg_flags & ~(MSG_DONTWAIT|MSG_EOR|MSG_CMSG_COMPAT))
1076 return -EINVAL; 1080 return -EINVAL;
1077 1081
@@ -1265,6 +1269,12 @@ static int rose_recvmsg(struct kiocb *iocb, struct socket *sock,
1265 skb_reset_transport_header(skb); 1269 skb_reset_transport_header(skb);
1266 copied = skb->len; 1270 copied = skb->len;
1267 1271
1272 /* ROSE empty frame has no meaning : ignore it */
1273 if (copied == 0) {
1274 skb_free_datagram(sk, skb);
1275 return copied;
1276 }
1277
1268 if (copied > size) { 1278 if (copied > size) {
1269 copied = size; 1279 copied = size;
1270 msg->msg_flags |= MSG_TRUNC; 1280 msg->msg_flags |= MSG_TRUNC;