Commit 116b23b0ed36f8d5b56d16ac50266fce8de904c1
Exists in
master
and in
4 other branches
Merge branch 'upstream-linus' of master.kernel.org:/pub/scm/linux/kernel/git/jgarzik/netdev-2.6
* 'upstream-linus' of master.kernel.org:/pub/scm/linux/kernel/git/jgarzik/netdev-2.6: [PATCH] Fix an offset error when reading the CS89x0 ADD_PORT register [PATCH] spidernet: poor network performance [PATCH] Spidernet: remove ETH_ZLEN check in earlier patch [PATCH] bonding: fix an oops when slave device does not provide get_stats [PATCH] drivers/net: SAA9730: Fix build error Revert "[PATCH] zd1211rw: Removed unneeded packed attributes" [PATCH] zd1211rw: Fix of a locking bug [PATCH] softmac: remove netif_tx_disable when scanning [PATCH] ieee80211: Fix kernel panic when QoS is enabled
Showing 12 changed files Side-by-side Diff
- drivers/net/Kconfig
- drivers/net/bonding/bond_main.c
- drivers/net/cs89x0.c
- drivers/net/spider_net.c
- drivers/net/spider_net.h
- drivers/net/wireless/zd1211rw/zd_ieee80211.h
- drivers/net/wireless/zd1211rw/zd_mac.c
- drivers/net/wireless/zd1211rw/zd_mac.h
- drivers/net/wireless/zd1211rw/zd_usb.c
- drivers/net/wireless/zd1211rw/zd_usb.h
- net/ieee80211/ieee80211_tx.c
- net/ieee80211/softmac/ieee80211softmac_scan.c
drivers/net/Kconfig
... | ... | @@ -1769,8 +1769,8 @@ |
1769 | 1769 | information. |
1770 | 1770 | |
1771 | 1771 | config LAN_SAA9730 |
1772 | - bool "Philips SAA9730 Ethernet support (EXPERIMENTAL)" | |
1773 | - depends on NET_PCI && EXPERIMENTAL && MIPS | |
1772 | + bool "Philips SAA9730 Ethernet support" | |
1773 | + depends on NET_PCI && PCI && MIPS_ATLAS | |
1774 | 1774 | help |
1775 | 1775 | The SAA9730 is a combined multimedia and peripheral controller used |
1776 | 1776 | in thin clients, Internet access terminals, and diskless |
drivers/net/bonding/bond_main.c
... | ... | @@ -1336,6 +1336,13 @@ |
1336 | 1336 | goto err_undo_flags; |
1337 | 1337 | } |
1338 | 1338 | |
1339 | + if (slave_dev->get_stats == NULL) { | |
1340 | + printk(KERN_NOTICE DRV_NAME | |
1341 | + ": %s: the driver for slave device %s does not provide " | |
1342 | + "get_stats function, network statistics will be " | |
1343 | + "inaccurate.\n", bond_dev->name, slave_dev->name); | |
1344 | + } | |
1345 | + | |
1339 | 1346 | new_slave = kmalloc(sizeof(struct slave), GFP_KERNEL); |
1340 | 1347 | if (!new_slave) { |
1341 | 1348 | res = -ENOMEM; |
1342 | 1349 | |
1343 | 1350 | |
1344 | 1351 | |
1345 | 1352 | |
1346 | 1353 | |
... | ... | @@ -3605,33 +3612,35 @@ |
3605 | 3612 | read_lock_bh(&bond->lock); |
3606 | 3613 | |
3607 | 3614 | bond_for_each_slave(bond, slave, i) { |
3608 | - sstats = slave->dev->get_stats(slave->dev); | |
3615 | + if (slave->dev->get_stats) { | |
3616 | + sstats = slave->dev->get_stats(slave->dev); | |
3609 | 3617 | |
3610 | - stats->rx_packets += sstats->rx_packets; | |
3611 | - stats->rx_bytes += sstats->rx_bytes; | |
3612 | - stats->rx_errors += sstats->rx_errors; | |
3613 | - stats->rx_dropped += sstats->rx_dropped; | |
3618 | + stats->rx_packets += sstats->rx_packets; | |
3619 | + stats->rx_bytes += sstats->rx_bytes; | |
3620 | + stats->rx_errors += sstats->rx_errors; | |
3621 | + stats->rx_dropped += sstats->rx_dropped; | |
3614 | 3622 | |
3615 | - stats->tx_packets += sstats->tx_packets; | |
3616 | - stats->tx_bytes += sstats->tx_bytes; | |
3617 | - stats->tx_errors += sstats->tx_errors; | |
3618 | - stats->tx_dropped += sstats->tx_dropped; | |
3623 | + stats->tx_packets += sstats->tx_packets; | |
3624 | + stats->tx_bytes += sstats->tx_bytes; | |
3625 | + stats->tx_errors += sstats->tx_errors; | |
3626 | + stats->tx_dropped += sstats->tx_dropped; | |
3619 | 3627 | |
3620 | - stats->multicast += sstats->multicast; | |
3621 | - stats->collisions += sstats->collisions; | |
3628 | + stats->multicast += sstats->multicast; | |
3629 | + stats->collisions += sstats->collisions; | |
3622 | 3630 | |
3623 | - stats->rx_length_errors += sstats->rx_length_errors; | |
3624 | - stats->rx_over_errors += sstats->rx_over_errors; | |
3625 | - stats->rx_crc_errors += sstats->rx_crc_errors; | |
3626 | - stats->rx_frame_errors += sstats->rx_frame_errors; | |
3627 | - stats->rx_fifo_errors += sstats->rx_fifo_errors; | |
3628 | - stats->rx_missed_errors += sstats->rx_missed_errors; | |
3631 | + stats->rx_length_errors += sstats->rx_length_errors; | |
3632 | + stats->rx_over_errors += sstats->rx_over_errors; | |
3633 | + stats->rx_crc_errors += sstats->rx_crc_errors; | |
3634 | + stats->rx_frame_errors += sstats->rx_frame_errors; | |
3635 | + stats->rx_fifo_errors += sstats->rx_fifo_errors; | |
3636 | + stats->rx_missed_errors += sstats->rx_missed_errors; | |
3629 | 3637 | |
3630 | - stats->tx_aborted_errors += sstats->tx_aborted_errors; | |
3631 | - stats->tx_carrier_errors += sstats->tx_carrier_errors; | |
3632 | - stats->tx_fifo_errors += sstats->tx_fifo_errors; | |
3633 | - stats->tx_heartbeat_errors += sstats->tx_heartbeat_errors; | |
3634 | - stats->tx_window_errors += sstats->tx_window_errors; | |
3638 | + stats->tx_aborted_errors += sstats->tx_aborted_errors; | |
3639 | + stats->tx_carrier_errors += sstats->tx_carrier_errors; | |
3640 | + stats->tx_fifo_errors += sstats->tx_fifo_errors; | |
3641 | + stats->tx_heartbeat_errors += sstats->tx_heartbeat_errors; | |
3642 | + stats->tx_window_errors += sstats->tx_window_errors; | |
3643 | + } | |
3635 | 3644 | } |
3636 | 3645 | |
3637 | 3646 | read_unlock_bh(&bond->lock); |
drivers/net/cs89x0.c
... | ... | @@ -588,10 +588,10 @@ |
588 | 588 | goto out2; |
589 | 589 | } |
590 | 590 | } |
591 | - printk(KERN_DEBUG "PP_addr at %x[%x]: 0x%x\n", | |
592 | - ioaddr, ADD_PORT, readword(ioaddr, ADD_PORT)); | |
593 | 591 | |
594 | 592 | ioaddr &= ~3; |
593 | + printk(KERN_DEBUG "PP_addr at %x[%x]: 0x%x\n", | |
594 | + ioaddr, ADD_PORT, readword(ioaddr, ADD_PORT)); | |
595 | 595 | writeword(ioaddr, ADD_PORT, PP_ChipID); |
596 | 596 | |
597 | 597 | tmp = readword(ioaddr, DATA_PORT); |
drivers/net/spider_net.c
... | ... | @@ -644,20 +644,12 @@ |
644 | 644 | struct spider_net_descr *descr; |
645 | 645 | dma_addr_t buf; |
646 | 646 | unsigned long flags; |
647 | - int length; | |
648 | 647 | |
649 | - length = skb->len; | |
650 | - if (length < ETH_ZLEN) { | |
651 | - if (skb_pad(skb, ETH_ZLEN-length)) | |
652 | - return 0; | |
653 | - length = ETH_ZLEN; | |
654 | - } | |
655 | - | |
656 | - buf = pci_map_single(card->pdev, skb->data, length, PCI_DMA_TODEVICE); | |
648 | + buf = pci_map_single(card->pdev, skb->data, skb->len, PCI_DMA_TODEVICE); | |
657 | 649 | if (pci_dma_mapping_error(buf)) { |
658 | 650 | if (netif_msg_tx_err(card) && net_ratelimit()) |
659 | 651 | pr_err("could not iommu-map packet (%p, %i). " |
660 | - "Dropping packet\n", skb->data, length); | |
652 | + "Dropping packet\n", skb->data, skb->len); | |
661 | 653 | card->spider_stats.tx_iommu_map_error++; |
662 | 654 | return -ENOMEM; |
663 | 655 | } |
... | ... | @@ -667,7 +659,7 @@ |
667 | 659 | card->tx_chain.head = descr->next; |
668 | 660 | |
669 | 661 | descr->buf_addr = buf; |
670 | - descr->buf_size = length; | |
662 | + descr->buf_size = skb->len; | |
671 | 663 | descr->next_descr_addr = 0; |
672 | 664 | descr->skb = skb; |
673 | 665 | descr->data_status = 0; |
... | ... | @@ -802,8 +794,8 @@ |
802 | 794 | |
803 | 795 | /* unmap the skb */ |
804 | 796 | if (skb) { |
805 | - int len = skb->len < ETH_ZLEN ? ETH_ZLEN : skb->len; | |
806 | - pci_unmap_single(card->pdev, buf_addr, len, PCI_DMA_TODEVICE); | |
797 | + pci_unmap_single(card->pdev, buf_addr, skb->len, | |
798 | + PCI_DMA_TODEVICE); | |
807 | 799 | dev_kfree_skb(skb); |
808 | 800 | } |
809 | 801 | } |
... | ... | @@ -1641,7 +1633,7 @@ |
1641 | 1633 | SPIDER_NET_INT2_MASK_VALUE); |
1642 | 1634 | |
1643 | 1635 | spider_net_write_reg(card, SPIDER_NET_GDTDMACCNTR, |
1644 | - SPIDER_NET_GDTBSTA | SPIDER_NET_GDTDCEIDIS); | |
1636 | + SPIDER_NET_GDTBSTA); | |
1645 | 1637 | } |
1646 | 1638 | |
1647 | 1639 | /** |
drivers/net/spider_net.h
... | ... | @@ -24,7 +24,7 @@ |
24 | 24 | #ifndef _SPIDER_NET_H |
25 | 25 | #define _SPIDER_NET_H |
26 | 26 | |
27 | -#define VERSION "1.1 A" | |
27 | +#define VERSION "1.6 A" | |
28 | 28 | |
29 | 29 | #include "sungem_phy.h" |
30 | 30 | |
... | ... | @@ -217,8 +217,7 @@ |
217 | 217 | #define SPIDER_NET_GDTBSTA 0x00000300 |
218 | 218 | #define SPIDER_NET_GDTDCEIDIS 0x00000002 |
219 | 219 | #define SPIDER_NET_DMA_TX_VALUE SPIDER_NET_TX_DMA_EN | \ |
220 | - SPIDER_NET_GDTBSTA | \ | |
221 | - SPIDER_NET_GDTDCEIDIS | |
220 | + SPIDER_NET_GDTBSTA | |
222 | 221 | |
223 | 222 | #define SPIDER_NET_DMA_TX_FEND_VALUE 0x00030003 |
224 | 223 | |
... | ... | @@ -328,7 +327,8 @@ |
328 | 327 | SPIDER_NET_GRISPDNGINT |
329 | 328 | }; |
330 | 329 | |
331 | -#define SPIDER_NET_TXINT ( (1 << SPIDER_NET_GDTFDCINT) ) | |
330 | +#define SPIDER_NET_TXINT ( (1 << SPIDER_NET_GDTFDCINT) | \ | |
331 | + (1 << SPIDER_NET_GDTDCEINT) ) | |
332 | 332 | |
333 | 333 | /* We rely on flagged descriptor interrupts */ |
334 | 334 | #define SPIDER_NET_RXINT ( (1 << SPIDER_NET_GDAFDCINT) ) |
drivers/net/wireless/zd1211rw/zd_ieee80211.h
drivers/net/wireless/zd1211rw/zd_mac.c
drivers/net/wireless/zd1211rw/zd_mac.h
... | ... | @@ -82,7 +82,7 @@ |
82 | 82 | struct rx_length_info { |
83 | 83 | __le16 length[3]; |
84 | 84 | __le16 tag; |
85 | -}; | |
85 | +} __attribute__((packed)); | |
86 | 86 | |
87 | 87 | #define RX_LENGTH_INFO_TAG 0x697e |
88 | 88 | |
... | ... | @@ -93,7 +93,7 @@ |
93 | 93 | u8 signal_quality_ofdm; |
94 | 94 | u8 decryption_type; |
95 | 95 | u8 frame_status; |
96 | -}; | |
96 | +} __attribute__((packed)); | |
97 | 97 | |
98 | 98 | /* rx_status field decryption_type */ |
99 | 99 | #define ZD_RX_NO_WEP 0 |
drivers/net/wireless/zd1211rw/zd_usb.c
... | ... | @@ -366,15 +366,6 @@ |
366 | 366 | return r; |
367 | 367 | } |
368 | 368 | |
369 | -static void disable_read_regs_int(struct zd_usb *usb) | |
370 | -{ | |
371 | - struct zd_usb_interrupt *intr = &usb->intr; | |
372 | - | |
373 | - spin_lock(&intr->lock); | |
374 | - intr->read_regs_enabled = 0; | |
375 | - spin_unlock(&intr->lock); | |
376 | -} | |
377 | - | |
378 | 369 | #define urb_dev(urb) (&(urb)->dev->dev) |
379 | 370 | |
380 | 371 | static inline void handle_regs_int(struct urb *urb) |
381 | 372 | |
382 | 373 | |
... | ... | @@ -1156,12 +1147,21 @@ |
1156 | 1147 | { |
1157 | 1148 | struct zd_usb_interrupt *intr = &usb->intr; |
1158 | 1149 | |
1159 | - spin_lock(&intr->lock); | |
1150 | + spin_lock_irq(&intr->lock); | |
1160 | 1151 | intr->read_regs_enabled = 1; |
1161 | 1152 | INIT_COMPLETION(intr->read_regs.completion); |
1162 | - spin_unlock(&intr->lock); | |
1153 | + spin_unlock_irq(&intr->lock); | |
1163 | 1154 | } |
1164 | 1155 | |
1156 | +static void disable_read_regs_int(struct zd_usb *usb) | |
1157 | +{ | |
1158 | + struct zd_usb_interrupt *intr = &usb->intr; | |
1159 | + | |
1160 | + spin_lock_irq(&intr->lock); | |
1161 | + intr->read_regs_enabled = 0; | |
1162 | + spin_unlock_irq(&intr->lock); | |
1163 | +} | |
1164 | + | |
1165 | 1165 | static int get_results(struct zd_usb *usb, u16 *values, |
1166 | 1166 | struct usb_req_read_regs *req, unsigned int count) |
1167 | 1167 | { |
... | ... | @@ -1171,7 +1171,7 @@ |
1171 | 1171 | struct read_regs_int *rr = &intr->read_regs; |
1172 | 1172 | struct usb_int_regs *regs = (struct usb_int_regs *)rr->buffer; |
1173 | 1173 | |
1174 | - spin_lock(&intr->lock); | |
1174 | + spin_lock_irq(&intr->lock); | |
1175 | 1175 | |
1176 | 1176 | r = -EIO; |
1177 | 1177 | /* The created block size seems to be larger than expected. |
... | ... | @@ -1204,7 +1204,7 @@ |
1204 | 1204 | |
1205 | 1205 | r = 0; |
1206 | 1206 | error_unlock: |
1207 | - spin_unlock(&intr->lock); | |
1207 | + spin_unlock_irq(&intr->lock); | |
1208 | 1208 | return r; |
1209 | 1209 | } |
1210 | 1210 |
drivers/net/wireless/zd1211rw/zd_usb.h
... | ... | @@ -74,17 +74,17 @@ |
74 | 74 | struct usb_req_read_regs { |
75 | 75 | __le16 id; |
76 | 76 | __le16 addr[0]; |
77 | -}; | |
77 | +} __attribute__((packed)); | |
78 | 78 | |
79 | 79 | struct reg_data { |
80 | 80 | __le16 addr; |
81 | 81 | __le16 value; |
82 | -}; | |
82 | +} __attribute__((packed)); | |
83 | 83 | |
84 | 84 | struct usb_req_write_regs { |
85 | 85 | __le16 id; |
86 | 86 | struct reg_data reg_writes[0]; |
87 | -}; | |
87 | +} __attribute__((packed)); | |
88 | 88 | |
89 | 89 | enum { |
90 | 90 | RF_IF_LE = 0x02, |
... | ... | @@ -101,7 +101,7 @@ |
101 | 101 | /* RF2595: 24 */ |
102 | 102 | __le16 bit_values[0]; |
103 | 103 | /* (CR203 & ~(RF_IF_LE | RF_CLK | RF_DATA)) | (bit ? RF_DATA : 0) */ |
104 | -}; | |
104 | +} __attribute__((packed)); | |
105 | 105 | |
106 | 106 | /* USB interrupt */ |
107 | 107 | |
108 | 108 | |
... | ... | @@ -118,12 +118,12 @@ |
118 | 118 | struct usb_int_header { |
119 | 119 | u8 type; /* must always be 1 */ |
120 | 120 | u8 id; |
121 | -}; | |
121 | +} __attribute__((packed)); | |
122 | 122 | |
123 | 123 | struct usb_int_regs { |
124 | 124 | struct usb_int_header hdr; |
125 | 125 | struct reg_data regs[0]; |
126 | -}; | |
126 | +} __attribute__((packed)); | |
127 | 127 | |
128 | 128 | struct usb_int_retry_fail { |
129 | 129 | struct usb_int_header hdr; |
... | ... | @@ -131,7 +131,7 @@ |
131 | 131 | u8 _dummy; |
132 | 132 | u8 addr[ETH_ALEN]; |
133 | 133 | u8 ibss_wakeup_dest; |
134 | -}; | |
134 | +} __attribute__((packed)); | |
135 | 135 | |
136 | 136 | struct read_regs_int { |
137 | 137 | struct completion completion; |
net/ieee80211/ieee80211_tx.c
... | ... | @@ -390,7 +390,7 @@ |
390 | 390 | * this stack is providing the full 802.11 header, one will |
391 | 391 | * eventually be affixed to this fragment -- so we must account |
392 | 392 | * for it when determining the amount of payload space. */ |
393 | - bytes_per_frag = frag_size - IEEE80211_3ADDR_LEN; | |
393 | + bytes_per_frag = frag_size - hdr_len; | |
394 | 394 | if (ieee->config & |
395 | 395 | (CFG_IEEE80211_COMPUTE_FCS | CFG_IEEE80211_RESERVE_FCS)) |
396 | 396 | bytes_per_frag -= IEEE80211_FCS_LEN; |
... | ... | @@ -412,7 +412,7 @@ |
412 | 412 | } else { |
413 | 413 | nr_frags = 1; |
414 | 414 | bytes_per_frag = bytes_last_frag = bytes; |
415 | - frag_size = bytes + IEEE80211_3ADDR_LEN; | |
415 | + frag_size = bytes + hdr_len; | |
416 | 416 | } |
417 | 417 | |
418 | 418 | rts_required = (frag_size > ieee->rts |
net/ieee80211/softmac/ieee80211softmac_scan.c
... | ... | @@ -47,7 +47,6 @@ |
47 | 47 | sm->scanning = 1; |
48 | 48 | spin_unlock_irqrestore(&sm->lock, flags); |
49 | 49 | |
50 | - netif_tx_disable(sm->ieee->dev); | |
51 | 50 | ret = sm->start_scan(sm->dev); |
52 | 51 | if (ret) { |
53 | 52 | spin_lock_irqsave(&sm->lock, flags); |
... | ... | @@ -248,7 +247,6 @@ |
248 | 247 | if (net) |
249 | 248 | sm->set_channel(sm->dev, net->channel); |
250 | 249 | } |
251 | - netif_wake_queue(sm->ieee->dev); | |
252 | 250 | ieee80211softmac_call_events(sm, IEEE80211SOFTMAC_EVENT_SCAN_FINISHED, NULL); |
253 | 251 | } |
254 | 252 | EXPORT_SYMBOL_GPL(ieee80211softmac_scan_finished); |