Skip to content

Commit 37bed90

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: (32 commits) wimax: fix oops in wimax_dev_get_by_genl_info() when looking up non-wimax iface net: 4 bytes kernel memory disclosure in SO_BSDCOMPAT gsopt try #2 netxen: fix compile waring "label ‘set_32_bit_mask’ defined but not used" on IA64 platform bnx2: Update version to 1.9.2 and copyright. bnx2: Fix jumbo frames error handling. bnx2: Update 5709 firmware. bnx2: Update 5706/5708 firmware. 3c505: do not set pcb->data.raw beyond its size Documentation/connector/cn_test.c: don't use gfp_any() net: don't use in_atomic() in gfp_any() IRDA: cnt is off by 1 netxen: remove pcie workaround sun3: print when lance_open() fails qlge: bugfix: Add missing rx buf clean index on early exit. qlge: bugfix: Fix RX scaling values. qlge: bugfix: Fix TSO breakage. qlge: bugfix: Add missing dev_kfree_skb_any() call. qlge: bugfix: Add missing put_page() call. qlge: bugfix: Fix fatal error recovery hang. qlge: bugfix: Use netif_receive_skb() and vlan_hwaccel_receive_skb(). ...
2 parents 071a0bc + 1d7b33f commit 37bed90

File tree

26 files changed

+8767
-8901
lines changed

26 files changed

+8767
-8901
lines changed

Documentation/connector/cn_test.c

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ static void cn_test_timer_func(unsigned long __data)
137137

138138
memcpy(m + 1, data, m->len);
139139

140-
cn_netlink_send(m, 0, gfp_any());
140+
cn_netlink_send(m, 0, GFP_ATOMIC);
141141
kfree(m);
142142
}
143143

@@ -160,10 +160,8 @@ static int cn_test_init(void)
160160
goto err_out;
161161
}
162162

163-
init_timer(&cn_test_timer);
164-
cn_test_timer.function = cn_test_timer_func;
163+
setup_timer(&cn_test_timer, cn_test_timer_func, 0);
165164
cn_test_timer.expires = jiffies + HZ;
166-
cn_test_timer.data = 0;
167165
add_timer(&cn_test_timer);
168166

169167
return 0;

drivers/atm/fore200e.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2519,8 +2519,8 @@ fore200e_load_and_start_fw(struct fore200e* fore200e)
25192519
return err;
25202520

25212521
sprintf(buf, "%s%s", fore200e->bus->proc_name, FW_EXT);
2522-
if (request_firmware(&firmware, buf, device) == 1) {
2523-
printk(FORE200E "missing %s firmware image\n", fore200e->bus->model_name);
2522+
if ((err = request_firmware(&firmware, buf, device)) < 0) {
2523+
printk(FORE200E "problem loading firmware image %s\n", fore200e->bus->model_name);
25242524
return err;
25252525
}
25262526

drivers/net/3c505.c

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -493,21 +493,27 @@ static bool receive_pcb(struct net_device *dev, pcb_struct * pcb)
493493
}
494494
/* read the data */
495495
spin_lock_irqsave(&adapter->lock, flags);
496-
i = 0;
497-
do {
498-
j = 0;
499-
while (((stat = get_status(dev->base_addr)) & ACRF) == 0 && j++ < 20000);
500-
pcb->data.raw[i++] = inb_command(dev->base_addr);
501-
if (i > MAX_PCB_DATA)
502-
INVALID_PCB_MSG(i);
503-
} while ((stat & ASF_PCB_MASK) != ASF_PCB_END && j < 20000);
496+
for (i = 0; i < MAX_PCB_DATA; i++) {
497+
for (j = 0; j < 20000; j++) {
498+
stat = get_status(dev->base_addr);
499+
if (stat & ACRF)
500+
break;
501+
}
502+
pcb->data.raw[i] = inb_command(dev->base_addr);
503+
if ((stat & ASF_PCB_MASK) == ASF_PCB_END || j >= 20000)
504+
break;
505+
}
504506
spin_unlock_irqrestore(&adapter->lock, flags);
507+
if (i >= MAX_PCB_DATA) {
508+
INVALID_PCB_MSG(i);
509+
return false;
510+
}
505511
if (j >= 20000) {
506512
TIMEOUT_MSG(__LINE__);
507513
return false;
508514
}
509-
/* woops, the last "data" byte was really the length! */
510-
total_length = pcb->data.raw[--i];
515+
/* the last "data" byte was really the length! */
516+
total_length = pcb->data.raw[i];
511517

