aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSreenivasa Honnur <Sreenivasa.Honnur@neterion.com>2007-05-10 04:18:54 -0400
committerJeff Garzik <jeff@garzik.org>2007-05-11 17:53:08 -0400
commitc53d49453f738555c252304357cd7da6ba1f1ee0 (patch)
treeeed78e434b5c010dc07a9438b48a58da204f2dac
parent0cec35ebf341726e2490a4b01296a6dc132d1127 (diff)
S2IO: statistics for memory allocation failuers
1. Added code to count the number of memory failures. 2. Added watchdog_timer counter. 3. Changed debug level for some DBG_PRINTS. Signed-off-by: Sreenivasa Honnur <sreenivasa.honnur@neterion.com> Signed-off-by: Jeff Garzik <jeff@garzik.org>
-rw-r--r--drivers/net/s2io.c35
-rw-r--r--drivers/net/s2io.h3
2 files changed, 32 insertions, 6 deletions
diff --git a/drivers/net/s2io.c b/drivers/net/s2io.c
index ac50c1992e11..e2195aa00a04 100644
--- a/drivers/net/s2io.c
+++ b/drivers/net/s2io.c
@@ -281,6 +281,8 @@ static char ethtool_driver_stats_keys[][ETH_GSTRING_LEN] = {
281 ("lro_out_of_sequence_pkts"), 281 ("lro_out_of_sequence_pkts"),
282 ("lro_flush_due_to_max_pkts"), 282 ("lro_flush_due_to_max_pkts"),
283 ("lro_avg_aggr_pkts"), 283 ("lro_avg_aggr_pkts"),
284 ("mem_alloc_fail_cnt"),
285 ("watchdog_timer_cnt")
284}; 286};
285 287
286#define S2IO_XENA_STAT_LEN sizeof(ethtool_xena_stats_keys)/ ETH_GSTRING_LEN 288#define S2IO_XENA_STAT_LEN sizeof(ethtool_xena_stats_keys)/ ETH_GSTRING_LEN
@@ -2186,6 +2188,7 @@ static int fill_rxd_3buf(struct s2io_nic *nic, struct RxD_t *rxdp, struct \
2186 /* skb_shinfo(skb)->frag_list will have L4 data payload */ 2188 /* skb_shinfo(skb)->frag_list will have L4 data payload */
2187 skb_shinfo(skb)->frag_list = dev_alloc_skb(dev->mtu + ALIGN_SIZE); 2189 skb_shinfo(skb)->frag_list = dev_alloc_skb(dev->mtu + ALIGN_SIZE);
2188 if (skb_shinfo(skb)->frag_list == NULL) { 2190 if (skb_shinfo(skb)->frag_list == NULL) {
2191 nic->mac_control.stats_info->sw_stat.mem_alloc_fail_cnt++;
2189 DBG_PRINT(INFO_DBG, "%s: dev_alloc_skb failed\n ", dev->name); 2192 DBG_PRINT(INFO_DBG, "%s: dev_alloc_skb failed\n ", dev->name);
2190 return -ENOMEM ; 2193 return -ENOMEM ;
2191 } 2194 }
@@ -2319,6 +2322,8 @@ static int fill_rx_buffers(struct s2io_nic *nic, int ring_no)
2319 wmb(); 2322 wmb();
2320 first_rxdp->Control_1 |= RXD_OWN_XENA; 2323 first_rxdp->Control_1 |= RXD_OWN_XENA;
2321 } 2324 }
2325 nic->mac_control.stats_info->sw_stat. \
2326 mem_alloc_fail_cnt++;
2322 return -ENOMEM ; 2327 return -ENOMEM ;
2323 } 2328 }
2324 if (nic->rxd_mode == RXD_MODE_1) { 2329 if (nic->rxd_mode == RXD_MODE_1) {
@@ -3673,6 +3678,7 @@ static int s2io_enable_msi_x(struct s2io_nic *nic)
3673 GFP_KERNEL); 3678 GFP_KERNEL);
3674 if (nic->entries == NULL) { 3679 if (nic->entries == NULL) {
3675 DBG_PRINT(INFO_DBG, "%s: Memory allocation failed\n", __FUNCTION__); 3680 DBG_PRINT(INFO_DBG, "%s: Memory allocation failed\n", __FUNCTION__);
3681 nic->mac_control.stats_info->sw_stat.mem_alloc_fail_cnt++;
3676 return -ENOMEM; 3682 return -ENOMEM;
3677 } 3683 }
3678 memset(nic->entries, 0, MAX_REQUESTED_MSI_X * sizeof(struct msix_entry)); 3684 memset(nic->entries, 0, MAX_REQUESTED_MSI_X * sizeof(struct msix_entry));
@@ -3682,6 +3688,7 @@ static int s2io_enable_msi_x(struct s2io_nic *nic)
3682 GFP_KERNEL); 3688 GFP_KERNEL);
3683 if (nic->s2io_entries == NULL) { 3689 if (nic->s2io_entries == NULL) {
3684 DBG_PRINT(INFO_DBG, "%s: Memory allocation failed\n", __FUNCTION__); 3690 DBG_PRINT(INFO_DBG, "%s: Memory allocation failed\n", __FUNCTION__);
3691 nic->mac_control.stats_info->sw_stat.mem_alloc_fail_cnt++;
3685 kfree(nic->entries); 3692 kfree(nic->entries);
3686 return -ENOMEM; 3693 return -ENOMEM;
3687 } 3694 }
@@ -5015,8 +5022,10 @@ static void s2io_vpd_read(struct s2io_nic *nic)
5015 strcpy(nic->serial_num, "NOT AVAILABLE"); 5022 strcpy(nic->serial_num, "NOT AVAILABLE");
5016 5023
5017 vpd_data = kmalloc(256, GFP_KERNEL); 5024 vpd_data = kmalloc(256, GFP_KERNEL);
5018 if (!vpd_data) 5025 if (!vpd_data) {
5026 nic->mac_control.stats_info->sw_stat.mem_alloc_fail_cnt++;
5019 return; 5027 return;
5028 }
5020 5029
5021 for (i = 0; i < 256; i +=4 ) { 5030 for (i = 0; i < 256; i +=4 ) {
5022 pci_write_config_byte(nic->pdev, (vpd_addr + 2), i); 5031 pci_write_config_byte(nic->pdev, (vpd_addr + 2), i);
@@ -5776,6 +5785,8 @@ static void s2io_get_ethtool_stats(struct net_device *dev,
5776 } 5785 }
5777 else 5786 else
5778 tmp_stats[i++] = 0; 5787 tmp_stats[i++] = 0;
5788 tmp_stats[i++] = stat_info->sw_stat.mem_alloc_fail_cnt;
5789 tmp_stats[i++] = stat_info->sw_stat.watchdog_timer_cnt;
5779} 5790}
5780 5791
5781static int s2io_ethtool_get_regs_len(struct net_device *dev) 5792static int s2io_ethtool_get_regs_len(struct net_device *dev)
@@ -6112,7 +6123,10 @@ static int set_rxd_buffer_pointer(struct s2io_nic *sp, struct RxD_t *rxdp,
6112 *skb = dev_alloc_skb(size); 6123 *skb = dev_alloc_skb(size);
6113 if (!(*skb)) { 6124 if (!(*skb)) {
6114 DBG_PRINT(INFO_DBG, "%s: Out of ", dev->name); 6125 DBG_PRINT(INFO_DBG, "%s: Out of ", dev->name);
6115 DBG_PRINT(INFO_DBG, "memory to allocate SKBs\n"); 6126 DBG_PRINT(INFO_DBG, "memory to allocate ");
6127 DBG_PRINT(INFO_DBG, "1 buf mode SKBs\n");
6128 sp->mac_control.stats_info->sw_stat. \
6129 mem_alloc_fail_cnt++;
6116 return -ENOMEM ; 6130 return -ENOMEM ;
6117 } 6131 }
6118 /* storing the mapped addr in a temp variable 6132 /* storing the mapped addr in a temp variable
@@ -6134,8 +6148,11 @@ static int set_rxd_buffer_pointer(struct s2io_nic *sp, struct RxD_t *rxdp,
6134 } else { 6148 } else {
6135 *skb = dev_alloc_skb(size); 6149 *skb = dev_alloc_skb(size);
6136 if (!(*skb)) { 6150 if (!(*skb)) {
6137 DBG_PRINT(INFO_DBG, "%s: dev_alloc_skb failed\n", 6151 DBG_PRINT(INFO_DBG, "%s: Out of ", dev->name);
6138 dev->name); 6152 DBG_PRINT(INFO_DBG, "memory to allocate ");
6153 DBG_PRINT(INFO_DBG, "2 buf mode SKBs\n");
6154 sp->mac_control.stats_info->sw_stat. \
6155 mem_alloc_fail_cnt++;
6139 return -ENOMEM; 6156 return -ENOMEM;
6140 } 6157 }
6141 ((struct RxD3*)rxdp)->Buffer2_ptr = *temp2 = 6158 ((struct RxD3*)rxdp)->Buffer2_ptr = *temp2 =
@@ -6161,8 +6178,11 @@ static int set_rxd_buffer_pointer(struct s2io_nic *sp, struct RxD_t *rxdp,
6161 } else { 6178 } else {
6162 *skb = dev_alloc_skb(size); 6179 *skb = dev_alloc_skb(size);
6163 if (!(*skb)) { 6180 if (!(*skb)) {
6164 DBG_PRINT(INFO_DBG, "%s: dev_alloc_skb failed\n", 6181 DBG_PRINT(INFO_DBG, "%s: Out of ", dev->name);
6165 dev->name); 6182 DBG_PRINT(INFO_DBG, "memory to allocate ");
6183 DBG_PRINT(INFO_DBG, "3 buf mode SKBs\n");
6184 sp->mac_control.stats_info->sw_stat. \
6185 mem_alloc_fail_cnt++;
6166 return -ENOMEM; 6186 return -ENOMEM;
6167 } 6187 }
6168 ((struct RxD3*)rxdp)->Buffer0_ptr = *temp0 = 6188 ((struct RxD3*)rxdp)->Buffer0_ptr = *temp0 =
@@ -6182,6 +6202,8 @@ static int set_rxd_buffer_pointer(struct s2io_nic *sp, struct RxD_t *rxdp,
6182 if (skb_shinfo(*skb)->frag_list == NULL) { 6202 if (skb_shinfo(*skb)->frag_list == NULL) {
6183 DBG_PRINT(ERR_DBG, "%s: dev_alloc_skb \ 6203 DBG_PRINT(ERR_DBG, "%s: dev_alloc_skb \
6184 failed\n ", dev->name); 6204 failed\n ", dev->name);
6205 sp->mac_control.stats_info->sw_stat. \
6206 mem_alloc_fail_cnt++;
6185 return -ENOMEM ; 6207 return -ENOMEM ;
6186 } 6208 }
6187 frag_list = skb_shinfo(*skb)->frag_list; 6209 frag_list = skb_shinfo(*skb)->frag_list;
@@ -6601,6 +6623,7 @@ static void s2io_tx_watchdog(struct net_device *dev)
6601 struct s2io_nic *sp = dev->priv; 6623 struct s2io_nic *sp = dev->priv;
6602 6624
6603 if (netif_carrier_ok(dev)) { 6625 if (netif_carrier_ok(dev)) {
6626 sp->mac_control.stats_info->sw_stat.watchdog_timer_cnt++;
6604 schedule_work(&sp->rst_timer_task); 6627 schedule_work(&sp->rst_timer_task);
6605 sp->mac_control.stats_info->sw_stat.soft_reset_cnt++; 6628 sp->mac_control.stats_info->sw_stat.soft_reset_cnt++;
6606 } 6629 }
diff --git a/drivers/net/s2io.h b/drivers/net/s2io.h
index 8d9cd60658a2..24a3a80a2293 100644
--- a/drivers/net/s2io.h
+++ b/drivers/net/s2io.h
@@ -95,6 +95,9 @@ struct swStat {
95 unsigned long long flush_max_pkts; 95 unsigned long long flush_max_pkts;
96 unsigned long long sum_avg_pkts_aggregated; 96 unsigned long long sum_avg_pkts_aggregated;
97 unsigned long long num_aggregations; 97 unsigned long long num_aggregations;
98 /* Other statistics */
99 unsigned long long mem_alloc_fail_cnt;
100 unsigned long long watchdog_timer_cnt;
98}; 101};
99 102
100/* Xpak releated alarm and warnings */ 103/* Xpak releated alarm and warnings */