qlcnic: additional driver statistics

Added additional driver statistics to track errors in rcv/tx path.

Signed-off-by: Amit Kumar Salecha <amit.salecha@qlogic.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Amit Kumar Salecha 2010-04-22 02:51:35 +00:00 committed by David S. Miller
parent e802af9cab
commit 8ae6df978b
4 changed files with 21 additions and 2 deletions

View File

@ -428,6 +428,10 @@ struct qlcnic_adapter_stats {
u64 xmit_on; u64 xmit_on;
u64 xmit_off; u64 xmit_off;
u64 skb_alloc_failure; u64 skb_alloc_failure;
u64 null_skb;
u64 null_rxbuf;
u64 rx_dma_map_error;
u64 tx_dma_map_error;
}; };
/* /*

View File

@ -69,6 +69,14 @@ static const struct qlcnic_stats qlcnic_gstrings_stats[] = {
QLC_SIZEOF(stats.xmit_off), QLC_OFF(stats.xmit_off)}, QLC_SIZEOF(stats.xmit_off), QLC_OFF(stats.xmit_off)},
{"skb_alloc_failure", QLC_SIZEOF(stats.skb_alloc_failure), {"skb_alloc_failure", QLC_SIZEOF(stats.skb_alloc_failure),
QLC_OFF(stats.skb_alloc_failure)}, QLC_OFF(stats.skb_alloc_failure)},
{"null skb",
QLC_SIZEOF(stats.null_skb), QLC_OFF(stats.null_skb)},
{"null rxbuf",
QLC_SIZEOF(stats.null_rxbuf), QLC_OFF(stats.null_rxbuf)},
{"rx dma map error", QLC_SIZEOF(stats.rx_dma_map_error),
QLC_OFF(stats.rx_dma_map_error)},
{"tx dma map error", QLC_SIZEOF(stats.tx_dma_map_error),
QLC_OFF(stats.tx_dma_map_error)},
}; };

View File

@ -1287,6 +1287,7 @@ qlcnic_alloc_rx_skb(struct qlcnic_adapter *adapter,
rds_ring->dma_size, PCI_DMA_FROMDEVICE); rds_ring->dma_size, PCI_DMA_FROMDEVICE);
if (pci_dma_mapping_error(pdev, dma)) { if (pci_dma_mapping_error(pdev, dma)) {
adapter->stats.rx_dma_map_error++;
dev_kfree_skb_any(skb); dev_kfree_skb_any(skb);
buffer->skb = NULL; buffer->skb = NULL;
return -ENOMEM; return -ENOMEM;
@ -1311,8 +1312,10 @@ static struct sk_buff *qlcnic_process_rxbuf(struct qlcnic_adapter *adapter,
PCI_DMA_FROMDEVICE); PCI_DMA_FROMDEVICE);
skb = buffer->skb; skb = buffer->skb;
if (!skb) if (!skb) {
adapter->stats.null_skb++;
goto no_skb; goto no_skb;
}
if (likely(adapter->rx_csum && cksum == STATUS_CKSUM_OK)) { if (likely(adapter->rx_csum && cksum == STATUS_CKSUM_OK)) {
adapter->stats.csummed++; adapter->stats.csummed++;
@ -1502,6 +1505,8 @@ qlcnic_process_rcv_ring(struct qlcnic_host_sds_ring *sds_ring, int max)
if (rxbuf) if (rxbuf)
list_add_tail(&rxbuf->list, &sds_ring->free_list[ring]); list_add_tail(&rxbuf->list, &sds_ring->free_list[ring]);
else
adapter->stats.null_rxbuf++;
skip: skip:
for (; desc_cnt > 0; desc_cnt--) { for (; desc_cnt > 0; desc_cnt--) {

View File

@ -1589,8 +1589,10 @@ qlcnic_xmit_frame(struct sk_buff *skb, struct net_device *netdev)
pdev = adapter->pdev; pdev = adapter->pdev;
if (qlcnic_map_tx_skb(pdev, skb, pbuf)) if (qlcnic_map_tx_skb(pdev, skb, pbuf)) {
adapter->stats.tx_dma_map_error++;
goto drop_packet; goto drop_packet;
}
pbuf->skb = skb; pbuf->skb = skb;
pbuf->frag_count = frag_count; pbuf->frag_count = frag_count;