@@ -2726,6 +2726,9 @@ qla2x00_get_fc_host_stats(struct Scsi_Host *shost)
27262726 struct link_statistics * stats ;
27272727 dma_addr_t stats_dma ;
27282728 struct fc_host_statistics * p = & vha -> fc_host_stat ;
2729+ struct qla_qpair * qpair ;
2730+ int i ;
2731+ u64 ib = 0 , ob = 0 , ir = 0 , or = 0 ;
27292732
27302733 memset (p , -1 , sizeof (* p ));
27312734
@@ -2762,6 +2765,27 @@ qla2x00_get_fc_host_stats(struct Scsi_Host *shost)
27622765 if (rval != QLA_SUCCESS )
27632766 goto done_free ;
27642767
2768+ /* --- */
2769+ for (i = 0 ; i < vha -> hw -> max_qpairs ; i ++ ) {
2770+ qpair = vha -> hw -> queue_pair_map [i ];
2771+ if (!qpair )
2772+ continue ;
2773+ ir += qpair -> counters .input_requests ;
2774+ or += qpair -> counters .output_requests ;
2775+ ib += qpair -> counters .input_bytes ;
2776+ ob += qpair -> counters .output_bytes ;
2777+ }
2778+ ir += ha -> base_qpair -> counters .input_requests ;
2779+ or += ha -> base_qpair -> counters .output_requests ;
2780+ ib += ha -> base_qpair -> counters .input_bytes ;
2781+ ob += ha -> base_qpair -> counters .output_bytes ;
2782+
2783+ ir += vha -> qla_stats .input_requests ;
2784+ or += vha -> qla_stats .output_requests ;
2785+ ib += vha -> qla_stats .input_bytes ;
2786+ ob += vha -> qla_stats .output_bytes ;
2787+ /* --- */
2788+
27652789 p -> link_failure_count = le32_to_cpu (stats -> link_fail_cnt );
27662790 p -> loss_of_sync_count = le32_to_cpu (stats -> loss_sync_cnt );
27672791 p -> loss_of_signal_count = le32_to_cpu (stats -> loss_sig_cnt );
@@ -2781,15 +2805,16 @@ qla2x00_get_fc_host_stats(struct Scsi_Host *shost)
27812805 p -> rx_words = le64_to_cpu (stats -> fpm_recv_word_cnt );
27822806 p -> tx_words = le64_to_cpu (stats -> fpm_xmit_word_cnt );
27832807 } else {
2784- p -> rx_words = vha -> qla_stats . input_bytes ;
2785- p -> tx_words = vha -> qla_stats . output_bytes ;
2808+ p -> rx_words = ib >> 2 ;
2809+ p -> tx_words = ob >> 2 ;
27862810 }
27872811 }
2812+
27882813 p -> fcp_control_requests = vha -> qla_stats .control_requests ;
2789- p -> fcp_input_requests = vha -> qla_stats . input_requests ;
2790- p -> fcp_output_requests = vha -> qla_stats . output_requests ;
2791- p -> fcp_input_megabytes = vha -> qla_stats . input_bytes >> 20 ;
2792- p -> fcp_output_megabytes = vha -> qla_stats . output_bytes >> 20 ;
2814+ p -> fcp_input_requests = ir ;
2815+ p -> fcp_output_requests = or ;
2816+ p -> fcp_input_megabytes = ib >> 20 ;
2817+ p -> fcp_output_megabytes = ob >> 20 ;
27932818 p -> seconds_since_last_reset =
27942819 get_jiffies_64 () - vha -> qla_stats .jiffies_at_last_reset ;
27952820 do_div (p -> seconds_since_last_reset , HZ );
@@ -2809,9 +2834,18 @@ qla2x00_reset_host_stats(struct Scsi_Host *shost)
28092834 struct scsi_qla_host * base_vha = pci_get_drvdata (ha -> pdev );
28102835 struct link_statistics * stats ;
28112836 dma_addr_t stats_dma ;
2837+ int i ;
2838+ struct qla_qpair * qpair ;
28122839
28132840 memset (& vha -> qla_stats , 0 , sizeof (vha -> qla_stats ));
28142841 memset (& vha -> fc_host_stat , 0 , sizeof (vha -> fc_host_stat ));
2842+ for (i = 0 ; i < vha -> hw -> max_qpairs ; i ++ ) {
2843+ qpair = vha -> hw -> queue_pair_map [i ];
2844+ if (!qpair )
2845+ continue ;
2846+ memset (& qpair -> counters , 0 , sizeof (qpair -> counters ));
2847+ }
2848+ memset (& ha -> base_qpair -> counters , 0 , sizeof (qpair -> counters ));
28152849
28162850 vha -> qla_stats .jiffies_at_last_reset = get_jiffies_64 ();
28172851
0 commit comments