Commit 5b9ab2ec04ec1e1e53939768805612ac191d7ba2
Exists in
master
and in
7 other branches
Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
Conflicts: drivers/net/hp-plus.c drivers/net/wireless/ath5k/base.c drivers/net/wireless/ath9k/recv.c net/wireless/reg.c
Showing 31 changed files Side-by-side Diff
- drivers/net/Makefile
- drivers/net/chelsio/sge.c
- drivers/net/e1000e/netdev.c
- drivers/net/hp-plus.c
- drivers/net/igb/igb_main.c
- drivers/net/ixgbe/ixgbe_main.c
- drivers/net/pcmcia/axnet_cs.c
- drivers/net/pcmcia/pcnet_cs.c
- drivers/net/phy/phy_device.c
- drivers/net/phy/vitesse.c
- drivers/net/sis900.c
- drivers/net/spider_net.c
- drivers/net/sungem.c
- drivers/net/wireless/ath5k/base.c
- drivers/net/wireless/ath5k/base.h
- drivers/net/wireless/ath5k/debug.c
- drivers/net/wireless/ath9k/beacon.c
- drivers/net/wireless/ath9k/recv.c
- drivers/net/wireless/iwlwifi/iwl-agn.c
- drivers/pci/quirks.c
- include/linux/netfilter/x_tables.h
- include/net/request_sock.h
- include/net/timewait_sock.h
- net/bridge/br_netfilter.c
- net/core/skbuff.c
- net/core/sock.c
- net/ipv4/tcp_output.c
- net/mac80211/wext.c
- net/netfilter/nf_conntrack_core.c
- net/netfilter/nf_conntrack_netlink.c
- net/rose/af_rose.c
drivers/net/Makefile
... | ... | @@ -113,7 +113,7 @@ |
113 | 113 | obj-$(CONFIG_NE2000) += ne.o 8390p.o |
114 | 114 | obj-$(CONFIG_NE2_MCA) += ne2.o 8390p.o |
115 | 115 | obj-$(CONFIG_HPLAN) += hp.o 8390p.o |
116 | -obj-$(CONFIG_HPLAN_PLUS) += hp-plus.o 8390.o | |
116 | +obj-$(CONFIG_HPLAN_PLUS) += hp-plus.o 8390p.o | |
117 | 117 | obj-$(CONFIG_ULTRA) += smc-ultra.o 8390.o |
118 | 118 | obj-$(CONFIG_ULTRAMCA) += smc-mca.o 8390.o |
119 | 119 | obj-$(CONFIG_ULTRA32) += smc-ultra32.o 8390.o |
drivers/net/chelsio/sge.c
... | ... | @@ -1035,10 +1035,6 @@ |
1035 | 1035 | * @pdev: the PCI device that received the packet |
1036 | 1036 | * @fl: the SGE free list holding the packet |
1037 | 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 | 1039 | * Get the next packet from a free list and complete setup of the |
1044 | 1040 | * sk_buff. If the packet is small we make a copy and recycle the |
drivers/net/e1000e/netdev.c
... | ... | @@ -343,7 +343,6 @@ |
343 | 343 | /** |
344 | 344 | * e1000_alloc_jumbo_rx_buffers - Replace used jumbo receive buffers |
345 | 345 | * @adapter: address of board private structure |
346 | - * @rx_ring: pointer to receive ring structure | |
347 | 346 | * @cleaned_count: number of buffers to allocate this pass |
348 | 347 | **/ |
349 | 348 |
drivers/net/hp-plus.c
... | ... | @@ -161,14 +161,14 @@ |
161 | 161 | static const struct net_device_ops hpp_netdev_ops = { |
162 | 162 | .ndo_open = hpp_open, |
163 | 163 | .ndo_stop = hpp_close, |
164 | - .ndo_start_xmit = ei_start_xmit, | |
165 | - .ndo_tx_timeout = ei_tx_timeout, | |
166 | - .ndo_get_stats = ei_get_stats, | |
167 | - .ndo_set_multicast_list = ei_set_multicast_list, | |
164 | + .ndo_start_xmit = eip_start_xmit, | |
165 | + .ndo_tx_timeout = eip_tx_timeout, | |
166 | + .ndo_get_stats = eip_get_stats, | |
167 | + .ndo_set_multicast_list = eip_set_multicast_list, | |
168 | 168 | .ndo_validate_addr = eth_validate_addr, |
169 | 169 | .ndo_change_mtu = eth_change_mtu, |
170 | 170 | #ifdef CONFIG_NET_POLL_CONTROLLER |
171 | - .ndo_poll_controller = ei_poll, | |
171 | + .ndo_poll_controller = eip_poll, | |
172 | 172 | #endif |
173 | 173 | }; |
174 | 174 |
drivers/net/igb/igb_main.c
... | ... | @@ -1975,7 +1975,6 @@ |
1975 | 1975 | |
1976 | 1976 | /** |
1977 | 1977 | * igb_free_tx_resources - Free Tx Resources per Queue |
1978 | - * @adapter: board private structure | |
1979 | 1978 | * @tx_ring: Tx descriptor ring for a specific queue |
1980 | 1979 | * |
1981 | 1980 | * Free all transmit software resources |
... | ... | @@ -2028,7 +2027,6 @@ |
2028 | 2027 | |
2029 | 2028 | /** |
2030 | 2029 | * igb_clean_tx_ring - Free Tx Buffers |
2031 | - * @adapter: board private structure | |
2032 | 2030 | * @tx_ring: ring to be cleaned |
2033 | 2031 | **/ |
2034 | 2032 | static void igb_clean_tx_ring(struct igb_ring *tx_ring) |
... | ... | @@ -2075,7 +2073,6 @@ |
2075 | 2073 | |
2076 | 2074 | /** |
2077 | 2075 | * igb_free_rx_resources - Free Rx Resources |
2078 | - * @adapter: board private structure | |
2079 | 2076 | * @rx_ring: ring to clean the resources from |
2080 | 2077 | * |
2081 | 2078 | * Free all receive software resources |
... | ... | @@ -2115,7 +2112,6 @@ |
2115 | 2112 | |
2116 | 2113 | /** |
2117 | 2114 | * igb_clean_rx_ring - Free Rx Buffers per Queue |
2118 | - * @adapter: board private structure | |
2119 | 2115 | * @rx_ring: ring to free buffers from |
2120 | 2116 | **/ |
2121 | 2117 | static void igb_clean_rx_ring(struct igb_ring *rx_ring) |
drivers/net/ixgbe/ixgbe_main.c
... | ... | @@ -1352,7 +1352,6 @@ |
1352 | 1352 | * ixgbe_intr - legacy mode Interrupt Handler |
1353 | 1353 | * @irq: interrupt number |
1354 | 1354 | * @data: pointer to a network interface device structure |
1355 | - * @pt_regs: CPU registers structure | |
1356 | 1355 | **/ |
1357 | 1356 | static irqreturn_t ixgbe_intr(int irq, void *data) |
1358 | 1357 | { |
drivers/net/pcmcia/axnet_cs.c
... | ... | @@ -778,6 +778,7 @@ |
778 | 778 | PCMCIA_DEVICE_PROD_ID12("IO DATA", "ETXPCM", 0x547e66dc, 0x233adac2), |
779 | 779 | PCMCIA_DEVICE_PROD_ID12("Linksys", "EtherFast 10/100 PC Card (PCMPC100 V3)", 0x0733cc81, 0x232019a8), |
780 | 780 | PCMCIA_DEVICE_PROD_ID12("MELCO", "LPC3-TX", 0x481e0094, 0xf91af609), |
781 | + PCMCIA_DEVICE_PROD_ID12("NETGEAR", "FA411", 0x9aa79dc3, 0x40fad875), | |
781 | 782 | PCMCIA_DEVICE_PROD_ID12("PCMCIA", "100BASE", 0x281f1c5d, 0x7c2add04), |
782 | 783 | PCMCIA_DEVICE_PROD_ID12("PCMCIA", "FastEtherCard", 0x281f1c5d, 0x7ef26116), |
783 | 784 | PCMCIA_DEVICE_PROD_ID12("PCMCIA", "FEP501", 0x281f1c5d, 0x2e272058), |
... | ... | @@ -1173,7 +1174,6 @@ |
1173 | 1174 | * ax_interrupt - handle the interrupts from an 8390 |
1174 | 1175 | * @irq: interrupt number |
1175 | 1176 | * @dev_id: a pointer to the net_device |
1176 | - * @regs: unused | |
1177 | 1177 | * |
1178 | 1178 | * Handle the ether interface interrupts. We pull packets from |
1179 | 1179 | * the 8390 via the card specific functions and fire them at the networking |
drivers/net/pcmcia/pcnet_cs.c
... | ... | @@ -1692,7 +1692,6 @@ |
1692 | 1692 | PCMCIA_DEVICE_PROD_ID12("National Semiconductor", "InfoMover NE4100", 0x36e1191f, 0xa6617ec8), |
1693 | 1693 | PCMCIA_DEVICE_PROD_ID12("NEC", "PC-9801N-J12", 0x18df0ba0, 0xbc912d76), |
1694 | 1694 | PCMCIA_DEVICE_PROD_ID12("NETGEAR", "FA410TX", 0x9aa79dc3, 0x60e5bc0e), |
1695 | - PCMCIA_DEVICE_PROD_ID12("NETGEAR", "FA411", 0x9aa79dc3, 0x40fad875), | |
1696 | 1695 | PCMCIA_DEVICE_PROD_ID12("Network Everywhere", "Fast Ethernet 10/100 PC Card", 0x820a67b6, 0x31ed1a5f), |
1697 | 1696 | PCMCIA_DEVICE_PROD_ID12("NextCom K.K.", "Next Hawk", 0xaedaec74, 0xad050ef1), |
1698 | 1697 | PCMCIA_DEVICE_PROD_ID12("PCMCIA", "10/100Mbps Ethernet Card", 0x281f1c5d, 0x6e41773b), |
drivers/net/phy/phy_device.c
... | ... | @@ -227,8 +227,17 @@ |
227 | 227 | if (r) |
228 | 228 | return ERR_PTR(r); |
229 | 229 | |
230 | - /* If the phy_id is all Fs or all 0s, there is no device there */ | |
231 | - if ((0xffff == phy_id) || (0x00 == phy_id)) | |
230 | + /* If the phy_id is mostly Fs, there is no device there */ | |
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 | 241 | return NULL; |
233 | 242 | |
234 | 243 | dev = phy_device_create(bus, addr, phy_id); |
drivers/net/phy/vitesse.c
... | ... | @@ -34,6 +34,8 @@ |
34 | 34 | #define MII_VSC8244_IMASK_DUPLEX 0x1000 |
35 | 35 | #define MII_VSC8244_IMASK_MASK 0xf000 |
36 | 36 | |
37 | +#define MII_VSC8221_IMASK_MASK 0xa000 | |
38 | + | |
37 | 39 | /* Vitesse Interrupt Status Register */ |
38 | 40 | #define MII_VSC8244_ISTAT 0x1a |
39 | 41 | #define MII_VSC8244_ISTAT_STATUS 0x8000 |
... | ... | @@ -49,6 +51,12 @@ |
49 | 51 | #define MII_VSC8244_AUXCONSTAT_GBIT 0x0010 |
50 | 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 | + | |
52 | 60 | MODULE_DESCRIPTION("Vitesse PHY driver"); |
53 | 61 | MODULE_AUTHOR("Kriston Carson"); |
54 | 62 | MODULE_LICENSE("GPL"); |
55 | 63 | |
... | ... | @@ -95,13 +103,15 @@ |
95 | 103 | return (err < 0) ? err : 0; |
96 | 104 | } |
97 | 105 | |
98 | -static int vsc824x_config_intr(struct phy_device *phydev) | |
106 | +static int vsc82xx_config_intr(struct phy_device *phydev) | |
99 | 107 | { |
100 | 108 | int err; |
101 | 109 | |
102 | 110 | if (phydev->interrupts == PHY_INTERRUPT_ENABLED) |
103 | 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 | 115 | else { |
106 | 116 | /* |
107 | 117 | * The Vitesse PHY cannot clear the interrupt |
... | ... | @@ -120,7 +130,7 @@ |
120 | 130 | |
121 | 131 | /* Vitesse 824x */ |
122 | 132 | static struct phy_driver vsc8244_driver = { |
123 | - .phy_id = 0x000fc6c0, | |
133 | + .phy_id = PHY_ID_VSC8244, | |
124 | 134 | .name = "Vitesse VSC8244", |
125 | 135 | .phy_id_mask = 0x000fffc0, |
126 | 136 | .features = PHY_GBIT_FEATURES, |
127 | 137 | |
128 | 138 | |
129 | 139 | |
130 | 140 | |
131 | 141 | |
132 | 142 | |
... | ... | @@ -129,20 +139,56 @@ |
129 | 139 | .config_aneg = &genphy_config_aneg, |
130 | 140 | .read_status = &genphy_read_status, |
131 | 141 | .ack_interrupt = &vsc824x_ack_interrupt, |
132 | - .config_intr = &vsc824x_config_intr, | |
142 | + .config_intr = &vsc82xx_config_intr, | |
133 | 143 | .driver = { .owner = THIS_MODULE,}, |
134 | 144 | }; |
135 | 145 | |
136 | -static int __init vsc8244_init(void) | |
146 | +static 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 */ | |
139 | 156 | } |
140 | 157 | |
141 | -static void __exit vsc8244_exit(void) | |
158 | +/* Vitesse 8221 */ | |
159 | +static 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 | + | |
173 | +static int __init vsc82xx_init(void) | |
142 | 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; | |
184 | +} | |
185 | + | |
186 | +static void __exit vsc82xx_exit(void) | |
187 | +{ | |
143 | 188 | phy_driver_unregister(&vsc8244_driver); |
189 | + phy_driver_unregister(&vsc8221_driver); | |
144 | 190 | } |
145 | 191 | |
146 | -module_init(vsc8244_init); | |
147 | -module_exit(vsc8244_exit); | |
192 | +module_init(vsc82xx_init); | |
193 | +module_exit(vsc82xx_exit); |
drivers/net/sis900.c
... | ... | @@ -1634,7 +1634,6 @@ |
1634 | 1634 | * sis900_interrupt - sis900 interrupt handler |
1635 | 1635 | * @irq: the irq number |
1636 | 1636 | * @dev_instance: the client data object |
1637 | - * @regs: snapshot of processor context | |
1638 | 1637 | * |
1639 | 1638 | * The interrupt handler does all of the Rx thread work, |
1640 | 1639 | * and cleans up after the Tx thread |
drivers/net/spider_net.c
... | ... | @@ -672,7 +672,6 @@ |
672 | 672 | /** |
673 | 673 | * spider_net_prepare_tx_descr - fill tx descriptor with skb data |
674 | 674 | * @card: card structure |
675 | - * @descr: descriptor structure to fill out | |
676 | 675 | * @skb: packet to use |
677 | 676 | * |
678 | 677 | * returns 0 on success, <0 on failure. |
... | ... | @@ -867,7 +866,6 @@ |
867 | 866 | /** |
868 | 867 | * spider_net_kick_tx_dma - enables TX DMA processing |
869 | 868 | * @card: card structure |
870 | - * @descr: descriptor address to enable TX processing at | |
871 | 869 | * |
872 | 870 | * This routine will start the transmit DMA running if |
873 | 871 | * it is not already running. This routine ned only be |
... | ... | @@ -1637,7 +1635,6 @@ |
1637 | 1635 | * spider_net_interrupt - interrupt handler for spider_net |
1638 | 1636 | * @irq: interrupt number |
1639 | 1637 | * @ptr: pointer to net_device |
1640 | - * @regs: PU registers | |
1641 | 1638 | * |
1642 | 1639 | * returns IRQ_HANDLED, if interrupt was for driver, or IRQ_NONE, if no |
1643 | 1640 | * interrupt found raised by card. |
... | ... | @@ -2419,7 +2416,6 @@ |
2419 | 2416 | |
2420 | 2417 | /** |
2421 | 2418 | * spider_net_setup_pci_dev - sets up the device in terms of PCI operations |
2422 | - * @card: card structure | |
2423 | 2419 | * @pdev: PCI device |
2424 | 2420 | * |
2425 | 2421 | * Returns the card structure or NULL if any errors occur |
drivers/net/sungem.c
... | ... | @@ -1713,7 +1713,7 @@ |
1713 | 1713 | /* Reset PCS unit. */ |
1714 | 1714 | val = readl(gp->regs + PCS_MIICTRL); |
1715 | 1715 | val |= PCS_MIICTRL_RST; |
1716 | - writeb(val, gp->regs + PCS_MIICTRL); | |
1716 | + writel(val, gp->regs + PCS_MIICTRL); | |
1717 | 1717 | |
1718 | 1718 | limit = 32; |
1719 | 1719 | while (readl(gp->regs + PCS_MIICTRL) & PCS_MIICTRL_RST) { |
drivers/net/wireless/ath5k/base.c
... | ... | @@ -240,7 +240,12 @@ |
240 | 240 | struct ieee80211_tx_queue_stats *stats); |
241 | 241 | static u64 ath5k_get_tsf(struct ieee80211_hw *hw); |
242 | 242 | static void ath5k_reset_tsf(struct ieee80211_hw *hw); |
243 | -static int ath5k_beacon_update(struct ath5k_softc *sc, struct sk_buff *skb); | |
243 | +static int ath5k_beacon_update(struct ath5k_softc *sc, | |
244 | + struct sk_buff *skb); | |
245 | +static 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 | |
245 | 250 | static struct ieee80211_ops ath5k_hw_ops = { |
246 | 251 | .tx = ath5k_tx, |
... | ... | @@ -257,6 +262,7 @@ |
257 | 262 | .get_tx_stats = ath5k_get_tx_stats, |
258 | 263 | .get_tsf = ath5k_get_tsf, |
259 | 264 | .reset_tsf = ath5k_reset_tsf, |
265 | + .bss_info_changed = ath5k_bss_info_changed, | |
260 | 266 | }; |
261 | 267 | |
262 | 268 | /* |
... | ... | @@ -2961,7 +2967,7 @@ |
2961 | 2967 | sc->opmode != NL80211_IFTYPE_MESH_POINT && |
2962 | 2968 | test_bit(ATH_STAT_PROMISC, sc->status)) |
2963 | 2969 | rfilt |= AR5K_RX_FILTER_PROM; |
2964 | - if (sc->opmode == NL80211_IFTYPE_STATION || | |
2970 | + if ((sc->opmode == NL80211_IFTYPE_STATION && sc->assoc) || | |
2965 | 2971 | sc->opmode == NL80211_IFTYPE_ADHOC || |
2966 | 2972 | sc->opmode == NL80211_IFTYPE_AP) |
2967 | 2973 | rfilt |= AR5K_RX_FILTER_BEACON; |
... | ... | @@ -3100,5 +3106,34 @@ |
3100 | 3106 | } |
3101 | 3107 | |
3102 | 3108 | return ret; |
3109 | +} | |
3110 | +static void | |
3111 | +set_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 | +} | |
3124 | + | |
3125 | +static 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 | + } | |
3103 | 3138 | } |
drivers/net/wireless/ath5k/base.h
drivers/net/wireless/ath5k/debug.c
... | ... | @@ -417,19 +417,19 @@ |
417 | 417 | sc->debug.debugfs_phydir = debugfs_create_dir(wiphy_name(sc->hw->wiphy), |
418 | 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 | 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 | 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 | 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 | 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 | 433 | sc->debug.debugfs_phydir, sc, &fops_reset); |
434 | 434 | } |
435 | 435 |
drivers/net/wireless/ath9k/beacon.c
... | ... | @@ -167,7 +167,7 @@ |
167 | 167 | skb = (struct sk_buff *)bf->bf_mpdu; |
168 | 168 | if (skb) { |
169 | 169 | pci_unmap_single(sc->pdev, bf->bf_dmacontext, |
170 | - skb_end_pointer(skb) - skb->head, | |
170 | + skb->len, | |
171 | 171 | PCI_DMA_TODEVICE); |
172 | 172 | } |
173 | 173 | |
... | ... | @@ -190,7 +190,7 @@ |
190 | 190 | |
191 | 191 | bf->bf_buf_addr = bf->bf_dmacontext = |
192 | 192 | pci_map_single(sc->pdev, skb->data, |
193 | - skb_end_pointer(skb) - skb->head, | |
193 | + skb->len, | |
194 | 194 | PCI_DMA_TODEVICE); |
195 | 195 | |
196 | 196 | skb = ieee80211_get_buffered_bc(sc->hw, vif); |
... | ... | @@ -338,7 +338,7 @@ |
338 | 338 | if (bf->bf_mpdu != NULL) { |
339 | 339 | skb = (struct sk_buff *)bf->bf_mpdu; |
340 | 340 | pci_unmap_single(sc->pdev, bf->bf_dmacontext, |
341 | - skb_end_pointer(skb) - skb->head, | |
341 | + skb->len, | |
342 | 342 | PCI_DMA_TODEVICE); |
343 | 343 | dev_kfree_skb_any(skb); |
344 | 344 | bf->bf_mpdu = NULL; |
... | ... | @@ -398,7 +398,7 @@ |
398 | 398 | |
399 | 399 | bf->bf_buf_addr = bf->bf_dmacontext = |
400 | 400 | pci_map_single(sc->pdev, skb->data, |
401 | - skb_end_pointer(skb) - skb->head, | |
401 | + skb->len, | |
402 | 402 | PCI_DMA_TODEVICE); |
403 | 403 | bf->bf_mpdu = skb; |
404 | 404 | |
... | ... | @@ -419,7 +419,7 @@ |
419 | 419 | if (bf->bf_mpdu != NULL) { |
420 | 420 | struct sk_buff *skb = (struct sk_buff *)bf->bf_mpdu; |
421 | 421 | pci_unmap_single(sc->pdev, bf->bf_dmacontext, |
422 | - skb_end_pointer(skb) - skb->head, | |
422 | + skb->len, | |
423 | 423 | PCI_DMA_TODEVICE); |
424 | 424 | dev_kfree_skb_any(skb); |
425 | 425 | bf->bf_mpdu = NULL; |
drivers/net/wireless/ath9k/recv.c
... | ... | @@ -41,9 +41,12 @@ |
41 | 41 | ASSERT(skb != NULL); |
42 | 42 | ds->ds_vdata = skb->data; |
43 | 43 | |
44 | - /* setup rx descriptors */ | |
45 | - ath9k_hw_setuprxdesc(ah, ds, | |
46 | - skb_tailroom(skb), /* buffer size */ | |
44 | + /* setup rx descriptors. The sc_rxbufsize here tells the harware | |
45 | + * how much data it can DMA to us and that we are prepared | |
46 | + * to process */ | |
47 | + ath9k_hw_setuprxdesc(ah, | |
48 | + ds, | |
49 | + sc->sc_rxbufsize, | |
47 | 50 | 0); |
48 | 51 | |
49 | 52 | if (sc->sc_rxlink == NULL) |
... | ... | @@ -88,6 +91,13 @@ |
88 | 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 | 101 | skb = dev_alloc_skb(len + sc->sc_cachelsz - 1); |
92 | 102 | if (skb != NULL) { |
93 | 103 | off = ((unsigned long) skb->data) % sc->sc_cachelsz; |
... | ... | @@ -298,7 +308,7 @@ |
298 | 308 | |
299 | 309 | bf->bf_mpdu = skb; |
300 | 310 | bf->bf_buf_addr = pci_map_single(sc->pdev, skb->data, |
301 | - skb_end_pointer(skb) - skb->head, | |
311 | + sc->sc_rxbufsize, | |
302 | 312 | PCI_DMA_FROMDEVICE); |
303 | 313 | bf->bf_dmacontext = bf->bf_buf_addr; |
304 | 314 | } |
... | ... | @@ -544,9 +554,9 @@ |
544 | 554 | if (!requeue_skb) |
545 | 555 | goto requeue; |
546 | 556 | |
547 | - /* Sync and unmap the frame */ | |
548 | - pci_dma_sync_single_for_cpu(sc->pdev, bf->bf_buf_addr, | |
549 | - skb_tailroom(skb), | |
557 | + pci_dma_sync_single_for_cpu(sc->pdev, | |
558 | + bf->bf_buf_addr, | |
559 | + sc->sc_rxbufsize, | |
550 | 560 | PCI_DMA_FROMDEVICE); |
551 | 561 | pci_unmap_single(sc->pdev, bf->bf_buf_addr, |
552 | 562 | sc->sc_rxbufsize, |
drivers/net/wireless/iwlwifi/iwl-agn.c
... | ... | @@ -1228,9 +1228,11 @@ |
1228 | 1228 | |
1229 | 1229 | rxq->queue[i] = NULL; |
1230 | 1230 | |
1231 | - pci_dma_sync_single_for_cpu(priv->pci_dev, rxb->aligned_dma_addr, | |
1232 | - priv->hw_params.rx_buf_size, | |
1233 | - PCI_DMA_FROMDEVICE); | |
1231 | + dma_sync_single_range_for_cpu( | |
1232 | + &priv->pci_dev->dev, rxb->real_dma_addr, | |
1233 | + rxb->aligned_dma_addr - rxb->real_dma_addr, | |
1234 | + priv->hw_params.rx_buf_size, | |
1235 | + PCI_DMA_FROMDEVICE); | |
1234 | 1236 | pkt = (struct iwl_rx_packet *)rxb->skb->data; |
1235 | 1237 | |
1236 | 1238 | /* Reclaim a command buffer only if this packet is a response |
drivers/pci/quirks.c
... | ... | @@ -22,6 +22,7 @@ |
22 | 22 | #include <linux/delay.h> |
23 | 23 | #include <linux/acpi.h> |
24 | 24 | #include <linux/kallsyms.h> |
25 | +#include <linux/dmi.h> | |
25 | 26 | #include "pci.h" |
26 | 27 | |
27 | 28 | int isa_dma_bridge_buggy; |
... | ... | @@ -1827,6 +1828,22 @@ |
1827 | 1828 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_SERVERWORKS, |
1828 | 1829 | PCI_DEVICE_ID_SERVERWORKS_HT1000_PXB, |
1829 | 1830 | ht_enable_msi_mapping); |
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 | + */ | |
1836 | +static 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 | +} | |
1844 | +DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_NVIDIA, | |
1845 | + PCI_DEVICE_ID_NVIDIA_NVENET_15, | |
1846 | + nvenet_msi_disable); | |
1830 | 1847 | |
1831 | 1848 | static void __devinit nv_msi_ht_cap_quirk(struct pci_dev *dev) |
1832 | 1849 | { |
include/linux/netfilter/x_tables.h
include/net/request_sock.h
include/net/timewait_sock.h
net/bridge/br_netfilter.c
... | ... | @@ -101,6 +101,17 @@ |
101 | 101 | pppoe_proto(skb) == htons(PPP_IPV6) && \ |
102 | 102 | brnf_filter_pppoe_tagged) |
103 | 103 | |
104 | +static void fake_update_pmtu(struct dst_entry *dst, u32 mtu) | |
105 | +{ | |
106 | +} | |
107 | + | |
108 | +static 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 | 116 | * Initialize bogus route table used to keep netfilter happy. |
106 | 117 | * Currently, we fill in the PMTU entry because netfilter |
... | ... | @@ -117,6 +128,7 @@ |
117 | 128 | rt->u.dst.path = &rt->u.dst; |
118 | 129 | rt->u.dst.metrics[RTAX_MTU - 1] = 1500; |
119 | 130 | rt->u.dst.flags = DST_NOXFRM; |
131 | + rt->u.dst.ops = &fake_dst_ops; | |
120 | 132 | } |
121 | 133 | |
122 | 134 | static inline struct rtable *bridge_parent_rtable(const struct net_device *dev) |
net/core/skbuff.c
... | ... | @@ -149,7 +149,7 @@ |
149 | 149 | |
150 | 150 | void 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 | 153 | "len=%u, sizeof(sk_buff)=%Zd\n", |
154 | 154 | skb->truesize, skb->len, sizeof(struct sk_buff)); |
155 | 155 | } |
net/core/sock.c
... | ... | @@ -2043,9 +2043,6 @@ |
2043 | 2043 | |
2044 | 2044 | int 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 | 2046 | if (alloc_slab) { |
2050 | 2047 | prot->slab = kmem_cache_create(prot->name, prot->obj_size, 0, |
2051 | 2048 | SLAB_HWCACHE_ALIGN | prot->slab_flags, |
2052 | 2049 | |
... | ... | @@ -2060,12 +2057,12 @@ |
2060 | 2057 | if (prot->rsk_prot != NULL) { |
2061 | 2058 | static const char mask[] = "request_sock_%s"; |
2062 | 2059 | |
2063 | - request_sock_slab_name = kmalloc(strlen(prot->name) + sizeof(mask) - 1, GFP_KERNEL); | |
2064 | - if (request_sock_slab_name == NULL) | |
2060 | + prot->rsk_prot->slab_name = kmalloc(strlen(prot->name) + sizeof(mask) - 1, GFP_KERNEL); | |
2061 | + if (prot->rsk_prot->slab_name == NULL) | |
2065 | 2062 | goto out_free_sock_slab; |
2066 | 2063 | |
2067 | - sprintf(request_sock_slab_name, mask, prot->name); | |
2068 | - prot->rsk_prot->slab = kmem_cache_create(request_sock_slab_name, | |
2064 | + sprintf(prot->rsk_prot->slab_name, mask, prot->name); | |
2065 | + prot->rsk_prot->slab = kmem_cache_create(prot->rsk_prot->slab_name, | |
2069 | 2066 | prot->rsk_prot->obj_size, 0, |
2070 | 2067 | SLAB_HWCACHE_ALIGN, NULL); |
2071 | 2068 | |
2072 | 2069 | |
2073 | 2070 | |
2074 | 2071 | |
... | ... | @@ -2079,14 +2076,14 @@ |
2079 | 2076 | if (prot->twsk_prot != NULL) { |
2080 | 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 | 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 | 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 | 2087 | prot->twsk_prot->twsk_obj_size, |
2091 | 2088 | 0, |
2092 | 2089 | SLAB_HWCACHE_ALIGN | |
2093 | 2090 | |
... | ... | @@ -2104,14 +2101,14 @@ |
2104 | 2101 | return 0; |
2105 | 2102 | |
2106 | 2103 | out_free_timewait_sock_slab_name: |
2107 | - kfree(timewait_sock_slab_name); | |
2104 | + kfree(prot->twsk_prot->twsk_slab_name); | |
2108 | 2105 | out_free_request_sock_slab: |
2109 | 2106 | if (prot->rsk_prot && prot->rsk_prot->slab) { |
2110 | 2107 | kmem_cache_destroy(prot->rsk_prot->slab); |
2111 | 2108 | prot->rsk_prot->slab = NULL; |
2112 | 2109 | } |
2113 | 2110 | out_free_request_sock_slab_name: |
2114 | - kfree(request_sock_slab_name); | |
2111 | + kfree(prot->rsk_prot->slab_name); | |
2115 | 2112 | out_free_sock_slab: |
2116 | 2113 | kmem_cache_destroy(prot->slab); |
2117 | 2114 | prot->slab = NULL; |
2118 | 2115 | |
2119 | 2116 | |
2120 | 2117 | |
... | ... | @@ -2134,18 +2131,14 @@ |
2134 | 2131 | } |
2135 | 2132 | |
2136 | 2133 | if (prot->rsk_prot != NULL && prot->rsk_prot->slab != NULL) { |
2137 | - const char *name = kmem_cache_name(prot->rsk_prot->slab); | |
2138 | - | |
2139 | 2134 | kmem_cache_destroy(prot->rsk_prot->slab); |
2140 | - kfree(name); | |
2135 | + kfree(prot->rsk_prot->slab_name); | |
2141 | 2136 | prot->rsk_prot->slab = NULL; |
2142 | 2137 | } |
2143 | 2138 | |
2144 | 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 | 2140 | kmem_cache_destroy(prot->twsk_prot->twsk_slab); |
2148 | - kfree(name); | |
2141 | + kfree(prot->twsk_prot->twsk_slab_name); | |
2149 | 2142 | prot->twsk_prot->twsk_slab = NULL; |
2150 | 2143 | } |
2151 | 2144 | } |
net/ipv4/tcp_output.c
... | ... | @@ -722,7 +722,8 @@ |
722 | 722 | static void tcp_set_skb_tso_segs(struct sock *sk, struct sk_buff *skb, |
723 | 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 | 727 | /* Avoid the costly divide in the normal |
727 | 728 | * non-TSO case. |
728 | 729 | */ |
... | ... | @@ -1163,7 +1164,9 @@ |
1163 | 1164 | { |
1164 | 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 | 1170 | tcp_set_skb_tso_segs(sk, skb, mss_now); |
1168 | 1171 | tso_segs = tcp_skb_pcount(skb); |
1169 | 1172 | } |
net/mac80211/wext.c
... | ... | @@ -271,6 +271,7 @@ |
271 | 271 | __u32 *mode, char *extra) |
272 | 272 | { |
273 | 273 | struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); |
274 | + struct ieee80211_local *local = sdata->local; | |
274 | 275 | int type; |
275 | 276 | |
276 | 277 | if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN) |
... | ... | @@ -281,6 +282,13 @@ |
281 | 282 | type = NL80211_IFTYPE_STATION; |
282 | 283 | break; |
283 | 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 | 292 | type = NL80211_IFTYPE_ADHOC; |
285 | 293 | break; |
286 | 294 | case IW_MODE_REPEAT: |
net/netfilter/nf_conntrack_core.c
... | ... | @@ -305,9 +305,7 @@ |
305 | 305 | hash = hash_conntrack(&ct->tuplehash[IP_CT_DIR_ORIGINAL].tuple); |
306 | 306 | repl_hash = hash_conntrack(&ct->tuplehash[IP_CT_DIR_REPLY].tuple); |
307 | 307 | |
308 | - spin_lock_bh(&nf_conntrack_lock); | |
309 | 308 | __nf_conntrack_hash_insert(ct, hash, repl_hash); |
310 | - spin_unlock_bh(&nf_conntrack_lock); | |
311 | 309 | } |
312 | 310 | EXPORT_SYMBOL_GPL(nf_conntrack_hash_insert); |
313 | 311 |
net/netfilter/nf_conntrack_netlink.c
... | ... | @@ -1090,7 +1090,7 @@ |
1090 | 1090 | struct nf_conn_help *help; |
1091 | 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 | 1094 | if (ct == NULL || IS_ERR(ct)) |
1095 | 1095 | return -ENOMEM; |
1096 | 1096 | |
... | ... | @@ -1138,7 +1138,7 @@ |
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 | 1143 | #if defined(CONFIG_NF_CONNTRACK_MARK) |
1144 | 1144 | if (cda[CTA_MARK]) |
1145 | 1145 | |
... | ... | @@ -1212,13 +1212,14 @@ |
1212 | 1212 | atomic_inc(&master_ct->ct_general.use); |
1213 | 1213 | } |
1214 | 1214 | |
1215 | - spin_unlock_bh(&nf_conntrack_lock); | |
1216 | 1215 | err = -ENOENT; |
1217 | 1216 | if (nlh->nlmsg_flags & NLM_F_CREATE) |
1218 | 1217 | err = ctnetlink_create_conntrack(cda, |
1219 | 1218 | &otuple, |
1220 | 1219 | &rtuple, |
1221 | 1220 | master_ct); |
1221 | + spin_unlock_bh(&nf_conntrack_lock); | |
1222 | + | |
1222 | 1223 | if (err < 0 && master_ct) |
1223 | 1224 | nf_ct_put(master_ct); |
1224 | 1225 |
net/rose/af_rose.c
... | ... | @@ -1072,6 +1072,10 @@ |
1072 | 1072 | unsigned char *asmptr; |
1073 | 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 | 1079 | if (msg->msg_flags & ~(MSG_DONTWAIT|MSG_EOR|MSG_CMSG_COMPAT)) |
1076 | 1080 | return -EINVAL; |
1077 | 1081 | |
... | ... | @@ -1264,6 +1268,12 @@ |
1264 | 1268 | |
1265 | 1269 | skb_reset_transport_header(skb); |
1266 | 1270 | copied = skb->len; |
1271 | + | |
1272 | + /* ROSE empty frame has no meaning : ignore it */ | |
1273 | + if (copied == 0) { | |
1274 | + skb_free_datagram(sk, skb); | |
1275 | + return copied; | |
1276 | + } | |
1267 | 1277 | |
1268 | 1278 | if (copied > size) { |
1269 | 1279 | copied = size; |