328 sizeof (kstat_named_t));
329 (void) snprintf(ks_name, sizeof (ks_name),
330 "%s.%llx.%d.%d", ddi_driver_name(dip),
331 (longlong_t)mpt->un.m_base_wwid,
332 ddi_get_instance(dip), i);
333
334 phyp->phy_stats = kstat_create("mptsas",
335 ddi_get_instance(dip), ks_name, KSTAT_SAS_PHY_CLASS,
336 KSTAT_TYPE_NAMED, ndata, 0);
337
338 if (phyp->phy_stats == NULL) {
339 mutex_exit(&phyp->phy_mutex);
340 mptsas_log(mpt, CE_WARN,
341 "%s: Failed to create %s kstats", __func__,
342 ks_name);
343 continue;
344 }
345
346 ps = (sas_phy_stats_t *)phyp->phy_stats->ks_data;
347
348 kstat_named_init(&ps->seconds_since_last_reset,
349 "SecondsSinceLastReset", KSTAT_DATA_ULONGLONG);
350 kstat_named_init(&ps->tx_frames,
351 "TxFrames", KSTAT_DATA_ULONGLONG);
352 kstat_named_init(&ps->rx_frames,
353 "RxFrames", KSTAT_DATA_ULONGLONG);
354 kstat_named_init(&ps->tx_words,
355 "TxWords", KSTAT_DATA_ULONGLONG);
356 kstat_named_init(&ps->rx_words,
357 "RxWords", KSTAT_DATA_ULONGLONG);
358 kstat_named_init(&ps->invalid_dword_count,
359 "InvalidDwordCount", KSTAT_DATA_ULONGLONG);
360 kstat_named_init(&ps->running_disparity_error_count,
361 "RunningDisparityErrorCount", KSTAT_DATA_ULONGLONG);
362 kstat_named_init(&ps->loss_of_dword_sync_count,
363 "LossofDwordSyncCount", KSTAT_DATA_ULONGLONG);
364 kstat_named_init(&ps->phy_reset_problem_count,
365 "PhyResetProblemCount", KSTAT_DATA_ULONGLONG);
366
367 phyp->phy_stats->ks_private = phyp;
368 phyp->phy_stats->ks_update = mptsas_update_phy_stats;
369 kstat_install(phyp->phy_stats);
370 mutex_exit(&phyp->phy_mutex);
371 }
372 }
373 }
374
375 int
376 mptsas_update_phy_stats(kstat_t *ks, int rw)
377 {
|
328 sizeof (kstat_named_t));
329 (void) snprintf(ks_name, sizeof (ks_name),
330 "%s.%llx.%d.%d", ddi_driver_name(dip),
331 (longlong_t)mpt->un.m_base_wwid,
332 ddi_get_instance(dip), i);
333
334 phyp->phy_stats = kstat_create("mptsas",
335 ddi_get_instance(dip), ks_name, KSTAT_SAS_PHY_CLASS,
336 KSTAT_TYPE_NAMED, ndata, 0);
337
338 if (phyp->phy_stats == NULL) {
339 mutex_exit(&phyp->phy_mutex);
340 mptsas_log(mpt, CE_WARN,
341 "%s: Failed to create %s kstats", __func__,
342 ks_name);
343 continue;
344 }
345
346 ps = (sas_phy_stats_t *)phyp->phy_stats->ks_data;
347
348 kstat_named_init(&ps->invalid_dword_count,
349 "InvalidDwordCount", KSTAT_DATA_ULONGLONG);
350 kstat_named_init(&ps->running_disparity_error_count,
351 "RunningDisparityErrorCount", KSTAT_DATA_ULONGLONG);
352 kstat_named_init(&ps->loss_of_dword_sync_count,
353 "LossofDwordSyncCount", KSTAT_DATA_ULONGLONG);
354 kstat_named_init(&ps->phy_reset_problem_count,
355 "PhyResetProblemCount", KSTAT_DATA_ULONGLONG);
356
357 phyp->phy_stats->ks_private = phyp;
358 phyp->phy_stats->ks_update = mptsas_update_phy_stats;
359 kstat_install(phyp->phy_stats);
360 mutex_exit(&phyp->phy_mutex);
361 }
362 }
363 }
364
365 int
366 mptsas_update_phy_stats(kstat_t *ks, int rw)
367 {
|