Commit 98846b5e authored by David S. Miller's avatar David S. Miller

Merge branch 'upstream-davem' of master.kernel.org:/pub/scm/linux/kernel/git/jgarzik/netdev-2.6

parents e8e16b70 bd6ca637
...@@ -2635,7 +2635,7 @@ config NIU ...@@ -2635,7 +2635,7 @@ config NIU
config PASEMI_MAC config PASEMI_MAC
tristate "PA Semi 1/10Gbit MAC" tristate "PA Semi 1/10Gbit MAC"
depends on PPC64 && PCI depends on PPC_PASEMI && PCI
select PHYLIB select PHYLIB
select INET_LRO select INET_LRO
help help
......
...@@ -575,7 +575,6 @@ static void adjust_tx_list(void) ...@@ -575,7 +575,6 @@ static void adjust_tx_list(void)
static int bf537mac_hard_start_xmit(struct sk_buff *skb, static int bf537mac_hard_start_xmit(struct sk_buff *skb,
struct net_device *dev) struct net_device *dev)
{ {
struct bf537mac_local *lp = netdev_priv(dev);
unsigned int data; unsigned int data;
current_tx_ptr->skb = skb; current_tx_ptr->skb = skb;
...@@ -634,7 +633,6 @@ static int bf537mac_hard_start_xmit(struct sk_buff *skb, ...@@ -634,7 +633,6 @@ static int bf537mac_hard_start_xmit(struct sk_buff *skb,
static void bf537mac_rx(struct net_device *dev) static void bf537mac_rx(struct net_device *dev)
{ {
struct sk_buff *skb, *new_skb; struct sk_buff *skb, *new_skb;
struct bf537mac_local *lp = netdev_priv(dev);
unsigned short len; unsigned short len;
/* allocate a new skb for next time receive */ /* allocate a new skb for next time receive */
......
...@@ -1854,6 +1854,7 @@ static int nv_start_xmit(struct sk_buff *skb, struct net_device *dev) ...@@ -1854,6 +1854,7 @@ static int nv_start_xmit(struct sk_buff *skb, struct net_device *dev)
struct ring_desc* start_tx; struct ring_desc* start_tx;
struct ring_desc* prev_tx; struct ring_desc* prev_tx;
struct nv_skb_map* prev_tx_ctx; struct nv_skb_map* prev_tx_ctx;
unsigned long flags;
/* add fragments to entries count */ /* add fragments to entries count */
for (i = 0; i < fragments; i++) { for (i = 0; i < fragments; i++) {
...@@ -1863,10 +1864,10 @@ static int nv_start_xmit(struct sk_buff *skb, struct net_device *dev) ...@@ -1863,10 +1864,10 @@ static int nv_start_xmit(struct sk_buff *skb, struct net_device *dev)
empty_slots = nv_get_empty_tx_slots(np); empty_slots = nv_get_empty_tx_slots(np);
if (unlikely(empty_slots <= entries)) { if (unlikely(empty_slots <= entries)) {
spin_lock_irq(&np->lock); spin_lock_irqsave(&np->lock, flags);
netif_stop_queue(dev); netif_stop_queue(dev);
np->tx_stop = 1; np->tx_stop = 1;
spin_unlock_irq(&np->lock); spin_unlock_irqrestore(&np->lock, flags);
return NETDEV_TX_BUSY; return NETDEV_TX_BUSY;
} }
...@@ -1929,13 +1930,13 @@ static int nv_start_xmit(struct sk_buff *skb, struct net_device *dev) ...@@ -1929,13 +1930,13 @@ static int nv_start_xmit(struct sk_buff *skb, struct net_device *dev)
tx_flags_extra = skb->ip_summed == CHECKSUM_PARTIAL ? tx_flags_extra = skb->ip_summed == CHECKSUM_PARTIAL ?
NV_TX2_CHECKSUM_L3 | NV_TX2_CHECKSUM_L4 : 0; NV_TX2_CHECKSUM_L3 | NV_TX2_CHECKSUM_L4 : 0;
spin_lock_irq(&np->lock); spin_lock_irqsave(&np->lock, flags);
/* set tx flags */ /* set tx flags */
start_tx->flaglen |= cpu_to_le32(tx_flags | tx_flags_extra); start_tx->flaglen |= cpu_to_le32(tx_flags | tx_flags_extra);
np->put_tx.orig = put_tx; np->put_tx.orig = put_tx;
spin_unlock_irq(&np->lock); spin_unlock_irqrestore(&np->lock, flags);
dprintk(KERN_DEBUG "%s: nv_start_xmit: entries %d queued for transmission. tx_flags_extra: %x\n", dprintk(KERN_DEBUG "%s: nv_start_xmit: entries %d queued for transmission. tx_flags_extra: %x\n",
dev->name, entries, tx_flags_extra); dev->name, entries, tx_flags_extra);
...@@ -1971,6 +1972,7 @@ static int nv_start_xmit_optimized(struct sk_buff *skb, struct net_device *dev) ...@@ -1971,6 +1972,7 @@ static int nv_start_xmit_optimized(struct sk_buff *skb, struct net_device *dev)
struct ring_desc_ex* prev_tx; struct ring_desc_ex* prev_tx;
struct nv_skb_map* prev_tx_ctx; struct nv_skb_map* prev_tx_ctx;
struct nv_skb_map* start_tx_ctx; struct nv_skb_map* start_tx_ctx;
unsigned long flags;
/* add fragments to entries count */ /* add fragments to entries count */
for (i = 0; i < fragments; i++) { for (i = 0; i < fragments; i++) {
...@@ -1980,10 +1982,10 @@ static int nv_start_xmit_optimized(struct sk_buff *skb, struct net_device *dev) ...@@ -1980,10 +1982,10 @@ static int nv_start_xmit_optimized(struct sk_buff *skb, struct net_device *dev)
empty_slots = nv_get_empty_tx_slots(np); empty_slots = nv_get_empty_tx_slots(np);
if (unlikely(empty_slots <= entries)) { if (unlikely(empty_slots <= entries)) {
spin_lock_irq(&np->lock); spin_lock_irqsave(&np->lock, flags);
netif_stop_queue(dev); netif_stop_queue(dev);
np->tx_stop = 1; np->tx_stop = 1;
spin_unlock_irq(&np->lock); spin_unlock_irqrestore(&np->lock, flags);
return NETDEV_TX_BUSY; return NETDEV_TX_BUSY;
} }
...@@ -2059,7 +2061,7 @@ static int nv_start_xmit_optimized(struct sk_buff *skb, struct net_device *dev) ...@@ -2059,7 +2061,7 @@ static int nv_start_xmit_optimized(struct sk_buff *skb, struct net_device *dev)
start_tx->txvlan = 0; start_tx->txvlan = 0;
} }
spin_lock_irq(&np->lock); spin_lock_irqsave(&np->lock, flags);
if (np->tx_limit) { if (np->tx_limit) {
/* Limit the number of outstanding tx. Setup all fragments, but /* Limit the number of outstanding tx. Setup all fragments, but
...@@ -2085,7 +2087,7 @@ static int nv_start_xmit_optimized(struct sk_buff *skb, struct net_device *dev) ...@@ -2085,7 +2087,7 @@ static int nv_start_xmit_optimized(struct sk_buff *skb, struct net_device *dev)
start_tx->flaglen |= cpu_to_le32(tx_flags | tx_flags_extra); start_tx->flaglen |= cpu_to_le32(tx_flags | tx_flags_extra);
np->put_tx.ex = put_tx; np->put_tx.ex = put_tx;
spin_unlock_irq(&np->lock); spin_unlock_irqrestore(&np->lock, flags);
dprintk(KERN_DEBUG "%s: nv_start_xmit_optimized: entries %d queued for transmission. tx_flags_extra: %x\n", dprintk(KERN_DEBUG "%s: nv_start_xmit_optimized: entries %d queued for transmission. tx_flags_extra: %x\n",
dev->name, entries, tx_flags_extra); dev->name, entries, tx_flags_extra);
......
...@@ -1242,8 +1242,8 @@ static int emac_close(struct net_device *ndev) ...@@ -1242,8 +1242,8 @@ static int emac_close(struct net_device *ndev)
static inline u16 emac_tx_csum(struct emac_instance *dev, static inline u16 emac_tx_csum(struct emac_instance *dev,
struct sk_buff *skb) struct sk_buff *skb)
{ {
if (emac_has_feature(dev, EMAC_FTR_HAS_TAH && if (emac_has_feature(dev, EMAC_FTR_HAS_TAH) &&
skb->ip_summed == CHECKSUM_PARTIAL)) { (skb->ip_summed == CHECKSUM_PARTIAL)) {
++dev->stats.tx_packets_csum; ++dev->stats.tx_packets_csum;
return EMAC_TX_CTRL_TAH_CSUM; return EMAC_TX_CTRL_TAH_CSUM;
} }
......
...@@ -84,7 +84,7 @@ ...@@ -84,7 +84,7 @@
#include "s2io.h" #include "s2io.h"
#include "s2io-regs.h" #include "s2io-regs.h"
#define DRV_VERSION "2.0.26.15-2" #define DRV_VERSION "2.0.26.20"
/* S2io Driver name & version. */ /* S2io Driver name & version. */
static char s2io_driver_name[] = "Neterion"; static char s2io_driver_name[] = "Neterion";
......
...@@ -343,6 +343,12 @@ int __devinit tulip_read_eeprom(struct net_device *dev, int location, int addr_l ...@@ -343,6 +343,12 @@ int __devinit tulip_read_eeprom(struct net_device *dev, int location, int addr_l
void __iomem *ee_addr = tp->base_addr + CSR9; void __iomem *ee_addr = tp->base_addr + CSR9;
int read_cmd = location | (EE_READ_CMD << addr_len); int read_cmd = location | (EE_READ_CMD << addr_len);
/* If location is past the end of what we can address, don't
* read some other location (ie truncate). Just return zero.
*/
if (location > (1 << addr_len) - 1)
return 0;
iowrite32(EE_ENB & ~EE_CS, ee_addr); iowrite32(EE_ENB & ~EE_CS, ee_addr);
iowrite32(EE_ENB, ee_addr); iowrite32(EE_ENB, ee_addr);
......
...@@ -1437,6 +1437,7 @@ static int __devinit tulip_init_one (struct pci_dev *pdev, ...@@ -1437,6 +1437,7 @@ static int __devinit tulip_init_one (struct pci_dev *pdev,
EEPROM. EEPROM.
*/ */
ee_data = tp->eeprom; ee_data = tp->eeprom;
memset(ee_data, 0, sizeof(tp->eeprom));
sum = 0; sum = 0;
if (chip_idx == LC82C168) { if (chip_idx == LC82C168) {
for (i = 0; i < 3; i++) { for (i = 0; i < 3; i++) {
...@@ -1458,8 +1459,12 @@ static int __devinit tulip_init_one (struct pci_dev *pdev, ...@@ -1458,8 +1459,12 @@ static int __devinit tulip_init_one (struct pci_dev *pdev,
/* A serial EEPROM interface, we read now and sort it out later. */ /* A serial EEPROM interface, we read now and sort it out later. */
int sa_offset = 0; int sa_offset = 0;
int ee_addr_size = tulip_read_eeprom(dev, 0xff, 8) & 0x40000 ? 8 : 6; int ee_addr_size = tulip_read_eeprom(dev, 0xff, 8) & 0x40000 ? 8 : 6;
int ee_max_addr = ((1 << ee_addr_size) - 1) * sizeof(u16);
for (i = 0; i < sizeof(tp->eeprom); i+=2) { if (ee_max_addr > sizeof(tp->eeprom))
ee_max_addr = sizeof(tp->eeprom);
for (i = 0; i < ee_max_addr ; i += sizeof(u16)) {
u16 data = tulip_read_eeprom(dev, i/2, ee_addr_size); u16 data = tulip_read_eeprom(dev, i/2, ee_addr_size);
ee_data[i] = data & 0xff; ee_data[i] = data & 0xff;
ee_data[i + 1] = data >> 8; ee_data[i + 1] = data >> 8;
......
...@@ -129,7 +129,7 @@ config USB_USBNET ...@@ -129,7 +129,7 @@ config USB_USBNET
config USB_NET_AX8817X config USB_NET_AX8817X
tristate "ASIX AX88xxx Based USB 2.0 Ethernet Adapters" tristate "ASIX AX88xxx Based USB 2.0 Ethernet Adapters"
depends on USB_USBNET && NET_ETHERNET depends on USB_USBNET
select CRC32 select CRC32
default y default y
help help
......
...@@ -354,7 +354,7 @@ static void dm9601_set_multicast(struct net_device *net) ...@@ -354,7 +354,7 @@ static void dm9601_set_multicast(struct net_device *net)
struct dev_mc_list *mc_list = net->mc_list; struct dev_mc_list *mc_list = net->mc_list;
int i; int i;
for (i = 0; i < net->mc_count; i++) { for (i = 0; i < net->mc_count; i++, mc_list = mc_list->next) {
u32 crc = ether_crc(ETH_ALEN, mc_list->dmi_addr) >> 26; u32 crc = ether_crc(ETH_ALEN, mc_list->dmi_addr) >> 26;
hashes[crc >> 3] |= 1 << (crc & 0x7); hashes[crc >> 3] |= 1 << (crc & 0x7);
} }
......
...@@ -1128,12 +1128,8 @@ pegasus_get_settings(struct net_device *dev, struct ethtool_cmd *ecmd) ...@@ -1128,12 +1128,8 @@ pegasus_get_settings(struct net_device *dev, struct ethtool_cmd *ecmd)
{ {
pegasus_t *pegasus; pegasus_t *pegasus;
if (in_atomic())
return 0;
pegasus = netdev_priv(dev); pegasus = netdev_priv(dev);
mii_ethtool_gset(&pegasus->mii, ecmd); mii_ethtool_gset(&pegasus->mii, ecmd);
return 0; return 0;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment