diff options
Diffstat (limited to 'drivers/net/netxen/netxen_nic_init.c')
-rw-r--r-- | drivers/net/netxen/netxen_nic_init.c | 24 |
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 | ||
1795 | void | 1789 | void |