512518
/* safety check total length vs data length */
513519
if (total_length != (pcb->length + 2)) {

drivers/net/bnx2.c

Lines changed: 22 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/* bnx2.c: Broadcom NX2 network driver.
22
*
3-
* Copyright (c) 2004-2008 Broadcom Corporation
3+
* Copyright (c) 2004-2009 Broadcom Corporation
44
*
55
* This program is free software; you can redistribute it and/or modify
66
* it under the terms of the GNU General Public License as published by
@@ -57,8 +57,8 @@
5757

5858
#define DRV_MODULE_NAME "bnx2"
5959
#define PFX DRV_MODULE_NAME ": "
60-
#define DRV_MODULE_VERSION "1.9.0"
61-
#define DRV_MODULE_RELDATE "Dec 16, 2008"
60+
#define DRV_MODULE_VERSION "1.9.2"
61+
#define DRV_MODULE_RELDATE "Feb 11, 2009"
6262

6363
#define RUN_AT(x) (jiffies + (x))
6464

@@ -2910,18 +2910,8 @@ bnx2_rx_int(struct bnx2 *bp, struct bnx2_napi *bnapi, int budget)
29102910

29112911
rx_hdr = (struct l2_fhdr *) skb->data;
29122912
len = rx_hdr->l2_fhdr_pkt_len;
2913+
status = rx_hdr->l2_fhdr_status;
29132914

2914-
if ((status = rx_hdr->l2_fhdr_status) &
2915-
(L2_FHDR_ERRORS_BAD_CRC |
2916-
L2_FHDR_ERRORS_PHY_DECODE |
2917-
L2_FHDR_ERRORS_ALIGNMENT |
2918-
L2_FHDR_ERRORS_TOO_SHORT |
2919-
L2_FHDR_ERRORS_GIANT_FRAME)) {
2920-
2921-
bnx2_reuse_rx_skb(bp, rxr, skb, sw_ring_cons,
2922-
sw_ring_prod);
2923-
goto next_rx;
2924-
}
29252915
hdr_len = 0;
29262916
if (status & L2_FHDR_STATUS_SPLIT) {
29272917
hdr_len = rx_hdr->l2_fhdr_ip_xsum;
@@ -2931,6 +2921,24 @@ bnx2_rx_int(struct bnx2 *bp, struct bnx2_napi *bnapi, int budget)
29312921
pg_ring_used = 1;
29322922
}
29332923

2924+
if (unlikely(status & (L2_FHDR_ERRORS_BAD_CRC |
2925+
L2_FHDR_ERRORS_PHY_DECODE |
2926+
L2_FHDR_ERRORS_ALIGNMENT |
2927+
L2_FHDR_ERRORS_TOO_SHORT |
2928+
L2_FHDR_ERRORS_GIANT_FRAME))) {
2929+
2930+
bnx2_reuse_rx_skb(bp, rxr, skb, sw_ring_cons,
2931+
sw_ring_prod);
2932+
if (pg_ring_used) {
2933+
int pages;
2934+
2935+
pages = PAGE_ALIGN(len - hdr_len) >> PAGE_SHIFT;
2936+
2937+
bnx2_reuse_rx_skb_pages(bp, rxr, NULL, pages);
2938+
}
2939+
goto next_rx;
2940+
}
2941+
29342942
len -= 4;
29352943

29362944
if (len <= bp->rx_copy_thresh) {

drivers/net/bnx2.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/* bnx2.h: Broadcom NX2 network driver.
22
*
3-
* Copyright (c) 2004-2007 Broadcom Corporation
3+
* Copyright (c) 2004-2009 Broadcom Corporation
44
*
55
* This program is free software; you can redistribute it and/or modify
66
* it under the terms of the GNU General Public License as published by

drivers/net/bnx2_fw.h

Lines changed: 4206 additions & 4309 deletions
Large diffs are not rendered by default.

drivers/net/bnx2_fw2.h

Lines changed: 4363 additions & 4432 deletions
Large diffs are not rendered by default.

drivers/net/irda/mcs7780.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -585,7 +585,7 @@ static int mcs_speed_change(struct mcs_cb *mcs)
585585
mcs_get_reg(mcs, MCS_RESV_REG, &rval);
586586
} while(cnt++ < 100 && (rval & MCS_IRINTX));
587587

588-
if(cnt >= 100) {
588+
if (cnt > 100) {
589589
IRDA_ERROR("unable to change speed\n");
590590
ret = -EIO;
591591
goto error;

drivers/net/netxen/netxen_nic_main.c

Lines changed: 1 addition & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -201,9 +201,9 @@ static int nx_set_dma_mask(struct netxen_adapter *adapter, uint8_t revision_id)
201201
adapter->pci_using_dac = 1;
202202
return 0;
203203
}
204+
set_32_bit_mask:
204205
#endif /* CONFIG_IA64 */
205206

206-
set_32_bit_mask:
207207
err = pci_set_dma_mask(pdev, DMA_32BIT_MASK);
208208
if (!err)
209209
err = pci_set_consistent_dma_mask(pdev, DMA_32BIT_MASK);
@@ -372,67 +372,6 @@ static void netxen_set_port_mode(struct netxen_adapter *adapter)
372372
}
373373
}
374374

