fc_stats
struct mlx5_fc_stats *fc_stats = dev->priv.fc_stats;
u32 bulk_len = fc_stats->bulk_query_len;
XA_STATE(xas, &fc_stats->counters, 0);
u32 *data = fc_stats->bulk_query_out;
struct mlx5_fc_stats *fc_stats = dev->priv.fc_stats;
mlx5_fc_pool_release_counter(&fc_stats->fc_pool, counter);
struct mlx5_fc_stats *fc_stats = dev->priv.fc_stats;
kvfree(fc_stats->bulk_query_out);
fc_stats->bulk_query_out = bulk_query_out_tmp;
fc_stats->bulk_query_len = bulk_query_len;
static int mlx5_fc_num_counters(struct mlx5_fc_stats *fc_stats)
xa_for_each(&fc_stats->counters, id, counter)
struct mlx5_fc_stats *fc_stats = container_of(work, struct mlx5_fc_stats,
struct mlx5_core_dev *dev = fc_stats->fc_pool.dev;
queue_delayed_work(fc_stats->wq, &fc_stats->work, fc_stats->sampling_interval);
if (unlikely(fc_stats->bulk_query_len < get_max_bulk_query_len(dev) &&
mlx5_fc_num_counters(fc_stats) > get_init_bulk_query_len(dev)))
struct mlx5_fc_stats *fc_stats = dev->priv.fc_stats;
counter = mlx5_fc_pool_acquire_counter(&fc_stats->fc_pool);
struct mlx5_fc_stats *fc_stats = dev->priv.fc_stats;
err = xa_err(xa_store(&fc_stats->counters, id, counter, GFP_KERNEL));
struct mlx5_fc_stats *fc_stats = dev->priv.fc_stats;
xa_erase(&fc_stats->counters, counter->id);
struct mlx5_fc_stats *fc_stats;
fc_stats = kzalloc_obj(*fc_stats);
if (!fc_stats)
dev->priv.fc_stats = fc_stats;
xa_init(&fc_stats->counters);
if (!fc_stats->bulk_query_out)
fc_stats->wq = create_singlethread_workqueue("mlx5_fc");
if (!fc_stats->wq)
fc_stats->sampling_interval = MLX5_FC_STATS_PERIOD;
INIT_DELAYED_WORK(&fc_stats->work, mlx5_fc_stats_work);
mlx5_fc_pool_init(&fc_stats->fc_pool, dev);
queue_delayed_work(fc_stats->wq, &fc_stats->work, MLX5_FC_STATS_PERIOD);
kvfree(fc_stats->bulk_query_out);
kfree(fc_stats);
struct mlx5_fc_stats *fc_stats = dev->priv.fc_stats;
cancel_delayed_work_sync(&fc_stats->work);
destroy_workqueue(fc_stats->wq);
fc_stats->wq = NULL;
xa_for_each(&fc_stats->counters, id, counter) {
xa_erase(&fc_stats->counters, id);
xa_destroy(&fc_stats->counters);
mlx5_fc_pool_cleanup(&fc_stats->fc_pool);
kvfree(fc_stats->bulk_query_out);
kfree(fc_stats);
struct mlx5_fc_stats *fc_stats = dev->priv.fc_stats;
queue_delayed_work(fc_stats->wq, dwork, delay);
struct mlx5_fc_stats *fc_stats = dev->priv.fc_stats;
fc_stats->sampling_interval = min_t(unsigned long, interval,
fc_stats->sampling_interval);
kfree(adapter->fc_stats);
struct fc_host_statistics *fc_stats;
struct fc_host_statistics *fc_stats;
if (!adapter->fc_stats) {
fc_stats = kmalloc_obj(*fc_stats);
if (!fc_stats)
adapter->fc_stats = fc_stats; /* freed in adapter_release */
memset(adapter->fc_stats, 0, sizeof(*adapter->fc_stats));
return adapter->fc_stats;
static void zfcp_scsi_adjust_fc_host_stats(struct fc_host_statistics *fc_stats,
fc_stats->seconds_since_last_reset =
fc_stats->tx_frames = data->tx_frames - old->tx_frames;
fc_stats->tx_words = data->tx_words - old->tx_words;
fc_stats->rx_frames = data->rx_frames - old->rx_frames;
fc_stats->rx_words = data->rx_words - old->rx_words;
fc_stats->lip_count = data->lip - old->lip;
fc_stats->nos_count = data->nos - old->nos;
fc_stats->error_frames = data->error_frames - old->error_frames;
fc_stats->dumped_frames = data->dumped_frames - old->dumped_frames;
fc_stats->link_failure_count = data->link_failure - old->link_failure;
fc_stats->loss_of_sync_count = data->loss_of_sync - old->loss_of_sync;
fc_stats->loss_of_signal_count =
fc_stats->prim_seq_protocol_err_count =
fc_stats->invalid_tx_word_count =
fc_stats->invalid_crc_count = data->invalid_crcs - old->invalid_crcs;
fc_stats->fcp_input_requests =
fc_stats->fcp_output_requests =
fc_stats->fcp_control_requests =
fc_stats->fcp_input_megabytes = data->input_mb - old->input_mb;
fc_stats->fcp_output_megabytes = data->output_mb - old->output_mb;
static void zfcp_scsi_set_fc_host_stats(struct fc_host_statistics *fc_stats,
fc_stats->seconds_since_last_reset = data->seconds_since_last_reset;
fc_stats->tx_frames = data->tx_frames;
fc_stats->tx_words = data->tx_words;
fc_stats->rx_frames = data->rx_frames;
fc_stats->rx_words = data->rx_words;
fc_stats->lip_count = data->lip;
fc_stats->nos_count = data->nos;
fc_stats->error_frames = data->error_frames;
fc_stats->dumped_frames = data->dumped_frames;
fc_stats->link_failure_count = data->link_failure;
fc_stats->loss_of_sync_count = data->loss_of_sync;
fc_stats->loss_of_signal_count = data->loss_of_signal;
fc_stats->prim_seq_protocol_err_count = data->psp_error_counts;
fc_stats->invalid_tx_word_count = data->invalid_tx_words;
fc_stats->invalid_crc_count = data->invalid_crcs;
fc_stats->fcp_input_requests = data->input_requests;
fc_stats->fcp_output_requests = data->output_requests;
fc_stats->fcp_control_requests = data->control_requests;
fc_stats->fcp_input_megabytes = data->input_mb;
fc_stats->fcp_output_megabytes = data->output_mb;
struct fc_host_statistics *fc_stats;
fc_stats = zfcp_scsi_init_fc_host_stats(adapter);
if (!fc_stats)
zfcp_scsi_adjust_fc_host_stats(fc_stats, data,
zfcp_scsi_set_fc_host_stats(fc_stats, data);
return fc_stats;
struct bfa_fw_fc_uport_stats_s fc_stats;
struct fc_stats *stats;
struct fc_stats *stats;
struct fc_host_statistics *fc_stats;
fc_stats = &lport->host_stats;
memset(fc_stats, 0, sizeof(struct fc_host_statistics));
fc_stats->seconds_since_last_reset = (jiffies - lport->boot_time) / HZ;
struct fc_stats *stats;
fc_stats->tx_frames += READ_ONCE(stats->TxFrames);
fc_stats->tx_words += READ_ONCE(stats->TxWords);
fc_stats->rx_frames += READ_ONCE(stats->RxFrames);
fc_stats->rx_words += READ_ONCE(stats->RxWords);
fc_stats->error_frames += READ_ONCE(stats->ErrorFrames);
fc_stats->invalid_crc_count += READ_ONCE(stats->InvalidCRCCount);
fc_stats->fcp_input_requests += READ_ONCE(stats->InputRequests);
fc_stats->fcp_output_requests += READ_ONCE(stats->OutputRequests);
fc_stats->fcp_control_requests += READ_ONCE(stats->ControlRequests);
fc_stats->fcp_packet_alloc_failures += READ_ONCE(stats->FcpPktAllocFails);
fc_stats->fcp_packet_aborts += READ_ONCE(stats->FcpPktAborts);
fc_stats->fcp_frame_alloc_failures += READ_ONCE(stats->FcpFrameAllocFails);
fc_stats->link_failure_count += READ_ONCE(stats->LinkFailureCount);
fc_stats->fcp_input_megabytes = div_u64(fcp_in_bytes, 1000000);
fc_stats->fcp_output_megabytes = div_u64(fcp_out_bytes, 1000000);
fc_stats->lip_count = -1;
fc_stats->nos_count = -1;
fc_stats->loss_of_sync_count = -1;
fc_stats->loss_of_signal_count = -1;
fc_stats->prim_seq_protocol_err_count = -1;
fc_stats->dumped_frames = -1;
return fc_stats;
struct mlx5_fc_stats *fc_stats;
struct fc_stats __percpu *stats;
lport->stats = alloc_percpu(struct fc_stats);