Skip to content

Commit 25431e9

Browse files
committed
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6: sunrpc: fix rdma dependencies e1000: Fix PCI enable to honor the need_ioport flag sgi-xp: link XPNET's net_device_ops to its net_device structure pcnet_cs: Fix misuse of the equality operator. hso: add new device id's dca: redesign locks to fix deadlocks cassini/sungem: limit reaches -1, but 0 tested net: variables reach -1, but 0 tested qlge: bugfix: Add missing netif_napi_del call. qlge: bugfix: Add flash offset for second port. qlge: bugfix: Fix endian issue when reading flash. udp: increments sk_drops in __udp_queue_rcv_skb() net: Fix userland breakage wrt. linux/if_tunnel.h net: packet socket packet_lookup_frame fix
2 parents 0d7a063 + 55128bc commit 25431e9

File tree

21 files changed

+93
-57
lines changed

21 files changed

+93
-57
lines changed

drivers/dca/dca-core.c

Lines changed: 33 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
#include <linux/device.h>
2929
#include <linux/dca.h>
3030

31-
#define DCA_VERSION "1.4"
31+
#define DCA_VERSION "1.8"
3232

3333
MODULE_VERSION(DCA_VERSION);
3434
MODULE_LICENSE("GPL");
@@ -60,16 +60,17 @@ int dca_add_requester(struct device *dev)
6060
{
6161
struct dca_provider *dca;
6262
int err, slot = -ENODEV;
63+
unsigned long flags;
6364

6465
if (!dev)
6566
return -EFAULT;
6667

67-
spin_lock(&dca_lock);
68+
spin_lock_irqsave(&dca_lock, flags);
6869

6970
/* check if the requester has not been added already */
7071
dca = dca_find_provider_by_dev(dev);
7172
if (dca) {
72-
spin_unlock(&dca_lock);
73+
spin_unlock_irqrestore(&dca_lock, flags);
7374
return -EEXIST;
7475
}
7576

@@ -78,19 +79,21 @@ int dca_add_requester(struct device *dev)
7879
if (slot >= 0)
7980
break;
8081
}
81-
if (slot < 0) {
82-
spin_unlock(&dca_lock);
82+
83+
spin_unlock_irqrestore(&dca_lock, flags);
84+
85+
if (slot < 0)
8386
return slot;
84-
}
8587

8688
err = dca_sysfs_add_req(dca, dev, slot);
8789
if (err) {
88-
dca->ops->remove_requester(dca, dev);
89-
spin_unlock(&dca_lock);
90+
spin_lock_irqsave(&dca_lock, flags);
91+
if (dca == dca_find_provider_by_dev(dev))
92+
dca->ops->remove_requester(dca, dev);
93+
spin_unlock_irqrestore(&dca_lock, flags);
9094
return err;
9195
}
9296

93-
spin_unlock(&dca_lock);
9497
return 0;
9598
}
9699
EXPORT_SYMBOL_GPL(dca_add_requester);
@@ -103,25 +106,25 @@ int dca_remove_requester(struct device *dev)
103106
{
104107
struct dca_provider *dca;
105108
int slot;
109+
unsigned long flags;
106110

107111
if (!dev)
108112
return -EFAULT;
109113

110-
spin_lock(&dca_lock);
114+
spin_lock_irqsave(&dca_lock, flags);
111115
dca = dca_find_provider_by_dev(dev);
112116
if (!dca) {
113-
spin_unlock(&dca_lock);
117+
spin_unlock_irqrestore(&dca_lock, flags);
114118
return -ENODEV;
115119
}
116120
slot = dca->ops->remove_requester(dca, dev);
117-
if (slot < 0) {
118-
spin_unlock(&dca_lock);
121+
spin_unlock_irqrestore(&dca_lock, flags);
122+
123+
if (slot < 0)
119124
return slot;
120-
}
121125

122126
dca_sysfs_remove_req(dca, slot);
123127

124-
spin_unlock(&dca_lock);
125128
return 0;
126129
}
127130
EXPORT_SYMBOL_GPL(dca_remove_requester);
@@ -135,17 +138,18 @@ u8 dca_common_get_tag(struct device *dev, int cpu)
135138
{
136139
struct dca_provider *dca;
137140
u8 tag;
141+
unsigned long flags;
138142

139-
spin_lock(&dca_lock);
143+
spin_lock_irqsave(&dca_lock, flags);
140144

141145
dca = dca_find_provider_by_dev(dev);
142146
if (!dca) {
143-
spin_unlock(&dca_lock);
147+
spin_unlock_irqrestore(&dca_lock, flags);
144148
return -ENODEV;
145149
}
146150
tag = dca->ops->get_tag(dca, dev, cpu);
147151

148-
spin_unlock(&dca_lock);
152+
spin_unlock_irqrestore(&dca_lock, flags);
149153
return tag;
150154
}
151155