375-
#define PCI_CAP_ID_GEN 0x10
376-
377-
static void netxen_pcie_strap_init(struct netxen_adapter *adapter)
378-
{
379-
u32 pdevfuncsave;
380-
u32 c8c9value = 0;
381-
u32 chicken = 0;
382-
u32 control = 0;
383-
int i, pos;
384-
struct pci_dev *pdev;
385-
386-
pdev = adapter->pdev;
387-
388-
adapter->hw_read_wx(adapter,
389-
NETXEN_PCIE_REG(PCIE_CHICKEN3), &chicken, 4);
390-
/* clear chicken3.25:24 */
391-
chicken &= 0xFCFFFFFF;
392-
/*
393-
* if gen1 and B0, set F1020 - if gen 2, do nothing
394-
* if gen2 set to F1000
395-
*/
396-
pos = pci_find_capability(pdev, PCI_CAP_ID_GEN);
397-
if (pos == 0xC0) {
398-
pci_read_config_dword(pdev, pos + 0x10, &control);
399-
if ((control & 0x000F0000) != 0x00020000) {
400-
/* set chicken3.24 if gen1 */
401-
chicken |= 0x01000000;
402-
}
403-
printk(KERN_INFO "%s Gen2 strapping detected\n",
404-
netxen_nic_driver_name);
405-
c8c9value = 0xF1000;
406-
} else {
407-
/* set chicken3.24 if gen1 */
408-
chicken |= 0x01000000;
409-
printk(KERN_INFO "%s Gen1 strapping detected\n",
410-
netxen_nic_driver_name);
411-
if (adapter->ahw.revision_id == NX_P3_B0)
412-
c8c9value = 0xF1020;
413-
else
414-
c8c9value = 0;
415-
416-
}
417-
adapter->hw_write_wx(adapter,
418-
NETXEN_PCIE_REG(PCIE_CHICKEN3), &chicken, 4);
419-
420-
if (!c8c9value)
421-
return;
422-
423-
pdevfuncsave = pdev->devfn;
424-
if (pdevfuncsave & 0x07)
425-
return;
426-
427-
for (i = 0; i < 8; i++) {
428-
pci_read_config_dword(pdev, pos + 8, &control);
429-
pci_read_config_dword(pdev, pos + 8, &control);
430-
pci_write_config_dword(pdev, pos + 8, c8c9value);
431-
pdev->devfn++;
432-
}
433-
pdev->devfn = pdevfuncsave;
434-
}
435-
436375
static void netxen_set_msix_bit(struct pci_dev *pdev, int enable)
437376
{
438377
u32 control;
@@ -812,9 +751,6 @@ netxen_nic_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
812751
}
813752
netxen_load_firmware(adapter);
814753

