MFC: Tweak the output of controller event log messages to reduce verbosity

and add some simple formatting of timestamps and event classes.
This commit is contained in:
jhb 2008-07-17 19:10:07 +00:00
parent 07957a7469
commit e2b1f286b6

View File

@ -1021,292 +1021,57 @@ out:
return;
}
/*
* The timestamp is the number of seconds since 00:00 Jan 1, 2000. If
* the bits in 24-31 are all set, then it is the number of seconds since
* boot.
*/
static const char *
format_timestamp(uint32_t timestamp)
{
static char buffer[32];
if ((timestamp & 0xff000000) == 0xff000000)
snprintf(buffer, sizeof(buffer), "boot + %us", timestamp &
0x00ffffff);
else
snprintf(buffer, sizeof(buffer), "%us", timestamp);
return (buffer);
}
static const char *
format_class(int8_t class)
{
static char buffer[6];
switch (class) {
case MFI_EVT_CLASS_DEBUG:
return ("debug");
case MFI_EVT_CLASS_PROGRESS:
return ("progress");
case MFI_EVT_CLASS_INFO:
return ("info");
case MFI_EVT_CLASS_WARNING:
return ("WARN");
case MFI_EVT_CLASS_CRITICAL:
return ("CRIT");
case MFI_EVT_CLASS_FATAL:
return ("FATAL");
case MFI_EVT_CLASS_DEAD:
return ("DEAD");
default:
snprintf(buffer, sizeof(buffer), "%d", class);
return (buffer);
}
}
static void
mfi_decode_evt(struct mfi_softc *sc, struct mfi_evt_detail *detail)
{
switch (detail->arg_type) {
case MR_EVT_ARGS_NONE:
device_printf(sc->mfi_dev, "%d (%us/0x%04x/%d) - %s\n",
detail->seq,
detail->time,
detail->class.members.locale,
detail->class.members.class,
detail->description
);
break;
case MR_EVT_ARGS_CDB_SENSE:
device_printf(sc->mfi_dev, "%d (%us/0x%04x/%d) - PD %02d(e%d/s%d) CDB %*D"
"Sense %*D\n: %s\n",
detail->seq,
detail->time,
detail->class.members.locale,
detail->class.members.class,
detail->args.cdb_sense.pd.device_id,
detail->args.cdb_sense.pd.enclosure_index,
detail->args.cdb_sense.pd.slot_number,
detail->args.cdb_sense.cdb_len,
detail->args.cdb_sense.cdb,
":",
detail->args.cdb_sense.sense_len,
detail->args.cdb_sense.sense,
":",
detail->description
);
break;
case MR_EVT_ARGS_LD:
device_printf(sc->mfi_dev, "%d (%us/0x%04x/%d) - VD %02d/%d "
"event: %s\n",
detail->seq,
detail->time,
detail->class.members.locale,
detail->class.members.class,
detail->args.ld.ld_index,
detail->args.ld.target_id,
detail->description
);
break;
case MR_EVT_ARGS_LD_COUNT:
device_printf(sc->mfi_dev, "%d (%us/0x%04x/%d) - VD %02d/%d "
"count %lld: %s\n",
detail->seq,
detail->time,
detail->class.members.locale,
detail->class.members.class,
detail->args.ld_count.ld.ld_index,
detail->args.ld_count.ld.target_id,
(long long)detail->args.ld_count.count,
detail->description
);
break;
case MR_EVT_ARGS_LD_LBA:
device_printf(sc->mfi_dev, "%d (%us/0x%04x/%d) - VD %02d/%d "
"lba %lld: %s\n",
detail->seq,
detail->time,
detail->class.members.locale,
detail->class.members.class,
detail->args.ld_lba.ld.ld_index,
detail->args.ld_lba.ld.target_id,
(long long)detail->args.ld_lba.lba,
detail->description
);
break;
case MR_EVT_ARGS_LD_OWNER:
device_printf(sc->mfi_dev, "%d (%us/0x%04x/%d) - VD %02d/%d "
"owner changed: prior %d, new %d: %s\n",
detail->seq,
detail->time,
detail->class.members.locale,
detail->class.members.class,
detail->args.ld_owner.ld.ld_index,
detail->args.ld_owner.ld.target_id,
detail->args.ld_owner.pre_owner,
detail->args.ld_owner.new_owner,
detail->description
);
break;
case MR_EVT_ARGS_LD_LBA_PD_LBA:
device_printf(sc->mfi_dev, "%d (%us/0x%04x/%d) - VD %02d/%d "
"lba %lld, physical drive PD %02d(e%d/s%d) lba %lld: %s\n",
detail->seq,
detail->time,
detail->class.members.locale,
detail->class.members.class,
detail->args.ld_lba_pd_lba.ld.ld_index,
detail->args.ld_lba_pd_lba.ld.target_id,
(long long)detail->args.ld_lba_pd_lba.ld_lba,
detail->args.ld_lba_pd_lba.pd.device_id,
detail->args.ld_lba_pd_lba.pd.enclosure_index,
detail->args.ld_lba_pd_lba.pd.slot_number,
(long long)detail->args.ld_lba_pd_lba.pd_lba,
detail->description
);
break;
case MR_EVT_ARGS_LD_PROG:
device_printf(sc->mfi_dev, "%d (%us/0x%04x/%d) - VD %02d/%d "
"progress %d%% in %ds: %s\n",
detail->seq,
detail->time,
detail->class.members.locale,
detail->class.members.class,
detail->args.ld_prog.ld.ld_index,
detail->args.ld_prog.ld.target_id,
detail->args.ld_prog.prog.progress/655,
detail->args.ld_prog.prog.elapsed_seconds,
detail->description
);
break;
case MR_EVT_ARGS_LD_STATE:
device_printf(sc->mfi_dev, "%d (%us/0x%04x/%d) - VD %02d/%d "
"state prior %d new %d: %s\n",
detail->seq,
detail->time,
detail->class.members.locale,
detail->class.members.class,
detail->args.ld_state.ld.ld_index,
detail->args.ld_state.ld.target_id,
detail->args.ld_state.prev_state,
detail->args.ld_state.new_state,
detail->description
);
break;
case MR_EVT_ARGS_LD_STRIP:
device_printf(sc->mfi_dev, "%d (%us/0x%04x/%d) - VD %02d/%d "
"strip %lld: %s\n",
detail->seq,
detail->time,
detail->class.members.locale,
detail->class.members.class,
detail->args.ld_strip.ld.ld_index,
detail->args.ld_strip.ld.target_id,
(long long)detail->args.ld_strip.strip,
detail->description
);
break;
case MR_EVT_ARGS_PD:
device_printf(sc->mfi_dev, "%d (%us/0x%04x/%d) - PD %02d(e%d/s%d) "
"event: %s\n",
detail->seq,
detail->time,
detail->class.members.locale,
detail->class.members.class,
detail->args.pd.device_id,
detail->args.pd.enclosure_index,
detail->args.pd.slot_number,
detail->description
);
break;
case MR_EVT_ARGS_PD_ERR:
device_printf(sc->mfi_dev, "%d (%us/0x%04x/%d) - PD %02d(e%d/s%d) "
"err %d: %s\n",
detail->seq,
detail->time,
detail->class.members.locale,
detail->class.members.class,
detail->args.pd_err.pd.device_id,
detail->args.pd_err.pd.enclosure_index,
detail->args.pd_err.pd.slot_number,
detail->args.pd_err.err,
detail->description
);
break;
case MR_EVT_ARGS_PD_LBA:
device_printf(sc->mfi_dev, "%d (%us/0x%04x/%d) - PD %02d(e%d/s%d) "
"lba %lld: %s\n",
detail->seq,
detail->time,
detail->class.members.locale,
detail->class.members.class,
detail->args.pd_lba.pd.device_id,
detail->args.pd_lba.pd.enclosure_index,
detail->args.pd_lba.pd.slot_number,
(long long)detail->args.pd_lba.lba,
detail->description
);
break;
case MR_EVT_ARGS_PD_LBA_LD:
device_printf(sc->mfi_dev, "%d (%us/0x%04x/%d) - PD %02d(e%d/s%d) "
"lba %lld VD %02d/%d: %s\n",
detail->seq,
detail->time,
detail->class.members.locale,
detail->class.members.class,
detail->args.pd_lba_ld.pd.device_id,
detail->args.pd_lba_ld.pd.enclosure_index,
detail->args.pd_lba_ld.pd.slot_number,
(long long)detail->args.pd_lba.lba,
detail->args.pd_lba_ld.ld.ld_index,
detail->args.pd_lba_ld.ld.target_id,
detail->description
);
break;
case MR_EVT_ARGS_PD_PROG:
device_printf(sc->mfi_dev, "%d (%us/0x%04x/%d) - PD %02d(e%d/s%d) "
"progress %d%% seconds %ds: %s\n",
detail->seq,
detail->time,
detail->class.members.locale,
detail->class.members.class,
detail->args.pd_prog.pd.device_id,
detail->args.pd_prog.pd.enclosure_index,
detail->args.pd_prog.pd.slot_number,
detail->args.pd_prog.prog.progress/655,
detail->args.pd_prog.prog.elapsed_seconds,
detail->description
);
break;
case MR_EVT_ARGS_PD_STATE:
device_printf(sc->mfi_dev, "%d (%us/0x%04x/%d) - PD %02d(e%d/s%d) "
"state prior %d new %d: %s\n",
detail->seq,
detail->time,
detail->class.members.locale,
detail->class.members.class,
detail->args.pd_prog.pd.device_id,
detail->args.pd_prog.pd.enclosure_index,
detail->args.pd_prog.pd.slot_number,
detail->args.pd_state.prev_state,
detail->args.pd_state.new_state,
detail->description
);
break;
case MR_EVT_ARGS_PCI:
device_printf(sc->mfi_dev, "%d (%us/0x%04x/%d) - PCI 0x04%x 0x04%x "
"0x04%x 0x04%x: %s\n",
detail->seq,
detail->time,
detail->class.members.locale,
detail->class.members.class,
detail->args.pci.venderId,
detail->args.pci.deviceId,
detail->args.pci.subVenderId,
detail->args.pci.subDeviceId,
detail->description
);
break;
case MR_EVT_ARGS_RATE:
device_printf(sc->mfi_dev, "%d (%us/0x%04x/%d) - Rebuild rate %d: %s\n",
detail->seq,
detail->time,
detail->class.members.locale,
detail->class.members.class,
detail->args.rate,
detail->description
);
break;
case MR_EVT_ARGS_TIME:
device_printf(sc->mfi_dev, "%d (%us/0x%04x/%d) - Adapter ticks %d "
"elapsed %ds: %s\n",
detail->seq,
detail->time,
detail->class.members.locale,
detail->class.members.class,
detail->args.time.rtc,
detail->args.time.elapsedSeconds,
detail->description
);
break;
case MR_EVT_ARGS_ECC:
device_printf(sc->mfi_dev, "%d (%us/0x%04x/%d) - Adapter ECC %x,%x: %s: %s\n",
detail->seq,
detail->time,
detail->class.members.locale,
detail->class.members.class,
detail->args.ecc.ecar,
detail->args.ecc.elog,
detail->args.ecc.str,
detail->description
);
break;
default:
device_printf(sc->mfi_dev, "%d (%us/0x%04x/%d) - Type %d: %s\n",
detail->seq,
detail->time,
detail->class.members.locale,
detail->class.members.class,
detail->arg_type, detail->description
);
}
device_printf(sc->mfi_dev, "%d (%s/0x%04x/%s) - %s\n", detail->seq,
format_timestamp(detail->time), detail->class.members.locale,
format_class(detail->class.members.class), detail->description);
}
static int