summaryrefslogtreecommitdiffstats
path: root/sys/dev
diff options
context:
space:
mode:
authorjhb <jhb@FreeBSD.org>2008-06-26 22:36:38 +0000
committerjhb <jhb@FreeBSD.org>2008-06-26 22:36:38 +0000
commit79aa800148b6c54bcf78e1dc1bea0abc7111a550 (patch)
treed72a442df72431774790963ca1a4f8993d086138 /sys/dev
parent03cd96cc3811dad6aa07fa8afb3e5ae40bf13296 (diff)
downloadFreeBSD-src-79aa800148b6c54bcf78e1dc1bea0abc7111a550.zip
FreeBSD-src-79aa800148b6c54bcf78e1dc1bea0abc7111a550.tar.gz
Tweak the output of event log messages from the controller:
- Each log entry contains a text description in the "description" field of the entry. The existing decode logic always ended up duplicating information that was already in the description string. This made the logs overly verbose. Now we just print out the description string. - Add some simple parsing of the timestamp and event classes. Reviewed by: ambrisko, scottl MFC after: 2 weeks
Diffstat (limited to 'sys/dev')
-rw-r--r--sys/dev/mfi/mfi.c331
1 files changed, 48 insertions, 283 deletions
diff --git a/sys/dev/mfi/mfi.c b/sys/dev/mfi/mfi.c
index cf97674..7b5b762 100644
--- a/sys/dev/mfi/mfi.c
+++ b/sys/dev/mfi/mfi.c
@@ -1021,294 +1021,59 @@ out:
return;
}
-static void
-mfi_decode_evt(struct mfi_softc *sc, struct mfi_evt_detail *detail)
+/*
+ * 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)
{
- 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;
+ 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:
- 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
- );
+ snprintf(buffer, sizeof(buffer), "%d", class);
+ return (buffer);
}
}
+static void
+mfi_decode_evt(struct mfi_softc *sc, struct mfi_evt_detail *detail)
+{
+
+ 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
mfi_aen_register(struct mfi_softc *sc, int seq, int locale)
{
OpenPOWER on IntegriCloud