Commit 116b23b0ed36f8d5b56d16ac50266fce8de904c1

Authored by Linus Torvalds

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

... ... @@ -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
... ... @@ -64,7 +64,7 @@
64 64 u8 service;
65 65 __le16 length;
66 66 __le16 crc16;
67   -};
  67 +} __attribute__((packed));
68 68  
69 69 static inline u8 zd_cck_plcp_header_rate(const struct cck_plcp_header *header)
70 70 {
drivers/net/wireless/zd1211rw/zd_mac.c
... ... @@ -721,7 +721,7 @@
721 721 u8 rt_rate;
722 722 u16 rt_channel;
723 723 u16 rt_chbitmask;
724   -};
  724 +} __attribute__((packed));
725 725  
726 726 static void fill_rt_header(void *buffer, struct zd_mac *mac,
727 727 const struct ieee80211_rx_stats *stats,
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);