Commit 5b9ab2ec04ec1e1e53939768805612ac191d7ba2

Authored by David S. Miller

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
... ... @@ -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
... ... @@ -179,6 +179,7 @@
179 179  
180 180 struct timer_list calib_tim; /* calibration timer */
181 181 int power_level; /* Requested tx power in dbm */
  182 + bool assoc; /* assocate state */
182 183 };
183 184  
184 185 #define ath5k_hw_hasbssidmask(_ah) \
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
... ... @@ -251,7 +251,7 @@
251 251 */
252 252 struct xt_tgchk_param {
253 253 const char *table;
254   - void *entryinfo;
  254 + const void *entryinfo;
255 255 const struct xt_target *target;
256 256 void *targinfo;
257 257 unsigned int hook_mask;
include/net/request_sock.h
... ... @@ -31,6 +31,7 @@
31 31 int family;
32 32 int obj_size;
33 33 struct kmem_cache *slab;
  34 + char *slab_name;
34 35 int (*rtx_syn_ack)(struct sock *sk,
35 36 struct request_sock *req);
36 37 void (*send_ack)(struct sock *sk, struct sk_buff *skb,
include/net/timewait_sock.h
... ... @@ -16,6 +16,7 @@
16 16  
17 17 struct timewait_sock_ops {
18 18 struct kmem_cache *twsk_slab;
  19 + char *twsk_slab_name;
19 20 unsigned int twsk_obj_size;
20 21 int (*twsk_unique)(struct sock *sk,
21 22 struct sock *sktw, void *twp);
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)
... ... @@ -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 }
... ... @@ -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 }
... ... @@ -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  
... ... @@ -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;