Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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

+215 -85
+1 -1
drivers/net/Makefile
··· 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
-4
drivers/net/chelsio/sge.c
··· 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
-1
drivers/net/e1000e/netdev.c
··· 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
+5 -5
drivers/net/hp-plus.c
··· 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
-4
drivers/net/igb/igb_main.c
··· 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 ··· 2027 2028 2028 2029 /** 2029 2030 * igb_clean_tx_ring - Free Tx Buffers 2030 - * @adapter: board private structure 2031 2031 * @tx_ring: ring to be cleaned 2032 2032 **/ 2033 2033 static void igb_clean_tx_ring(struct igb_ring *tx_ring) ··· 2073 2075 2074 2076 /** 2075 2077 * igb_free_rx_resources - Free Rx Resources 2076 - * @adapter: board private structure 2077 2078 * @rx_ring: ring to clean the resources from 2078 2079 * 2079 2080 * Free all receive software resources ··· 2112 2115 2113 2116 /** 2114 2117 * igb_clean_rx_ring - Free Rx Buffers per Queue 2115 - * @adapter: board private structure 2116 2118 * @rx_ring: ring to free buffers from 2117 2119 **/ 2118 2120 static void igb_clean_rx_ring(struct igb_ring *rx_ring)
-1
drivers/net/ixgbe/ixgbe_main.c
··· 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 {
+1 -1
drivers/net/pcmcia/axnet_cs.c
··· 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), ··· 1174 1173 * ax_interrupt - handle the interrupts from an 8390 1175 1174 * @irq: interrupt number 1176 1175 * @dev_id: a pointer to the net_device 1177 - * @regs: unused 1178 1176 * 1179 1177 * Handle the ether interface interrupts. We pull packets from 1180 1178 * the 8390 via the card specific functions and fire them at the networking
-1
drivers/net/pcmcia/pcnet_cs.c
··· 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),
+11 -2
drivers/net/phy/phy_device.c
··· 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);
+55 -9
drivers/net/phy/vitesse.c
··· 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 ··· 50 48 #define MII_VSC8244_AUXCONSTAT_SPEED 0x0018 51 49 #define MII_VSC8244_AUXCONSTAT_GBIT 0x0010 52 50 #define MII_VSC8244_AUXCONSTAT_100 0x0008 51 + 52 + #define MII_VSC8221_AUXCONSTAT_INIT 0x0004 /* need to set this bit? */ 53 + #define MII_VSC8221_AUXCONSTAT_RESERVED 0x0004 54 + 55 + #define PHY_ID_VSC8244 0x000fc6c0 56 + #define PHY_ID_VSC8221 0x000fc550 53 57 54 58 MODULE_DESCRIPTION("Vitesse PHY driver"); 55 59 MODULE_AUTHOR("Kriston Carson"); ··· 103 95 return (err < 0) ? err : 0; 104 96 } 105 97 106 - static int vsc824x_config_intr(struct phy_device *phydev) 98 + static int vsc82xx_config_intr(struct phy_device *phydev) 107 99 { 108 100 int err; 109 101 110 102 if (phydev->interrupts == PHY_INTERRUPT_ENABLED) 111 103 err = phy_write(phydev, MII_VSC8244_IMASK, 112 - MII_VSC8244_IMASK_MASK); 104 + phydev->drv->phy_id == PHY_ID_VSC8244 ? 105 + MII_VSC8244_IMASK_MASK : 106 + MII_VSC8221_IMASK_MASK); 113 107 else { 114 108 /* 115 109 * The Vitesse PHY cannot clear the interrupt ··· 130 120 131 121 /* Vitesse 824x */ 132 122 static struct phy_driver vsc8244_driver = { 133 - .phy_id = 0x000fc6c0, 123 + .phy_id = PHY_ID_VSC8244, 134 124 .name = "Vitesse VSC8244", 135 125 .phy_id_mask = 0x000fffc0, 136 126 .features = PHY_GBIT_FEATURES, ··· 139 129 .config_aneg = &genphy_config_aneg, 140 130 .read_status = &genphy_read_status, 141 131 .ack_interrupt = &vsc824x_ack_interrupt, 142 - .config_intr = &vsc824x_config_intr, 132 + .config_intr = &vsc82xx_config_intr, 143 133 .driver = { .owner = THIS_MODULE,}, 144 134 }; 145 135 146 - static int __init vsc8244_init(void) 136 + static int vsc8221_config_init(struct phy_device *phydev) 147 137 { 148 - return phy_driver_register(&vsc8244_driver); 138 + int err; 139 + 140 + err = phy_write(phydev, MII_VSC8244_AUX_CONSTAT, 141 + MII_VSC8221_AUXCONSTAT_INIT); 142 + return err; 143 + 144 + /* Perhaps we should set EXT_CON1 based on the interface? 145 + Options are 802.3Z SerDes or SGMII */ 149 146 } 150 147 151 - static void __exit vsc8244_exit(void) 148 + /* Vitesse 8221 */ 149 + static struct phy_driver vsc8221_driver = { 150 + .phy_id = PHY_ID_VSC8221, 151 + .phy_id_mask = 0x000ffff0, 152 + .name = "Vitesse VSC8221", 153 + .features = PHY_GBIT_FEATURES, 154 + .flags = PHY_HAS_INTERRUPT, 155 + .config_init = &vsc8221_config_init, 156 + .config_aneg = &genphy_config_aneg, 157 + .read_status = &genphy_read_status, 158 + .ack_interrupt = &vsc824x_ack_interrupt, 159 + .config_intr = &vsc82xx_config_intr, 160 + .driver = { .owner = THIS_MODULE,}, 161 + }; 162 + 163 + static int __init vsc82xx_init(void) 164 + { 165 + int err; 166 + 167 + err = phy_driver_register(&vsc8244_driver); 168 + if (err < 0) 169 + return err; 170 + err = phy_driver_register(&vsc8221_driver); 171 + if (err < 0) 172 + phy_driver_unregister(&vsc8244_driver); 173 + return err; 174 + } 175 + 176 + static void __exit vsc82xx_exit(void) 152 177 { 153 178 phy_driver_unregister(&vsc8244_driver); 179 + phy_driver_unregister(&vsc8221_driver); 154 180 } 155 181 156 - module_init(vsc8244_init); 157 - module_exit(vsc8244_exit); 182 + module_init(vsc82xx_init); 183 + module_exit(vsc82xx_exit);
-1
drivers/net/sis900.c
··· 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
-4
drivers/net/spider_net.c
··· 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. ··· 866 867 /** 867 868 * spider_net_kick_tx_dma - enables TX DMA processing 868 869 * @card: card structure 869 - * @descr: descriptor address to enable TX processing at 870 870 * 871 871 * This routine will start the transmit DMA running if 872 872 * it is not already running. This routine ned only be ··· 1635 1637 * spider_net_interrupt - interrupt handler for spider_net 1636 1638 * @irq: interrupt number 1637 1639 * @ptr: pointer to net_device 1638 - * @regs: PU registers 1639 1640 * 1640 1641 * returns IRQ_HANDLED, if interrupt was for driver, or IRQ_NONE, if no 1641 1642 * interrupt found raised by card. ··· 2416 2419 2417 2420 /** 2418 2421 * spider_net_setup_pci_dev - sets up the device in terms of PCI operations 2419 - * @card: card structure 2420 2422 * @pdev: PCI device 2421 2423 * 2422 2424 * Returns the card structure or NULL if any errors occur
+1 -1
drivers/net/sungem.c
··· 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) {
+36 -2
drivers/net/wireless/ath5k/base.c
··· 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, ··· 262 257 .get_tx_stats = ath5k_get_tx_stats, 263 258 .get_tsf = ath5k_get_tsf, 264 259 .reset_tsf = ath5k_reset_tsf, 260 + .bss_info_changed = ath5k_bss_info_changed, 265 261 }; 266 262 267 263 /* ··· 2967 2961 sc->opmode != NL80211_IFTYPE_MESH_POINT && 2968 2962 test_bit(ATH_STAT_PROMISC, sc->status)) 2969 2963 rfilt |= AR5K_RX_FILTER_PROM; 2970 - if (sc->opmode == NL80211_IFTYPE_STATION || 2964 + if ((sc->opmode == NL80211_IFTYPE_STATION && sc->assoc) || 2971 2965 sc->opmode == NL80211_IFTYPE_ADHOC || 2972 2966 sc->opmode == NL80211_IFTYPE_AP) 2973 2967 rfilt |= AR5K_RX_FILTER_BEACON; ··· 3107 3101 3108 3102 return ret; 3109 3103 } 3104 + static void 3105 + set_beacon_filter(struct ieee80211_hw *hw, bool enable) 3106 + { 3107 + struct ath5k_softc *sc = hw->priv; 3108 + struct ath5k_hw *ah = sc->ah; 3109 + u32 rfilt; 3110 + rfilt = ath5k_hw_get_rx_filter(ah); 3111 + if (enable) 3112 + rfilt |= AR5K_RX_FILTER_BEACON; 3113 + else 3114 + rfilt &= ~AR5K_RX_FILTER_BEACON; 3115 + ath5k_hw_set_rx_filter(ah, rfilt); 3116 + sc->filter_flags = rfilt; 3117 + } 3110 3118 3119 + static void ath5k_bss_info_changed(struct ieee80211_hw *hw, 3120 + struct ieee80211_vif *vif, 3121 + struct ieee80211_bss_conf *bss_conf, 3122 + u32 changes) 3123 + { 3124 + struct ath5k_softc *sc = hw->priv; 3125 + if (changes & BSS_CHANGED_ASSOC) { 3126 + mutex_lock(&sc->lock); 3127 + sc->assoc = bss_conf->assoc; 3128 + if (sc->opmode == NL80211_IFTYPE_STATION) 3129 + set_beacon_filter(hw, sc->assoc); 3130 + mutex_unlock(&sc->lock); 3131 + } 3132 + }
+1
drivers/net/wireless/ath5k/base.h
··· 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) \
+5 -5
drivers/net/wireless/ath5k/debug.c
··· 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
+5 -5
drivers/net/wireless/ath9k/beacon.c
··· 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 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 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 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 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;
+17 -7
drivers/net/wireless/ath9k/recv.c
··· 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) ··· 91 88 * in rx'd frames. 92 89 */ 93 90 91 + /* Note: the kernel can allocate a value greater than 92 + * what we ask it to give us. We really only need 4 KB as that 93 + * is this hardware supports and in fact we need at least 3849 94 + * as that is the MAX AMSDU size this hardware supports. 95 + * Unfortunately this means we may get 8 KB here from the 96 + * kernel... and that is actually what is observed on some 97 + * systems :( */ 94 98 skb = dev_alloc_skb(len + sc->sc_cachelsz - 1); 95 99 if (skb != NULL) { 96 100 off = ((unsigned long) skb->data) % sc->sc_cachelsz; ··· 308 298 309 299 bf->bf_mpdu = skb; 310 300 bf->bf_buf_addr = pci_map_single(sc->pdev, skb->data, 311 - skb_end_pointer(skb) - skb->head, 301 + sc->sc_rxbufsize, 312 302 PCI_DMA_FROMDEVICE); 313 303 bf->bf_dmacontext = bf->bf_buf_addr; 314 304 } ··· 554 544 if (!requeue_skb) 555 545 goto requeue; 556 546 557 - /* Sync and unmap the frame */ 558 - pci_dma_sync_single_for_cpu(sc->pdev, bf->bf_buf_addr, 559 - skb_tailroom(skb), 547 + pci_dma_sync_single_for_cpu(sc->pdev, 548 + bf->bf_buf_addr, 549 + sc->sc_rxbufsize, 560 550 PCI_DMA_FROMDEVICE); 561 551 pci_unmap_single(sc->pdev, bf->bf_buf_addr, 562 552 sc->sc_rxbufsize,
+5 -3
drivers/net/wireless/iwlwifi/iwl-agn.c
··· 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
+17
drivers/pci/quirks.c
··· 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; ··· 1828 1827 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_SERVERWORKS, 1829 1828 PCI_DEVICE_ID_SERVERWORKS_HT1000_PXB, 1830 1829 ht_enable_msi_mapping); 1830 + 1831 + /* The P5N32-SLI Premium motherboard from Asus has a problem with msi 1832 + * for the MCP55 NIC. It is not yet determined whether the msi problem 1833 + * also affects other devices. As for now, turn off msi for this device. 1834 + */ 1835 + static void __devinit nvenet_msi_disable(struct pci_dev *dev) 1836 + { 1837 + if (dmi_name_in_vendors("P5N32-SLI PREMIUM")) { 1838 + dev_info(&dev->dev, 1839 + "Disabling msi for MCP55 NIC on P5N32-SLI Premium\n"); 1840 + dev->no_msi = 1; 1841 + } 1842 + } 1843 + DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_NVIDIA, 1844 + PCI_DEVICE_ID_NVIDIA_NVENET_15, 1845 + nvenet_msi_disable); 1831 1846 1832 1847 static void __devinit nv_msi_ht_cap_quirk(struct pci_dev *dev) 1833 1848 {
+1 -1
include/linux/netfilter/x_tables.h
··· 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;
+1
include/net/request_sock.h
··· 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,
+1
include/net/timewait_sock.h
··· 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);
+12
net/bridge/br_netfilter.c
··· 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 ··· 128 117 rt->u.dst.path = &rt->u.dst; 129 118 rt->u.dst.metrics[RTAX_MTU - 1] = 1500; 130 119 rt->u.dst.flags = DST_NOXFRM; 120 + rt->u.dst.ops = &fake_dst_ops; 131 121 } 132 122 133 123 static inline struct rtable *bridge_parent_rtable(const struct net_device *dev)
+1 -1
net/core/skbuff.c
··· 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 }
+12 -19
net/core/sock.c
··· 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, ··· 2057 2060 if (prot->rsk_prot != NULL) { 2058 2061 static const char mask[] = "request_sock_%s"; 2059 2062 2060 - request_sock_slab_name = kmalloc(strlen(prot->name) + sizeof(mask) - 1, GFP_KERNEL); 2061 - if (request_sock_slab_name == NULL) 2063 + prot->rsk_prot->slab_name = kmalloc(strlen(prot->name) + sizeof(mask) - 1, GFP_KERNEL); 2064 + if (prot->rsk_prot->slab_name == NULL) 2062 2065 goto out_free_sock_slab; 2063 2066 2064 - sprintf(request_sock_slab_name, mask, prot->name); 2065 - prot->rsk_prot->slab = kmem_cache_create(request_sock_slab_name, 2067 + sprintf(prot->rsk_prot->slab_name, mask, prot->name); 2068 + prot->rsk_prot->slab = kmem_cache_create(prot->rsk_prot->slab_name, 2066 2069 prot->rsk_prot->obj_size, 0, 2067 2070 SLAB_HWCACHE_ALIGN, NULL); 2068 2071 ··· 2076 2079 if (prot->twsk_prot != NULL) { 2077 2080 static const char mask[] = "tw_sock_%s"; 2078 2081 2079 - timewait_sock_slab_name = kmalloc(strlen(prot->name) + sizeof(mask) - 1, GFP_KERNEL); 2082 + prot->twsk_prot->twsk_slab_name = kmalloc(strlen(prot->name) + sizeof(mask) - 1, GFP_KERNEL); 2080 2083 2081 - if (timewait_sock_slab_name == NULL) 2084 + if (prot->twsk_prot->twsk_slab_name == NULL) 2082 2085 goto out_free_request_sock_slab; 2083 2086 2084 - sprintf(timewait_sock_slab_name, mask, prot->name); 2087 + sprintf(prot->twsk_prot->twsk_slab_name, mask, prot->name); 2085 2088 prot->twsk_prot->twsk_slab = 2086 - kmem_cache_create(timewait_sock_slab_name, 2089 + kmem_cache_create(prot->twsk_prot->twsk_slab_name, 2087 2090 prot->twsk_prot->twsk_obj_size, 2088 2091 0, 2089 2092 SLAB_HWCACHE_ALIGN | ··· 2101 2104 return 0; 2102 2105 2103 2106 out_free_timewait_sock_slab_name: 2104 - kfree(timewait_sock_slab_name); 2107 + kfree(prot->twsk_prot->twsk_slab_name); 2105 2108 out_free_request_sock_slab: 2106 2109 if (prot->rsk_prot && prot->rsk_prot->slab) { 2107 2110 kmem_cache_destroy(prot->rsk_prot->slab); 2108 2111 prot->rsk_prot->slab = NULL; 2109 2112 } 2110 2113 out_free_request_sock_slab_name: 2111 - kfree(request_sock_slab_name); 2114 + kfree(prot->rsk_prot->slab_name); 2112 2115 out_free_sock_slab: 2113 2116 kmem_cache_destroy(prot->slab); 2114 2117 prot->slab = NULL; ··· 2131 2134 } 2132 2135 2133 2136 if (prot->rsk_prot != NULL && prot->rsk_prot->slab != NULL) { 2134 - const char *name = kmem_cache_name(prot->rsk_prot->slab); 2135 - 2136 2137 kmem_cache_destroy(prot->rsk_prot->slab); 2137 - kfree(name); 2138 + kfree(prot->rsk_prot->slab_name); 2138 2139 prot->rsk_prot->slab = NULL; 2139 2140 } 2140 2141 2141 2142 if (prot->twsk_prot != NULL && prot->twsk_prot->twsk_slab != NULL) { 2142 - const char *name = kmem_cache_name(prot->twsk_prot->twsk_slab); 2143 - 2144 2143 kmem_cache_destroy(prot->twsk_prot->twsk_slab); 2145 - kfree(name); 2144 + kfree(prot->twsk_prot->twsk_slab_name); 2146 2145 prot->twsk_prot->twsk_slab = NULL; 2147 2146 } 2148 2147 }
+5 -2
net/ipv4/tcp_output.c
··· 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 */ ··· 1164 1163 { 1165 1164 int tso_segs = tcp_skb_pcount(skb); 1166 1165 1167 - if (!tso_segs || (tso_segs > 1 && tcp_skb_mss(skb) != mss_now)) { 1166 + if (!tso_segs || 1167 + (tso_segs > 1 && (tcp_skb_mss(skb) != mss_now || 1168 + tcp_urg_mode(tcp_sk(sk))))) { 1168 1169 tcp_set_skb_tso_segs(sk, skb, mss_now); 1169 1170 tso_segs = tcp_skb_pcount(skb); 1170 1171 }
+8
net/mac80211/wext.c
··· 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) ··· 282 281 type = NL80211_IFTYPE_STATION; 283 282 break; 284 283 case IW_MODE_ADHOC: 284 + /* Setting ad-hoc mode on non ibss channel is not 285 + * supported. 286 + */ 287 + if (local->oper_channel && 288 + (local->oper_channel->flags & IEEE80211_CHAN_NO_IBSS)) 289 + return -EOPNOTSUPP; 290 + 285 291 type = NL80211_IFTYPE_ADHOC; 286 292 break; 287 293 case IW_MODE_REPEAT:
-2
net/netfilter/nf_conntrack_core.c
··· 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
+4 -3
net/netfilter/nf_conntrack_netlink.c
··· 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 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]) ··· 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
+10
net/rose/af_rose.c
··· 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 ··· 1268 1264 1269 1265 skb_reset_transport_header(skb); 1270 1266 copied = skb->len; 1267 + 1268 + /* ROSE empty frame has no meaning : ignore it */ 1269 + if (copied == 0) { 1270 + skb_free_datagram(sk, skb); 1271 + return copied; 1272 + } 1271 1273 1272 1274 if (copied > size) { 1273 1275 copied = size;