815-
if (NX_IS_REVISION_P3(revision_id))
816-
netxen_pcie_strap_init(adapter);
817-
818754
if (NX_IS_REVISION_P2(revision_id)) {
819755

820756
/* Initialize multicast addr pool owners */

drivers/net/phy/mdio-gpio.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,8 @@ static int __devinit mdio_gpio_bus_init(struct device *dev,
125125
if (gpio_request(bitbang->mdio, "mdio"))
126126
goto out_free_mdc;
127127

128+
gpio_direction_output(bitbang->mdc, 0);
129+
128130
dev_set_drvdata(dev, new_bus);
129131

130132
ret = mdiobus_register(new_bus);

drivers/net/qlge/qlge_main.c

Lines changed: 27 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -898,6 +898,7 @@ static void ql_update_lbq(struct ql_adapter *qdev, struct rx_ring *rx_ring)
898898
lbq_desc->index);
899899
lbq_desc->p.lbq_page = alloc_page(GFP_ATOMIC);
900900
if (lbq_desc->p.lbq_page == NULL) {
901+
rx_ring->lbq_clean_idx = clean_idx;
901902
QPRINTK(qdev, RX_STATUS, ERR,
902903
"Couldn't get a page.\n");
903904
return;
@@ -907,6 +908,9 @@ static void ql_update_lbq(struct ql_adapter *qdev, struct rx_ring *rx_ring)
907908
0, PAGE_SIZE,
908909
PCI_DMA_FROMDEVICE);
909910
if (pci_dma_mapping_error(qdev->pdev, map)) {
911+
rx_ring->lbq_clean_idx = clean_idx;
912+
put_page(lbq_desc->p.lbq_page);
913+
lbq_desc->p.lbq_page = NULL;
910914
QPRINTK(qdev, RX_STATUS, ERR,
911915
"PCI mapping failed.\n");
912916
return;
@@ -968,6 +972,8 @@ static void ql_update_sbq(struct ql_adapter *qdev, struct rx_ring *rx_ring)
968972
if (pci_dma_mapping_error(qdev->pdev, map)) {
969973
QPRINTK(qdev, IFUP, ERR, "PCI mapping failed.\n");
970974
rx_ring->sbq_clean_idx = clean_idx;
975+
dev_kfree_skb_any(sbq_desc->p.skb);
976+
sbq_desc->p.skb = NULL;
971977
return;
972978
}
973979
pci_unmap_addr_set(sbq_desc, mapaddr, map);
@@ -1449,12 +1455,12 @@ static void ql_process_mac_rx_intr(struct ql_adapter *qdev,
14491455
if (qdev->vlgrp && (ib_mac_rsp->flags2 & IB_MAC_IOCB_RSP_V)) {
14501456
QPRINTK(qdev, RX_STATUS, DEBUG,
14511457
"Passing a VLAN packet upstream.\n");
1452-
vlan_hwaccel_rx(skb, qdev->vlgrp,
1458+
vlan_hwaccel_receive_skb(skb, qdev->vlgrp,
14531459
le16_to_cpu(ib_mac_rsp->vlan_id));
14541460
} else {
14551461
QPRINTK(qdev, RX_STATUS, DEBUG,
14561462
"Passing a normal packet upstream.\n");
1457-
netif_rx(skb);
1463+
netif_receive_skb(skb);
14581464
}
14591465
}
14601466

@@ -1511,6 +1517,11 @@ void ql_queue_asic_error(struct ql_adapter *qdev)
15111517
netif_stop_queue(qdev->ndev);
15121518
netif_carrier_off(qdev->ndev);
15131519
ql_disable_interrupts(qdev);
1520+
/* Clear adapter up bit to signal the recovery
1521+
* process that it shouldn't kill the reset worker
1522+
* thread
1523+
*/
1524+
clear_bit(QL_ADAPTER_UP, &qdev->flags);
15141525
queue_delayed_work(qdev->workqueue, &qdev->asic_reset_work, 0);
15151526
}
15161527

@@ -1927,10 +1938,6 @@ static int qlge_send(struct sk_buff *skb, struct net_device *ndev)
19271938
tx_ring_desc = &tx_ring->q[tx_ring->prod_idx];
19281939
mac_iocb_ptr = tx_ring_desc->queue_entry;
19291940
memset((void *)mac_iocb_ptr, 0, sizeof(mac_iocb_ptr));
1930-
if (ql_map_send(qdev, mac_iocb_ptr, skb, tx_ring_desc) != NETDEV_TX_OK) {
1931-
QPRINTK(qdev, TX_QUEUED, ERR, "Could not map the segments.\n");
1932-
return NETDEV_TX_BUSY;
1933-
}
19341941

19351942
mac_iocb_ptr->opcode = OPCODE_OB_MAC_IOCB;
19361943
mac_iocb_ptr->tid = tx_ring_desc->index;
@@ -1956,6 +1963,12 @@ static int qlge_send(struct sk_buff *skb, struct net_device *ndev)
19561963
ql_hw_csum_setup(skb,
19571964
(struct ob_mac_tso_iocb_req *)mac_iocb_ptr);
19581965
}
1966+
if (ql_map_send(qdev, mac_iocb_ptr, skb, tx_ring_desc) !=
1967+
NETDEV_TX_OK) {
1968+
QPRINTK(qdev, TX_QUEUED, ERR,
1969+
"Could not map the segments.\n");
1970+
return NETDEV_TX_BUSY;
1971+
}
19591972
QL_DUMP_OB_MAC_IOCB(mac_iocb_ptr);
19601973
tx_ring->prod_idx++;
19611974
if (tx_ring->prod_idx == tx_ring->wq_len)
@@ -2873,8 +2886,8 @@ static int ql_start_rss(struct ql_adapter *qdev)
28732886
/*
28742887
* Fill out the Indirection Table.
28752888
*/
2876-
for (i = 0; i < 32; i++)
2877-
hash_id[i] = i & 1;
2889+
for (i = 0; i < 256; i++)
2890+
hash_id[i] = i & (qdev->rss_ring_count - 1);
28782891

28792892
/*
28802893
* Random values for the IPv6 and IPv4 Hash Keys.
@@ -3100,7 +3113,11 @@ static int ql_adapter_down(struct ql_adapter *qdev)
31003113
netif_stop_queue(ndev);
31013114
netif_carrier_off(ndev);
31023115

3103-
cancel_delayed_work_sync(&qdev->asic_reset_work);
3116+
/* Don't kill the reset worker thread if we
3117+
* are in the process of recovery.
3118+
*/
3119+
if (test_bit(QL_ADAPTER_UP, &qdev->flags))
3120+
cancel_delayed_work_sync(&qdev->asic_reset_work);
31043121
cancel_delayed_work_sync(&qdev->mpi_reset_work);
31053122
cancel_delayed_work_sync(&qdev->mpi_work);
31063123

@@ -3501,7 +3518,7 @@ static int qlge_set_mac_address(struct net_device *ndev, void *p)
35013518
static void qlge_tx_timeout(struct net_device *ndev)
35023519
{
35033520
struct ql_adapter *qdev = (struct ql_adapter *)netdev_priv(ndev);
3504-
queue_delayed_work(qdev->workqueue, &qdev->asic_reset_work, 0);
3521+
ql_queue_asic_error(qdev);
35053522
}
35063523

35073524
static void ql_asic_reset_work(struct work_struct *work)

drivers/net/sun3lance.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -428,7 +428,7 @@ static int lance_open( struct net_device *dev )
428428
while (--i > 0)
429429
if (DREG & CSR0_IDON)
430430
break;
431-
if (i < 0 || (DREG & CSR0_ERR)) {
431+
if (i <= 0 || (DREG & CSR0_ERR)) {
432432
DPRINTK( 2, ( "lance_open(): opening %s failed, i=%d, csr0=%04x\n",
433433
dev->name, i, DREG ));
434434
DREG = CSR0_STOP;

0 commit comments

Comments
 (0)