@@ -217,11 +221,16 @@ static BLOCKING_NOTIFIER_HEAD(dca_provider_chain);
217221
int register_dca_provider(struct dca_provider *dca, struct device *dev)
218222
{
219223
int err;
224+
unsigned long flags;
220225

221226
err = dca_sysfs_add_provider(dca, dev);
222227
if (err)
223228
return err;
229+
230+
spin_lock_irqsave(&dca_lock, flags);
224231
list_add(&dca->node, &dca_providers);
232+
spin_unlock_irqrestore(&dca_lock, flags);
233+
225234
blocking_notifier_call_chain(&dca_provider_chain,
226235
DCA_PROVIDER_ADD, NULL);
227236
return 0;
@@ -234,9 +243,15 @@ EXPORT_SYMBOL_GPL(register_dca_provider);
234243
*/
235244
void unregister_dca_provider(struct dca_provider *dca)
236245
{
246+
unsigned long flags;
247+
237248
blocking_notifier_call_chain(&dca_provider_chain,
238249
DCA_PROVIDER_REMOVE, NULL);
250+
251+
spin_lock_irqsave(&dca_lock, flags);
239252
list_del(&dca->node);
253+
spin_unlock_irqrestore(&dca_lock, flags);
254+
240255
dca_sysfs_remove_provider(dca);
241256
}
242257
EXPORT_SYMBOL_GPL(unregister_dca_provider);

drivers/misc/sgi-xp/xpnet.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
* License. See the file "COPYING" in the main directory of this archive
44
* for more details.
55
*
6-
* Copyright (C) 1999-2008 Silicon Graphics, Inc. All rights reserved.
6+
* Copyright (C) 1999-2009 Silicon Graphics, Inc. All rights reserved.
77
*/
88

99
/*
@@ -551,6 +551,7 @@ xpnet_init(void)
551551

552552
netif_carrier_off(xpnet_device);
553553

554+
xpnet_device->netdev_ops = &xpnet_netdev_ops;
554555
xpnet_device->mtu = XPNET_DEF_MTU;
555556

556557
/*

drivers/net/cassini.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -806,7 +806,7 @@ static int cas_reset_mii_phy(struct cas *cp)
806806

807807
cas_phy_write(cp, MII_BMCR, BMCR_RESET);
808808
udelay(100);
809-
while (limit--) {
809+
while (--limit) {
810810
val = cas_phy_read(cp, MII_BMCR);
811811
if ((val & BMCR_RESET) == 0)
812812
break;
@@ -979,7 +979,7 @@ static void cas_phy_init(struct cas *cp)
979979
writel(val, cp->regs + REG_PCS_MII_CTRL);
980980

981981
limit = STOP_TRIES;
982-
while (limit-- > 0) {
982+
while (--limit > 0) {
983983
udelay(10);
984984
if ((readl(cp->regs + REG_PCS_MII_CTRL) &
985985
PCS_MII_RESET) == 0)

drivers/net/e1000/e1000_main.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -940,7 +940,7 @@ static int __devinit e1000_probe(struct pci_dev *pdev,
940940
err = pci_enable_device(pdev);
941941
} else {
942942
bars = pci_select_bars(pdev, IORESOURCE_MEM);
943-
err = pci_enable_device(pdev);
943+
err = pci_enable_device_mem(pdev);
944944
}
945945
if (err)
946946
return err;

drivers/net/ibm_newemac/phy.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ int emac_mii_reset_phy(struct mii_phy *phy)
6060

6161
udelay(300);
6262

63-
while (limit--) {
63+
while (--limit) {
6464
val = phy_read(phy, MII_BMCR);
6565
if (val >= 0 && (val & BMCR_RESET) == 0)
6666
break;
@@ -84,7 +84,7 @@ int emac_mii_reset_gpcs(struct mii_phy *phy)
8484

8585
udelay(300);
8686

87-
while (limit--) {
87+
while (--limit) {
8888
val = gpcs_phy_read(phy, MII_BMCR);
8989
if (val >= 0 && (val & BMCR_RESET) == 0)
9090
break;

drivers/net/pcmcia/pcnet_cs.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -586,7 +586,7 @@ static int pcnet_config(struct pcmcia_device *link)
586586
}
587587

588588
if ((link->conf.ConfigBase == 0x03c0)
589-
&& (link->manf_id == 0x149) && (link->card_id = 0xc1ab)) {
589+
&& (link->manf_id == 0x149) && (link->card_id == 0xc1ab)) {
590590
printk(KERN_INFO "pcnet_cs: this is an AX88190 card!\n");
591591
printk(KERN_INFO "pcnet_cs: use axnet_cs instead.\n");
592592
goto failed;

drivers/net/qlge/qlge.h

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -787,12 +787,12 @@ struct mbox_params {
787787

788788
struct flash_params {
789789
u8 dev_id_str[4];
790-
u16 size;
791-
u16 csum;
792-
u16 ver;
793-
u16 sub_dev_id;
790+
__le16 size;
791+
__le16 csum;
792+
__le16 ver;
793+
__le16 sub_dev_id;
794794
u8 mac_addr[6];
795-
u16 res;
795+
__le16 res;
796796
};
797797

798798

drivers/net/qlge/qlge_main.c

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -641,7 +641,7 @@ static void ql_enable_all_completion_interrupts(struct ql_adapter *qdev)
641641

642642
}
643643

644-
static int ql_read_flash_word(struct ql_adapter *qdev, int offset, u32 *data)
644+
static int ql_read_flash_word(struct ql_adapter *qdev, int offset, __le32 *data)
645645
{
646646
int status = 0;
647647
/* wait for reg to come ready */
@@ -656,8 +656,11 @@ static int ql_read_flash_word(struct ql_adapter *qdev, int offset, u32 *data)
656656
FLASH_ADDR, FLASH_ADDR_RDY, FLASH_ADDR_ERR);
657657
if (status)
658658
goto exit;
659-
/* get the data */
660-
*data = ql_read32(qdev, FLASH_DATA);
659+
/* This data is stored on flash as an array of
660+
* __le32. Since ql_read32() returns cpu endian
661+
* we need to swap it back.
662+
*/
663+
*data = cpu_to_le32(ql_read32(qdev, FLASH_DATA));
661664
exit:
662665
return status;
663666
}
@@ -666,13 +669,20 @@ static int ql_get_flash_params(struct ql_adapter *qdev)
666669
{
667670
int i;
668671
int status;
669-
u32 *p = (u32 *)&qdev->flash;
672+
__le32 *p = (__le32 *)&qdev->flash;
673+
u32 offset = 0;
674+
675+
/* Second function's parameters follow the first
676+
* function's.
677+
*/
678+
if (qdev->func)
679+
offset = sizeof(qdev->flash) / sizeof(u32);
670680

671681
if (ql_sem_spinlock(qdev, SEM_FLASH_MASK))
672682
return -ETIMEDOUT;
673683

674684
for (i = 0; i < sizeof(qdev->flash) / sizeof(u32); i++, p++) {
675-
status = ql_read_flash_word(qdev, i, p);
685+
status = ql_read_flash_word(qdev, i+offset, p);
676686
if (status) {
677687
QPRINTK(qdev, IFUP, ERR, "Error reading flash.\n");
678688
goto exit;
@@ -3826,7 +3836,7 @@ static int qlge_suspend(struct pci_dev *pdev, pm_message_t state)
38263836
{
38273837
struct net_device *ndev = pci_get_drvdata(pdev);
38283838
struct ql_adapter *qdev = netdev_priv(ndev);
3829-
int err;
3839+
int err, i;
38303840

38313841
netif_device_detach(ndev);
38323842

@@ -3836,6 +3846,9 @@ static int qlge_suspend(struct pci_dev *pdev, pm_message_t state)
38363846
return err;
38373847
}
38383848

3849+
for (i = qdev->rss_ring_first_cq_id; i < qdev->rx_ring_count; i++)
3850+
netif_napi_del(&qdev->rx_ring[i].napi);
3851+
38393852
err = pci_save_state(pdev);
38403853
if (err)
38413854
return err;

drivers/net/smc911x.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -220,9 +220,9 @@ static void smc911x_reset(struct net_device *dev)
220220

221221
/* make sure EEPROM has finished loading before setting GPIO_CFG */
222222
timeout=1000;
223-
while ( timeout-- && (SMC_GET_E2P_CMD(lp) & E2P_CMD_EPC_BUSY_)) {
223+
while (--timeout && (SMC_GET_E2P_CMD(lp) & E2P_CMD_EPC_BUSY_))
224224
udelay(10);
225-
}
225+
226226
if (timeout == 0){
227227
PRINTK("%s: smc911x_reset timeout waiting for EEPROM busy\n", dev->name);
228228
return;

drivers/net/smsc9420.c

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -498,21 +498,21 @@ static void smsc9420_check_mac_address(struct net_device *dev)
498498
static void smsc9420_stop_tx(struct smsc9420_pdata *pd)
499499
{
500500
u32 dmac_control, mac_cr, dma_intr_ena;
501-
int timeOut = 1000;
501+
int timeout = 1000;
502502

503503
/* disable TX DMAC */
504504
dmac_control = smsc9420_reg_read(pd, DMAC_CONTROL);
505505
dmac_control &= (~DMAC_CONTROL_ST_);
506506
smsc9420_reg_write(pd, DMAC_CONTROL, dmac_control);
507507

508508
/* Wait max 10ms for transmit process to stop */
509-
while (timeOut--) {
509+
while (--timeout) {
510510
if (smsc9420_reg_read(pd, DMAC_STATUS) & DMAC_STS_TS_)
511511
break;
512512
udelay(10);
513513
}
514514

515-
if (!timeOut)
515+
if (!timeout)
516516
smsc_warn(IFDOWN, "TX DMAC failed to stop");
517517

518518
/* ACK Tx DMAC stop bit */
@@ -596,7 +596,7 @@ static void smsc9420_free_rx_ring(struct smsc9420_pdata *pd)
596596

597597
static void smsc9420_stop_rx(struct smsc9420_pdata *pd)
598598
{
599-
int timeOut = 1000;
599+
int timeout = 1000;
600600
u32 mac_cr, dmac_control, dma_intr_ena;
601601

602602
/* mask RX DMAC interrupts */
@@ -617,13 +617,13 @@ static void smsc9420_stop_rx(struct smsc9420_pdata *pd)
617617
smsc9420_pci_flush_write(pd);
618618

619619
/* wait up to 10ms for receive to stop */
620-
while (timeOut--) {
620+
while (--timeout) {
621621
if (smsc9420_reg_read(pd, DMAC_STATUS) & DMAC_STS_RS_)
622622
break;
623623
udelay(10);
624624
}
625625

626-
if (!timeOut)
626+
if (!timeout)
627627
smsc_warn(IFDOWN, "RX DMAC did not stop! timeout.");
628628

629629
/* ACK the Rx DMAC stop bit */

drivers/net/sungem.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ static u16 __phy_read(struct gem *gp, int phy_addr, int reg)
148148
cmd |= (MIF_FRAME_TAMSB);
149149
writel(cmd, gp->regs + MIF_FRAME);
150150

151-
while (limit--) {
151+
while (--limit) {
152152
cmd = readl(gp->regs + MIF_FRAME);
153153
if (cmd & MIF_FRAME_TALSB)
154154
break;

drivers/net/sungem_phy.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ static int reset_one_mii_phy(struct mii_phy* phy, int phy_id)
7979

8080
udelay(100);
8181

82-
while (limit--) {
82+
while (--limit) {
8383
val = __phy_read(phy, phy_id, MII_BMCR);
8484
if ((val & BMCR_RESET) == 0)
8585
break;

drivers/net/sunqe.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -227,7 +227,7 @@ static int qe_init(struct sunqe *qep, int from_irq)
227227
if (!(sbus_readb(mregs + MREGS_PHYCONFIG) & MREGS_PHYCONFIG_LTESTDIS)) {
228228
int tries = 50;
229229

230-
while (tries--) {
230+
while (--tries) {
231231
u8 tmp;
232232

233233
mdelay(5);

drivers/net/tsi108_eth.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1237,7 +1237,7 @@ static void tsi108_init_phy(struct net_device *dev)
12371237
spin_lock_irqsave(&phy_lock, flags);
12381238

12391239
tsi108_write_mii(data, MII_BMCR, BMCR_RESET);
1240-
while (i--){
1240+
while (--i) {
12411241
if(!(tsi108_read_mii(data, MII_BMCR) & BMCR_RESET))
12421242
break;
12431243
udelay(10);

0 commit comments

Comments
 (0)