aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/netxen/netxen_nic_init.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/netxen/netxen_nic_init.c')
-rw-r--r--drivers/net/netxen/netxen_nic_init.c24
1 files changed, 9 insertions, 15 deletions
diff --git a/drivers/net/netxen/netxen_nic_init.c b/drivers/net/netxen/netxen_nic_init.c
index b075a35b85d4..7f999671c7b2 100644
--- a/drivers/net/netxen/netxen_nic_init.c
+++ b/drivers/net/netxen/netxen_nic_init.c
@@ -214,13 +214,12 @@ int netxen_alloc_sw_resources(struct netxen_adapter *adapter)
214 tx_ring->num_desc = adapter->num_txd; 214 tx_ring->num_desc = adapter->num_txd;
215 tx_ring->txq = netdev_get_tx_queue(netdev, 0); 215 tx_ring->txq = netdev_get_tx_queue(netdev, 0);
216 216
217 cmd_buf_arr = vmalloc(TX_BUFF_RINGSIZE(tx_ring)); 217 cmd_buf_arr = vzalloc(TX_BUFF_RINGSIZE(tx_ring));
218 if (cmd_buf_arr == NULL) { 218 if (cmd_buf_arr == NULL) {
219 dev_err(&pdev->dev, "%s: failed to allocate cmd buffer ring\n", 219 dev_err(&pdev->dev, "%s: failed to allocate cmd buffer ring\n",
220 netdev->name); 220 netdev->name);
221 goto err_out; 221 goto err_out;
222 } 222 }
223 memset(cmd_buf_arr, 0, TX_BUFF_RINGSIZE(tx_ring));
224 tx_ring->cmd_buf_arr = cmd_buf_arr; 223 tx_ring->cmd_buf_arr = cmd_buf_arr;
225 224
226 recv_ctx = &adapter->recv_ctx; 225 recv_ctx = &adapter->recv_ctx;
@@ -279,8 +278,7 @@ int netxen_alloc_sw_resources(struct netxen_adapter *adapter)
279 break; 278 break;
280 279
281 } 280 }
282 rds_ring->rx_buf_arr = (struct netxen_rx_buffer *) 281 rds_ring->rx_buf_arr = vzalloc(RCV_BUFF_RINGSIZE(rds_ring));
283 vmalloc(RCV_BUFF_RINGSIZE(rds_ring));
284 if (rds_ring->rx_buf_arr == NULL) { 282 if (rds_ring->rx_buf_arr == NULL) {
285 printk(KERN_ERR "%s: Failed to allocate " 283 printk(KERN_ERR "%s: Failed to allocate "
286 "rx buffer ring %d\n", 284 "rx buffer ring %d\n",
@@ -288,7 +286,6 @@ int netxen_alloc_sw_resources(struct netxen_adapter *adapter)
288 /* free whatever was already allocated */ 286 /* free whatever was already allocated */
289 goto err_out; 287 goto err_out;
290 } 288 }
291 memset(rds_ring->rx_buf_arr, 0, RCV_BUFF_RINGSIZE(rds_ring));
292 INIT_LIST_HEAD(&rds_ring->free_list); 289 INIT_LIST_HEAD(&rds_ring->free_list);
293 /* 290 /*
294 * Now go through all of them, set reference handles 291 * Now go through all of them, set reference handles
@@ -346,7 +343,7 @@ static u32 netxen_decode_crb_addr(u32 addr)
346 if (pci_base == NETXEN_ADDR_ERROR) 343 if (pci_base == NETXEN_ADDR_ERROR)
347 return pci_base; 344 return pci_base;
348 else 345 else
349 return (pci_base + offset); 346 return pci_base + offset;
350} 347}
351 348
352#define NETXEN_MAX_ROM_WAIT_USEC 100 349#define NETXEN_MAX_ROM_WAIT_USEC 100
@@ -1486,7 +1483,8 @@ static struct sk_buff *netxen_process_rxbuf(struct netxen_adapter *adapter,
1486 if (!skb) 1483 if (!skb)
1487 goto no_skb; 1484 goto no_skb;
1488 1485
1489 if (likely(adapter->rx_csum && cksum == STATUS_CKSUM_OK)) { 1486 if (likely((adapter->netdev->features & NETIF_F_RXCSUM)
1487 && cksum == STATUS_CKSUM_OK)) {
1490 adapter->stats.csummed++; 1488 adapter->stats.csummed++;
1491 skb->ip_summed = CHECKSUM_UNNECESSARY; 1489 skb->ip_summed = CHECKSUM_UNNECESSARY;
1492 } else 1490 } else
@@ -1763,14 +1761,10 @@ int netxen_process_cmd_ring(struct netxen_adapter *adapter)
1763 1761
1764 smp_mb(); 1762 smp_mb();
1765 1763
1766 if (netif_queue_stopped(netdev) && netif_carrier_ok(netdev)) { 1764 if (netif_queue_stopped(netdev) && netif_carrier_ok(netdev))
1767 __netif_tx_lock(tx_ring->txq, smp_processor_id()); 1765 if (netxen_tx_avail(tx_ring) > TX_STOP_THRESH)
1768 if (netxen_tx_avail(tx_ring) > TX_STOP_THRESH) {
1769 netif_wake_queue(netdev); 1766 netif_wake_queue(netdev);
1770 adapter->tx_timeo_cnt = 0; 1767 adapter->tx_timeo_cnt = 0;
1771 }
1772 __netif_tx_unlock(tx_ring->txq);
1773 }
1774 } 1768 }
1775 /* 1769 /*
1776 * If everything is freed up to consumer then check if the ring is full 1770 * If everything is freed up to consumer then check if the ring is full
@@ -1789,7 +1783,7 @@ int netxen_process_cmd_ring(struct netxen_adapter *adapter)
1789 done = (sw_consumer == hw_consumer); 1783 done = (sw_consumer == hw_consumer);
1790 spin_unlock(&adapter->tx_clean_lock); 1784 spin_unlock(&adapter->tx_clean_lock);
1791 1785
1792 return (done); 1786 return done;
1793} 1787}
1794 1788
1795void 1789void