diff options
author | Sivakumar Subramani <Sivakumar.Subramani@neterion.com> | 2007-01-31 13:32:57 -0500 |
---|---|---|
committer | Jeff Garzik <jeff@garzik.org> | 2007-02-05 16:58:51 -0500 |
commit | 372cc5972de0eb5b15403d37fa63dcb4f9134ee0 (patch) | |
tree | 20b759f03c3d8f4d41f61f1166487664e084f796 /drivers/net/s2io.c | |
parent | 19a605220cf83a5ec5f8d9f9943e862ebf18f93f (diff) |
s2io: Fixes in updating skb->truesize and code cleanup.
1. Fix for updating skb->truesize properly.
2. Disable NAPI only if more than one ring configured in case of MSI/MSI-X
interrupts. Previously we were disabling NAPI irrespective of number of
rings when MSI/MSI-X interrupts were used.
3. Code cleanup.
Signed-off-by: Sivakumar Subramani <sivakumar.subramani@neterion.com>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
Diffstat (limited to 'drivers/net/s2io.c')
-rw-r--r-- | drivers/net/s2io.c | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/drivers/net/s2io.c b/drivers/net/s2io.c index 350723bd5eb8..9b9b28e85a7d 100644 --- a/drivers/net/s2io.c +++ b/drivers/net/s2io.c | |||
@@ -459,7 +459,7 @@ static int init_shared_mem(struct s2io_nic *nic) | |||
459 | void *tmp_v_addr, *tmp_v_addr_next; | 459 | void *tmp_v_addr, *tmp_v_addr_next; |
460 | dma_addr_t tmp_p_addr, tmp_p_addr_next; | 460 | dma_addr_t tmp_p_addr, tmp_p_addr_next; |
461 | RxD_block_t *pre_rxd_blk = NULL; | 461 | RxD_block_t *pre_rxd_blk = NULL; |
462 | int i, j, blk_cnt, rx_sz, tx_sz; | 462 | int i, j, blk_cnt; |
463 | int lst_size, lst_per_page; | 463 | int lst_size, lst_per_page; |
464 | struct net_device *dev = nic->dev; | 464 | struct net_device *dev = nic->dev; |
465 | unsigned long tmp; | 465 | unsigned long tmp; |
@@ -484,7 +484,6 @@ static int init_shared_mem(struct s2io_nic *nic) | |||
484 | } | 484 | } |
485 | 485 | ||
486 | lst_size = (sizeof(TxD_t) * config->max_txds); | 486 | lst_size = (sizeof(TxD_t) * config->max_txds); |
487 | tx_sz = lst_size * size; | ||
488 | lst_per_page = PAGE_SIZE / lst_size; | 487 | lst_per_page = PAGE_SIZE / lst_size; |
489 | 488 | ||
490 | for (i = 0; i < config->tx_fifo_num; i++) { | 489 | for (i = 0; i < config->tx_fifo_num; i++) { |
@@ -583,7 +582,6 @@ static int init_shared_mem(struct s2io_nic *nic) | |||
583 | size = (size * (sizeof(RxD1_t))); | 582 | size = (size * (sizeof(RxD1_t))); |
584 | else | 583 | else |
585 | size = (size * (sizeof(RxD3_t))); | 584 | size = (size * (sizeof(RxD3_t))); |
586 | rx_sz = size; | ||
587 | 585 | ||
588 | for (i = 0; i < config->rx_ring_num; i++) { | 586 | for (i = 0; i < config->rx_ring_num; i++) { |
589 | mac_control->rings[i].rx_curr_get_info.block_index = 0; | 587 | mac_control->rings[i].rx_curr_get_info.block_index = 0; |
@@ -624,6 +622,8 @@ static int init_shared_mem(struct s2io_nic *nic) | |||
624 | rx_blocks->rxds = kmalloc(sizeof(rxd_info_t)* | 622 | rx_blocks->rxds = kmalloc(sizeof(rxd_info_t)* |
625 | rxd_count[nic->rxd_mode], | 623 | rxd_count[nic->rxd_mode], |
626 | GFP_KERNEL); | 624 | GFP_KERNEL); |
625 | if (!rx_blocks->rxds) | ||
626 | return -ENOMEM; | ||
627 | for (l=0; l<rxd_count[nic->rxd_mode];l++) { | 627 | for (l=0; l<rxd_count[nic->rxd_mode];l++) { |
628 | rx_blocks->rxds[l].virt_addr = | 628 | rx_blocks->rxds[l].virt_addr = |
629 | rx_blocks->block_virt_addr + | 629 | rx_blocks->block_virt_addr + |
@@ -2259,6 +2259,7 @@ static int fill_rxd_3buf(nic_t *nic, RxD_t *rxdp, struct sk_buff *skb) | |||
2259 | return -ENOMEM ; | 2259 | return -ENOMEM ; |
2260 | } | 2260 | } |
2261 | frag_list = skb_shinfo(skb)->frag_list; | 2261 | frag_list = skb_shinfo(skb)->frag_list; |
2262 | skb->truesize += frag_list->truesize; | ||
2262 | frag_list->next = NULL; | 2263 | frag_list->next = NULL; |
2263 | tmp = (void *)ALIGN((long)frag_list->data, ALIGN_SIZE + 1); | 2264 | tmp = (void *)ALIGN((long)frag_list->data, ALIGN_SIZE + 1); |
2264 | frag_list->data = tmp; | 2265 | frag_list->data = tmp; |
@@ -3185,6 +3186,8 @@ static void alarm_intr_handler(struct s2io_nic *nic) | |||
3185 | register u64 val64 = 0, err_reg = 0; | 3186 | register u64 val64 = 0, err_reg = 0; |
3186 | u64 cnt; | 3187 | u64 cnt; |
3187 | int i; | 3188 | int i; |
3189 | if (atomic_read(&nic->card_state) == CARD_DOWN) | ||
3190 | return; | ||
3188 | nic->mac_control.stats_info->sw_stat.ring_full_cnt = 0; | 3191 | nic->mac_control.stats_info->sw_stat.ring_full_cnt = 0; |
3189 | /* Handling the XPAK counters update */ | 3192 | /* Handling the XPAK counters update */ |
3190 | if(nic->mac_control.stats_info->xpak_stat.xpak_timer_count < 72000) { | 3193 | if(nic->mac_control.stats_info->xpak_stat.xpak_timer_count < 72000) { |
@@ -6576,7 +6579,6 @@ static int rx_osm_handler(ring_info_t *ring_data, RxD_t * rxdp) | |||
6576 | skb_put(skb, buf1_len); | 6579 | skb_put(skb, buf1_len); |
6577 | skb->len += buf2_len; | 6580 | skb->len += buf2_len; |
6578 | skb->data_len += buf2_len; | 6581 | skb->data_len += buf2_len; |
6579 | skb->truesize += buf2_len; | ||
6580 | skb_put(skb_shinfo(skb)->frag_list, buf2_len); | 6582 | skb_put(skb_shinfo(skb)->frag_list, buf2_len); |
6581 | sp->stats.rx_bytes += buf1_len; | 6583 | sp->stats.rx_bytes += buf1_len; |
6582 | 6584 | ||
@@ -6797,6 +6799,8 @@ static int s2io_verify_parm(struct pci_dev *pdev, u8 *dev_intr_type) | |||
6797 | "Defaulting to INTA\n"); | 6799 | "Defaulting to INTA\n"); |
6798 | *dev_intr_type = INTA; | 6800 | *dev_intr_type = INTA; |
6799 | } | 6801 | } |
6802 | if ( (rx_ring_num > 1) && (*dev_intr_type != INTA) ) | ||
6803 | napi = 0; | ||
6800 | if (rx_ring_mode > 3) { | 6804 | if (rx_ring_mode > 3) { |
6801 | DBG_PRINT(ERR_DBG, "s2io: Requested ring mode not supported\n"); | 6805 | DBG_PRINT(ERR_DBG, "s2io: Requested ring mode not supported\n"); |
6802 | DBG_PRINT(ERR_DBG, "s2io: Defaulting to 3-buffer mode\n"); | 6806 | DBG_PRINT(ERR_DBG, "s2io: Defaulting to 3-buffer mode\n"); |
@@ -7312,7 +7316,7 @@ int __init s2io_starter(void) | |||
7312 | * Description: This function is the cleanup routine for the driver. It unregist * ers the driver. | 7316 | * Description: This function is the cleanup routine for the driver. It unregist * ers the driver. |
7313 | */ | 7317 | */ |
7314 | 7318 | ||
7315 | static void s2io_closer(void) | 7319 | static __exit void s2io_closer(void) |
7316 | { | 7320 | { |
7317 | pci_unregister_driver(&s2io_driver); | 7321 | pci_unregister_driver(&s2io_driver); |
7318 | DBG_PRINT(INIT_DBG, "cleanup done\n"); | 7322 | DBG_PRINT(INIT_DBG, "cleanup done\n"); |
@@ -7633,6 +7637,7 @@ static void lro_append_pkt(nic_t *sp, lro_t *lro, struct sk_buff *skb, | |||
7633 | lro->last_frag->next = skb; | 7637 | lro->last_frag->next = skb; |
7634 | else | 7638 | else |
7635 | skb_shinfo(first)->frag_list = skb; | 7639 | skb_shinfo(first)->frag_list = skb; |
7640 | first->truesize += skb->truesize; | ||
7636 | lro->last_frag = skb; | 7641 | lro->last_frag = skb; |
7637 | sp->mac_control.stats_info->sw_stat.clubbed_frms_cnt++; | 7642 | sp->mac_control.stats_info->sw_stat.clubbed_frms_cnt++; |
7638 | return; | 7643 | return; |